найти текстовый файл с помощью c # и отобразить номер строки и полную строку, содержащую ключевое слово поиска - PullRequest
15 голосов
/ 13 марта 2010

Мне нужна помощь для поиска текстового файла (файла журнала) с помощью c # и отображения номера строки и полной строки, содержащей ключевое слово для поиска.

Ответы [ 3 ]

22 голосов
/ 13 марта 2010

Это небольшое изменение от: http://msdn.microsoft.com/en-us/library/aa287535%28VS.71%29.aspx

int counter = 0;
string line;

// Read the file and display it line by line.
System.IO.StreamReader file = new System.IO.StreamReader("c:\\test.txt");
while((line = file.ReadLine()) != null)
{
    if ( line.Contains("word") )
    {
        Console.WriteLine (counter.ToString() + ": " + line);
    }

   counter++;
}

file.Close();
11 голосов
/ 23 сентября 2014

Немного опоздал с игрой, но случилось через этот пост и подумал, что я добавлю альтернативный ответ.

foreach (var match in File.ReadLines(@"c:\LogFile.txt")
                          .Select((text, index) => new { text, lineNumber = index+ 1 })
                          .Where(x => x.text.Contains("SEARCHWORD")))
{
    Console.WriteLine("{0}: {1}", match.lineNumber, match.text);
}

Используется:

  • File.ReadLines , что устраняет необходимость в StreamReader, а также прекрасно работает с предложением LINQ Where для возврата отфильтрованного набора строк из файла. *

  • Перегрузка Enumerable. Выберите , который возвращает индекс каждого элемента, к которому можно затем добавить 1, чтобы получить номер строки для совпадающей строки.

Пример ввода:

just a sample line
another sample line
first matching SEARCHWORD line
not a match
...here's aSEARCHWORDmatch
SEARCHWORD123
asdfasdfasdf

Вывод:

3: first matching SEARCHWORD line
5: ...here's aSEARCHWORDmatch
6: SEARCHWORD123
1 голос
/ 11 января 2012

Для экспорта в Excel вы можете использовать формат файла CSV, как писал Пессимист. Если вы не знаете, что писать, попробуйте ввести некоторые данные в MS Excel, нажмите «Сохранить как» в меню и выберите CSV в качестве типа файла.

Будьте внимательны при написании формата файла CSV, поскольку в некоторых языках по умолчанию для разделения значений используется не запятая. Например, в бразильском португальском языке по умолчанию используется запятая в качестве десятичного разделителя, точка в качестве разделителя тысяч и точка с запятой для разделения значений. Помните о культуре, когда пишете это.

Другой альтернативой является использование горизонтальных вкладок в качестве разделителей. Попробуйте написать строку, нажмите клавишу TAB, а затем еще одну строку и вставьте ее в Microsoft Excel. Это разделитель по умолчанию в этой программе.

Если вы используете специальное решение для вашей конкретной проблемы, любая альтернатива может быть использована без долгих размышлений. Если вы программируете что-то, что будет использоваться другими людьми (или в других средах), помните о культурных различиях.

О, я только что вспомнил: вы можете написать электронную таблицу с использованием XML, вы можете сделать это только с пакетом .NET. Я сделал это много лет назад с C # .NET 2.0

...