计算文件中的行数,不包括某些行

时间:2012-04-18 10:41:37

标签: c# streamreader

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

我不想像这样使用streamreader:

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

并检查x是否包含“-----”,如果它确实递增了一个计数器,因为这是非常密集的,因为该文件将是一个巨大的文件。

非常感谢任何帮助。

提前致谢。

2 个答案:

答案 0 :(得分:1)

尝试

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

ReadLines返回IEnumerable。由于Linq的懒惰评估,整个文件不会被读入内存以计算行数。

使用

File.ReadAllLines(...) 

这是我错误地在我的回答中使用的将整个文件读入内存。

答案 1 :(得分:1)

我会用:

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

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

然而,有效地会做你自己描述的而不是想做的事情......只是以一种相当漂亮的方式。你说它“非常密集” - 但这是在固有的工作中。如果您正在尝试计算包含特定模式的行数,您显然 来读取每一行。我不认为你认为这是可以避免的。