2013-03-21 16 views
10

私はC#を初めて使用しており、StreamReaderを使い始めました。私は一度に1行ずつファイルを読み込み、 "I/RPTGEN"のような特定のキーワードと一致するときにその行を出力しようとしています。CSVファイルを一度に1行読み込み、キーワードを解析する方法

これまでのところ、ファイル全体を文字列に読み込む方法を理解しましたが、一度に1行ずつ読み込む方法がわかりません。

これまでのところ私のコードです。

using System; 
using System.IO; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace ConsoleApplication5 
{ 
class Test 
{ 
    public static void Main() 
    { 
     try 
     { 
      using (StreamReader sr = new StreamReader("c:/temp/ESMDLOG.csv")) 
      { 
       String line = sr.ReadToEnd(); 
       Console.WriteLine(line); 

       Console.ReadLine(); 
      } 
     } 
     catch (Exception e) 
     { 
      Console.WriteLine("The File could not be read:"); 
      Console.WriteLine(e.Message); 

      Console.ReadLine(); 
     } 
    } 
} 
} 

さらに、ファイル内の1行のサンプルを示します。

諮問2/2013分の27午前12時00分44秒AM、I/RPTGEN(cadinterface)、I/RPTGEN失敗しました - エラー500 - 内部サーバーエラー - (URLはログを確認してください)レポート要求に対して返さ。

+5

彼の質問は、「1行ずつファイルやキーワードを解析CSVを読み込む方法」をタイトルにした@Tosi。そんなに厳しくしないでください。 –

答えて

18

CSVファイルはReadToEndが受け入れられる可能性がちょうど1行が含まれていますが、複数のラインで構成ログファイルを持っている場合、StreamReaderオブジェクトのReadLine

を使用して行ずつを読み取るために優れている場合一度に一つのラインを読むための
using (StreamReader sr = new StreamReader("c:/temp/ESMDLOG.csv")) 
{ 
    string currentLine; 
    // currentLine will be null when the StreamReader reaches the end of file 
    while((currentLine = sr.ReadLine()) != null) 
    { 
     // Search, case insensitive, if the currentLine contains the searched keyword 
     if(currentLine.IndexOf("I/RPTGEN", StringComparison.CurrentCultureIgnoreCase) >= 0) 
     { 
      Console.WriteLine(currentLine); 
     } 
    } 
} 
+0

あなたはすべての答えに感謝します。それは私のプロジェクトを終了することに近いgtを可能にしました。 – Steve

+0

日付とシリアル番号などの複数のキーワードを探していて、CSVに複数のキーワードが含まれている場合はどうなりますか? ExpirationDateとDateの比較では、検索するキーワードをどのように制御できますか?どうもありがとうございます! –

+0

申し訳ありませんが、現在の情報で私は答えることができません。すべての要件を指定する新しい質問はどうですか?私よりも多くの人があなたの問題を見るでしょう。もちろん、この質問に戻るリンクを追加して、新しい質問への別のリンクをここにお知らせください。 – Steve

6

もう一つの方法は次のとおりです。

var searchItem = "Error 500"; 

var lines = File.ReadLines("c:/temp/ESMDLOG.csv"); 

foreach (string line in lines) 
{ 
    if (line.Contains(searchItem)) 
    { 
     Console.WriteLine(line); 
    } 
} 
関連する問題