计算文本文件中的行数

时间:2012-01-21 20:14:23

标签: c#

我在文本文件中有以下行,我需要知道有多少行以Y结尾,有多少以N结尾。

在Y之后和N之后有一个空格。

越快越好,因为它可能包含一百万左右的行。(所以我宁愿不遍历每一行)

1 个答案:

答案 0 :(得分:7)

当然,你将拥有遍历每一行。真的没有那种解决方法。然后,您可以使用LINQ轻松地计算它们:

var query = File.ReadLines("file.txt")
                .Select(line => new { Y = line.EndsWith("Y ") ? 1 : 0,
                                      N = line.EndsWith("N ") ? 1 : 0 })
                .Aggregate(new { Y = 0, N = 0 },
                           (current, next) => new { Y = current.Y + next.Y,
                                                    N = current.N + next.N });

var yCount = query.Y;
var nCount = query.N;

如果在Y / N之后没有恰好一个空格,请将其更改为使用Trim()代替...例如:

var query = File.ReadLines("file.txt")
                .Select(line => line.Trim())
                .Select(line => new { Y = line.EndsWith("Y") ? 1 : 0,
                                      N = line.EndsWith("N") ? 1 : 0 })
// remainder of code as before

这将迭代整个文件一次,计算一下。不可否认,它正在创建 lot 对象,但GC非常好。它没有将整个文件拉入内存,或者读取两次。