Получить номера строк из File.ReadAllLines () Результат

1

Я читаю текстовый файл, используя 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();
  • 4
    Учитывая, что вы собираетесь выполнять итерацию только результата, вместо этого вы должны использовать File.ReadLines чтобы можно было передавать поток данных, а не заставлять все это загружаться в память без необходимости. Также, вероятно, стоит избегать материализации результата операции в список, если вам действительно не нужно это делать.
  • 0
    @ Служу ... Согласен, спасибо
Теги:

2 ответа

4
Лучший ответ

Select имеет переопределение, которое предоставляет индекс.

Поэтому вы должны изменить свой выбор, чтобы включить его:

var lineInfo = file.AsParallel().AsOrdered()
    .Select((line, index) => new
    {     
         ....
    }
 })
 .ToList()
 .AsParallel();

Однако, как указывает Servy в своем комментарии, если вы собираетесь загрузить весь файл, только после этого повторите его снова, вы также можете обработать каждую строку потоковым способом.

Однако всегда полезно узнать о новых битах фреймворка.

1

Вы можете попробовать следующее:

.Select((line,index) => new
{     
   Index = index
   lineType = line.Substring(0, 2),
   // the rest of your code.
 })

Также здесь есть ссылка, в которой это используется.

  • 0
    Отличный ответ ... Даниэль пришел первым, поэтому я отметил его как ответ
  • 0
    @ BigDaddy не проблема, чувак. Я рад, что мы оба помогли вам.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню