Искать текстовый файл с помощью С# и отображать номер строки и полную строку, содержащую ключевое слово поиска

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

Ответы

Ответ 1

Это небольшая модификация: 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();

Ответ 2

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

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.Select, которая возвращает индекс каждого элемента, который вы можете добавить 1 к, чтобы получить номер строки для соответствующей строки.

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

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

Вывод:

3: first matching SEARCHWORD line
5: ...here aSEARCHWORDmatch
6: SEARCHWORD123

Ответ 3

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

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

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

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

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