【问题标题】:Counting how many lines in a file, excluding certain lines计算文件中有多少行,不包括某些行
【发布时间】:2012-04-18 18:43:17
【问题描述】:

我有一个包含很多行的文件,我正在使用流式阅读器来读取文件。我需要做的是计算该文件中有多少行,但在某些点,该文件包含一行文本,例如:“-----”。所以我需要做的是计算文件中的行数,不包括包含“-----”的行。

我不想像这样使用流式阅读器:

StreamReader reader = new StreamReader();
var x = reader.ReadLine()

并检查 x 是否包含“-----”以及它是否增加了一个计数器,因为这是非常密集的,因为文件将是一个巨大的文件。

非常感谢任何帮助。

提前致谢。

【问题讨论】:

标签: c# streamreader


【解决方案1】:

我会使用:

var count = File.ReadLines("foo.txt")
                .Count(line => !line.Contains("-----"));

请注意,File.ReadLines 以流方式读取,因此实际上一次只会读取一个。

但是,有效地会做你描述自己不想想做的事情......只是以一种更漂亮的方式。你说这是“非常密集的”——但这在 inherent 工作中。如果您尝试计算包含特定模式的行数,那么您显然 必须 阅读每一行。我不明白你认为这是可以避免的。

【讨论】:

  • 谢谢你...效果很好,但不阅读每一行就不可能吗?
  • @johnnie:这怎么可能?每行都可能增加或不增加计数。
【解决方案2】:

试试

File.ReadLines("path").Count (l => !l.Contains("-----"));

ReadLines 返回 IEnumerable。由于 Linq 的惰性求值,因此不会将整个文件读入内存以计算行数。

使用

File.ReadAllLines(...) 

这是我最初在答案中错误使用的 会将整个文件读入内存。

【讨论】:

  • 读取包含----的行。但应该反过来。
猜你喜欢
  • 1970-01-01
  • 2020-10-01
  • 1970-01-01
  • 2022-07-15
  • 2015-10-13
  • 1970-01-01
  • 2016-10-02
  • 2020-03-07
  • 1970-01-01
相关资源
最近更新 更多