Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Помогите разобраться с Split()


Автор: alir 13.10.2005, 22:46
Код

string str1;
string[] strMas = new string[3];
str1 = reader2.ReadToEnd();
strMas = str1.Split();


В файле:

Код

123
56
7


Результат присвоения к strMas:

[0] = 123
[1] = ""
[2] = 56
[3] = ""
[4] = 7

как видите размерность увеличилась.
Как убрать эти промежуточные символы ""?
Нужно чтобы:

[0] = 123
[1] = 56
[2] = 7

Автор: bend0r 14.10.2005, 01:27
Не когда не пользовался Split() но как я понел можно либо через каждую строчку будет пустая строчка либо все в один элемент масива, хотя хз. Попробуй удалять элементы через один.

Как я понел тебе надо строчки из файла засовывать в массив, можно зделать вот так:

Код

string str;
string[] s = new string[3];
int i =0;
while( (str = streamreader.ReadLine() ) != null)
{
    s[i] = str;
    i++;
    stream.Position ++;
}

Автор: -ser- 14.10.2005, 03:09
alir удивительно как твой код отработал что-то вообще. в качестве аргумента в сплите указываются возможные разделители строки, по которым мы хотим ее разбить. а в твоем случае в 1 и 3-м как раз не пустая строка, а на самом деле символы возврата строки.

Код

            string str1 = null;
            string[] strMas = new string[ 3 ];
            string path = @"c:\FileToRead.txt";
            string[] separator = new string[] { "\r\n" }; // если у нас текстовый файл. я указал просто 
                                               // перевод каретки и возврат строки. 
                                               // можно добавить любые отделяющие строку символы
            try
            {
                using( StreamReader sr = new StreamReader( path ) )
                {
                    str1 = sr.ReadToEnd();
                }
            }
            catch( Exception e )
            {
                Console.WriteLine( "The process failed: {0}", e.ToString() );
            }

            strMas = str1.Split( separator, StringSplitOptions.RemoveEmptyEntries );

            foreach( string s in strMas )
            {
                Console.WriteLine( s );
            }


Автор: alir 14.10.2005, 14:53
-ser-
Еще бы ты мне сказал в како сборке находится StringSplitOptions.RemoveEmptyEntries.
Притом строка
Цитата

strMas = str1.Split( separator, StringSplitOptions.RemoveEmptyEntries );

не сработает: cannot convert from 'string' to 'char[]'
Это ошибка возникает при вставке любого параметра, а без них срабатывает, но с неудовлетворительным результатом.

Автор: alir 14.10.2005, 15:03
bend0r
Код тоже не рабочий:
откуда ты вообще взял
Цитата
stream.Position ++;

???
Добавлено @ 15:10
О! Дошло наконец. Вот как правильно будет работать:
Код

string[] strMas = new string[i];
string str;    
int j =0;

while(reader2.Peek() >= 0)    
{    
    str = reader2.ReadLine();
    strMas[j] = str;
    j++;
}

Автор: bend0r 14.10.2005, 15:27
Цитата(alir @ 14.10.2005, 15:03)
bend0r
Код тоже не рабочий:
откуда ты вообще взял
Цитата
stream.Position ++;

???


у меня все работает, вот полный код:
Код


FileStream stream = new FileStream("File.txt", FileMode.OpenOrCreate);
StreamReader streamreader = new StreamReader(stream);

string str;
string[] s = new string[3];
int i =0;
while((str = streamreader.ReadLine()) != null)
    {
        Console.WriteLine(str);
        s[i] = str;
        i++;
        stream.Position ++;
    }



хотя и без
Код
stream.Position ++; 
работает smile
я из своего кода выдернул там немного другие задачи.


Автор: -ser- 15.10.2005, 11:30
alir
Цитата
Еще бы ты мне сказал в како сборке находится StringSplitOptions.RemoveEmptyEntries.

извиняюсь, не посмотрел. это в НЕТ2.0.
в противном случае вместо этого в качестве второго аргумента можно написать true, что означает omitEmptyEntries. будет работать аналогично. хотя, насколько я понимаю, у тебя пустых строк в файле нет, так что можно указать и false, те же яйца. посмотри документацию String.Split. Там вроде все просто.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)