0

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

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

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

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

任何帮助深表感谢。

提前致谢。

4

2 回答 2

1

尝试

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

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

使用

File.ReadAllLines(...) 

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

于 2012-04-18T10:42:55.817 回答
1

我会使用:

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

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

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

于 2012-04-18T10:43:17.993 回答