2015-10-30 2 views
0

У меня есть файл содержит две строки, и каждая строка содержит 200 полей, и я хотел бы разделить его на массивыошибались данные в то время как разделить файл в массивы

using (StreamReader sr = File.OpenText(pathSensorsCalc)) 
{ 
    string s = String.Empty; 
    while ((s = sr.ReadLine()) == null) { }; 
    String line1 = sr.ReadToEnd(); 
    String line2 = sr.ReadToEnd(); 
    CalcValue[0] = new String[200]; 
    CalcValue[1] = new String[200]; 
    CalcValue[0] = line1.Split(' '); 
    CalcValue[1] = line2.Split(' '); 
} 

После приведенного выше кода, CalcValue[1] пуст и CalcValue[0] содержит данные второй линии (instad первого). Есть идеи?

ответ

2

При использовании

sr.ReadToEnd() 

, вы читаете до конца вашего входного потока. Это означает, что после первого звонка

String line1 = sr.ReadToEnd() 

Ваш поток уже находится в последнем положении. Замените звонок ReadToEnd() с помощью вызовов ReadLine(). Это должно сработать.

0

В ОС Windows новая строка представлена ​​\r\n. Поэтому вы не должны разделять строки пробелами (" ").

Это означает, что вы должны использовать другую перегрузку метода Split - Split(char[], StringSplitOptions). Первый аргумент - это символы, которые вы хотите разделить, а второй - параметры. Зачем вам нужны варианты? Потому что если вы разделите на 2 непрерывных символа, вы получите пустой элемент.

Так что теперь легко понять, что делает этот код и почему:

line1.Split (new[] {'\r', '\n'}, StringSplitOptions.RemoveEmptyEntries); 
+0

Вы можете также использовать константу Environment.NewLine вместо непосредственного создания массив символов, если я не ошибаюсь. –

+0

@ThomasSymalla Да, вы правы. Но я просто хочу, чтобы OP больше узнала о ОС Windows, вместо того, чтобы просто не знать, что такое значение «Environment.NewLine». – Sweeper

+0

@Sweeper Я сделал то, что вы предложили, и теперь у меня проблема с CalcValue [1] [199], которая содержит это значение: 15139.5 ;;;;;;;;;;; (почему все эти запятые появились?) Спасибо! – user687459

Смежные вопросы