У меня есть 2 сценария из примеров LINQ от Microsoft. Первый будет считать все строки текста в текстовом файле. Во втором будут перечислены только записи, удовлетворяющие определенному условию.

Как я могу применить то же условие к первому скрипту подсчета?

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
bolilloBorracho 15 Авг 2014 в 01:25
Отвечает ли это на ваш вопрос? подсчет строк в текстовом файле
 – 
Josh Correia
16 Окт 2020 в 02:11

1 ответ

Лучший ответ

Как я могу применить то же условие к первому скрипту подсчета?

Как это:

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

Идея состоит в том, чтобы изменить вызываемый метод: вместо метода без параметров * вызовите метод перегрузка, которая принимает условие.

* Технически Count() принимает единственный параметр - список, к которому он применяется. Параметр не отображается, поскольку он передается неявно с использованием синтаксиса метода расширения.

4
Sergey Kalinichenko 15 Авг 2014 в 01:27
Большое спасибо. Сегодня я потратил на это очень много времени.
 – 
bolilloBorracho
15 Авг 2014 в 01:57