计算满足条件的文本文件中的行

时间:2014-08-14 21:25:47

标签: c# linq

我有2个来自Microsoft的LINQ示例的脚本。第一个将计算文本文件中的所有文本行。第二个将仅列出满足特定条件的记录。

如何将相同的条件应用于第一个计数脚本?

string[] records = File.ReadAllLines(@"C:\Reports\MyReports.txt");
try
{
    int numberOfRecords = records.Count();
    Console.WriteLine(
        "There are {0} records in the text file.",
        numberOfRecords);
}
catch (OverflowException)
{
    Console.WriteLine("The count is too large to store as an Int32.");
    Console.WriteLine("Try using the LongCount() method instead.");
}

var targetLines = File.ReadAllLines(@"C:\Reports\MyReports.txt")
          .Select((x, i) => new { Line = x, LineNumber = i })
          .Where( x => x.Line.Contains(".dwg"))
          .ToList();

foreach (var line in targetLines)
            {
                Console.WriteLine("{0} : {1}", line.LineNumber, line.Line);
            }

            File.WriteAllText (@"C:\Reports\MyReports2.txt", Util.ToCsvString (targetLines));

1 个答案:

答案 0 :(得分:4)

  

如何将相同的条件应用于第一个计数脚本?

像这样:

int numberOfRecords = records.Count(x => x.Line.Contains(".dwg"));

想法是更改您正在调用的方法:而不是无参数 * ,请调用overload that takes a condition

* 从技术上讲,Count()只接受一个参数 - 应用它的列表。该参数不可见,因为它是使用扩展方法语法隐式传递的。