0

テキストファイルを行ごとに読み取り、特定のテキストで始まる行の内容を取得できるようにする必要がありますが、常にそこにあるとは限らないため、null が返され、データグリッドビューに影響します。

最初の行が表示されたときにブロック単位でデータを読み取り (ソース: 常にそこにある)、他の行を読み取るメソッドを作成したいと考えています。その行が存在しない場合は、それに関連付けられた変数を " " として設定します。

たとえば、テキストファイルは次のようになります

ソース: C:\
MRU: 1
MRU 時間: 12/12/2013

ソース: C:\
MRU: 2
MRU 時間: 13/12/2013

ソース: C:\
MRU 時刻: 12/10/2013
// MRU がないことを通知

文字列が含まれている場合に行を取得するために使用しているコードは次のとおりです。

 String line = file.ReadLine();
 if (line.StartsWith("source"))
        {
            richTextBox1.AppendText((line) + Environment.NewLine);        
        }

        if (line.Contains("MRU"))
        {
            richTextBox1.AppendText((line) + Environment.NewLine);
        }

        if (line.Contains("MRU time"))
        {
            richTextBox1.AppendText((line) + Environment.NewLine);
        }
4

1 に答える 1

0

これは、必要なことを正確に実行するコンソール アプリです。ニーズに合わせて変更するだけです。あなたの主な問題は、null チェックがなかったことです。これも小さな関数にまとめられているので、少しきれいです(少なくとも私にとっては)

  static void Main(string[] args)
    {
        ReadFile();
    }

    private static void ReadFile()
    {
        StreamReader SR = new StreamReader(@"C:\Users\bharrison\Desktop\test.txt");
        Console.WriteLine("Reading file");
        while (!SR.EndOfStream)
        {
           string ReturnedValue = AnalyzeString(SR.ReadLine());
           Console.WriteLine(ReturnedValue);
        }
        Console.ReadLine();
    }

    private static string AnalyzeString(string line)
    {
        string TempLine = line;

        if (TempLine != null && TempLine != "")
        {

            if (TempLine.Contains("source"))
            {
                return TempLine;
            }

            if (TempLine.Contains("MRU"))
            {
                return TempLine;
            }

            if (TempLine.Contains("MRU Time"))
            {
                return TempLine;
            }
        }
        else
        {
            return " ";
        }
        return " ";
    }
于 2013-03-18T16:26:58.913 に答える