从 File.ReadAllLines() 的结果中获取行号

3
我正在使用 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 以便流式读取输入而无需将所有内容不必要地加载到内存中。此外,如果没有必要,请避免将操作的结果实例化为列表。 - Servy
@Servy...我同意,谢谢。 - Big Daddy
2个回答

4

Select有一个重载方法,可以提供索引。

因此,您应该能够更改您的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.
 })

这里链接是一个链接,可以在其中使用它。


很棒的答案...Daniel的回答最先到达,所以我标记了他的作为答案。 - Big Daddy
@BigDaddy 没问题,伙计。我很高兴我们都能帮到你。 - Christos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接