19

私はC#が初めてで、使い始めましStreamReaderた。一度に 1 行ずつファイルを読み込んで、「I/RPTGEN」などの特定のキーワードに一致する行を出力しようとしています。

これまでのところ、ファイル全体を文字列に読み取る方法を理解しましたが、一度に 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 行のサンプルを次に示します。

アドバイザリ、2013 年 2 月 27 日 12:00:44 AM、I/RPTGEN (cadinterface)、I/RPTGEN が失敗しました - エラー 500 - 内部サーバー エラー - レポート要求に対して返されました (URL のログを確認してください)。

4

2 に答える 2

38

CSV ファイルに 1 行しか含まれてReadToEndいない場合は許容できますが、ログ ファイルが複数行で構成されている場合ReadLineは、StreamReaderオブジェクトを使用して行ごとに読み取ることをお勧めします。

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);
       }
    }
}
于 2013-03-21T23:29:47.003 に答える