【问题标题】:Get Line Numbers From File.ReadAllLines() Result从 File.ReadAllLines() 结果中获取行号
【发布时间】:2014-08-01 18:02:34
【问题描述】:

我正在使用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();

【问题讨论】:

  • 鉴于您只是要迭代结果,您应该改用File.ReadLines 以便您可以流式传输输入,而不是不必要地强制将其全部加载到内存中。避免将操作结果具体化到列表中也可能是值得的,除非您确实需要这样做。
  • @Servy...我同意,谢谢

标签: c# file.readalllines


【解决方案1】:

你可以试试这个:

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

另外,here 是一个链接,其中使用了它。

【讨论】:

  • 很好的答案...丹尼尔排在第一位,所以我将他标记为答案
  • @BigDaddy 不是问题,伙计。我很高兴我们都帮助了你。
【解决方案2】:

Select 有一个提供索引的override

因此,您应该能够更改您的选择以包含它:

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

但是,正如 Servy 在他的评论中指出的那样,如果您要加载整个文件,然后再对其进行迭代,那么您不妨以流式方式处理每一行。

不过,对于了解框架的新内容总是有用的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-12
    • 2014-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    相关资源
    最近更新 更多