Я читаю текстовый файл, используя File.ReadAllLines()
, но я также могу использовать File.ReadLines(). После того, как я прочитал файл, следующим шагом будет создание списка из результата. В моем списке мне нужно получить номер строки для каждой записи/строки в текстовом файле. Это можно сделать? Как? Для моего конечного результата мне нужен мой список, чтобы иметь свойство Index.
Вот что у меня есть:
var file = System.IO.File.ReadAllLines(path);
var lineInfo = file.AsParallel().AsOrdered()
.Select(line => new
{
// index = **** I WANT THE INDEX/ROWNUMBER HERE ****
lineType = line.Substring(0, 2),
winID = line.Substring(11, 9),
effectiveDate = line.Substring(0, 2) == EmployeeLine ? line.Substring(237, 8).ToDateTimeExact("yyyyMMdd") : null,
line
})
.ToList()
.AsParallel();
Select
имеет переопределение, которое предоставляет индекс.
Поэтому вы должны изменить свой выбор, чтобы включить его:
var lineInfo = file.AsParallel().AsOrdered()
.Select((line, index) => new
{
....
}
})
.ToList()
.AsParallel();
Однако, как указывает Servy в своем комментарии, если вы собираетесь загрузить весь файл, только после этого повторите его снова, вы также можете обработать каждую строку потоковым способом.
Однако всегда полезно узнать о новых битах фреймворка.
Вы можете попробовать следующее:
.Select((line,index) => new
{
Index = index
lineType = line.Substring(0, 2),
// the rest of your code.
})
Также здесь есть ссылка, в которой это используется.
File.ReadLines
чтобы можно было передавать поток данных, а не заставлять все это загружаться в память без необходимости. Также, вероятно, стоит избегать материализации результата операции в список, если вам действительно не нужно это делать.