web-dev-qa-db-ja.com

c#を使用してテキストファイルを検索し、行番号と検索キーワードを含む完全な行を表示する

C#を使用してテキストファイル(ログファイル)を検索し、行番号と検索キーワードを含む完全な行を表示するには、ヘルプが必要です。

17
Chitresh

これは次のわずかな変更です 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();
22
PeterM

これについてはゲームに少し遅れましたが、この投稿全体で起こり、別の答えを追加したいと思いました。

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's aSEARCHWORDmatch
SEARCHWORD123
asdfasdfasdf

出力:

3: first matching SEARCHWORD line
5: ...here's aSEARCHWORDmatch
6: SEARCHWORD123
12
vivat pisces

Excelをエクスポートするには、Pessimistが書いたように、CSVファイル形式を使用できます。何を書くかわからない場合は、MS Excelにデータを入力して、メニューの[名前を付けて保存]オプションをクリックし、ファイルの種類としてCSVを選択してください。

一部の言語では、値を区切るデフォルトはカンマではないため、CSVファイル形式を書き込む場合は注意してください。たとえば、ブラジルのポルトガル語では、デフォルトは小数点としてカンマ、3桁ごとにドット、値を区切るためのセミコロンです。それを書くときは文化に注意してください。

他の選択肢は、セパレータとして水平タブを使用することです。文字列を書き込んでみて、Tabキーを押してから別の文字列を押して、Microsoft Excelに貼り付けます。これは、そのプログラムのデフォルトのセパレータです。

特定の問題に対してアドホックソリューションを使用している場合は、どちらの選択肢もあまり考えずに使用できます。他の人(または他の環境)が使用するものをプログラミングする場合は、文化固有の違いに注意してください。

ああ、今覚えています。XMLを使用してスプレッドシートを作成できます。これは、.NETパッケージだけで実行できます。その数年前にC#.NET 2.0でやった

1
Malignus