2014-01-18 4 views
0

Я немного застрял в конкретной проблеме. Я работаю в .NET и должен разбирать многострочный текстовый файл в несколько переменных. Насколько я знаю, до сих пор я читал первую строчку. Вот то, что текстовый файл выглядит следующим образом:Анализ многострочного текстового файла на несколько переменных

1/10/2014 1,2,3 
1 0 0 
1 1 0 
1 2 0 
1 3 0 
1 4 0 
1 5 0 
1 6 0 
1 7 0 
1 8 0 

Вот что мой код выглядит для первой линии - это, как предполагается, вытаскивая дату (прямо сейчас, это не вытаскивая дату, это сегодня присвоение) и «1,2,3», затем заменяя запятые пробелами для «1 2 3». В остальном каждое число в каждой строке должно быть его собственной переменной, и именно там я застрял. Мне нужно только подобрать «1» для каждой последующей строки один раз в качестве одной переменной (она всегда будет 0 или 1), а второе число в каждом является номером уровня (они всегда будут 0-8) и последние числа в каждой строке, которые теперь все «0», являются отдельными переменными и будут отличаться.

string filePath = ConfigurationSettings.AppSettings["FileName.txt"]; 
StreamReader reader = null; 
FileStream fs = null; 
fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); 
reader = new StreamReader(fs); 
string line = null; 
line = reader.ReadLine(); 
string[] lineInfo = line.Split(' '); 
string NumbersTemp = lineInfo[1]; 
string numbers = NumbersTemp.Replace(","," "); 
string date = DateTime.Today.ToString("MM/dd/yyyy"); 

Как вы можете видеть, я не получил очень далеко с переменными, и я даже не уверен, что это будет правильно работать так, как я его до сих пор. Это не ошибка, но она не завершена. Любая помощь в получении этих переменных была бы высоко оценена.

+1

Поместить ReadLine в петлю – Paparazzi

ответ

3

StreamReader.ReadLine читает одну строку. Вы используете его только один раз. Используйте цикл:

string date = DateTime.Today.ToString("MM/dd/yyyy"); 
string filePath = ConfigurationSettings.AppSettings["FileName.txt"]; 
using (var fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) 
using(var reader = new StreamReader(fs)) 
{ 
    string line; 
    while ((line = reader.ReadLine()) != null) 
    { 
     string[] lineInfo = line.Split(' '); 
     string NumbersTemp = lineInfo[1]; 
     string numbers = NumbersTemp.Replace(",", " "); 
     // ... 
    } 
} 

Я также с помощью using -statement, чтобы гарантировать, что все неуправляемые ресурсы расположены имущество даже в случае ошибки.

+0

Я понимаю, что это означает, что первая строка - это lineInfo [0], следующая - lineInfo [1] и т. Д., И лучший способ захватить переменные - это получить подстроки каждой строки? – user2697262

+0

@ user2697262: Нет 'line.Split ('')' разбивать каждую строку на куски, где каждый токен является «словом» в строке (потому что вы разбиваете пробелы). Таким образом, вы можете получить доступ к каждому столбцу/слову с помощью индексатора 'lineInfo'. Цикл justs выполняет итерацию каждой строки в файле. Если вы хотите получить к нему доступ таким же образом, вам нужно загрузить все в память, например, используя «File.ReadAllLines (путь)». Возвращаемый массив содержит уже все строки в файле. –

+0

Я столкнулся с проблемой, связанной с этим: CS1519: Недопустимый токен 'using' в объявлении члена класса, структуры или интерфейса – user2697262

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