我有一个包含很多行的文件,我正在使用streamreader来读取文件。我需要做的是计算此文件中有多少行,但在某些点上,该文件包含一行文本:“-----”。所以我需要做的是计算文件中的行数,不包括包含“-----”的行。
我不想像这样使用streamreader:
StreamReader reader = new StreamReader();
var x = reader.ReadLine()
并检查x是否包含“-----”,如果它确实递增了一个计数器,因为这是非常密集的,因为该文件将是一个巨大的文件。
非常感谢任何帮助。
提前致谢。
答案 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
以流式方式读取,因此这实际上只能一次读取一个。
然而,有效地会做你自己描述的而不是想做的事情......只是以一种相当漂亮的方式。你说它“非常密集” - 但这是在固有的工作中。如果您正在尝试计算包含特定模式的行数,您显然 来读取每一行。我不认为你认为这是可以避免的。