-2

コードをフィルタリングして、txt ファイル内の特定の単語から開始および終了しようとしています。

ええ、ごめんなさい。問題は、ある行から開始して別の行で停止するように指示する方法です。

foreach (string line in File.ReadLines(@"C:\test.txt"))
{
  if (line.Contains("text"))
  {
    Console.WriteLine(line);
  }
}

私は何を達成しようとしているのかを明確にします。

「Command : Update」の行から開始し、最後に停止する必要があります。トリッキーな部分は、最後の "Command : Update" から開始する必要があることです。

Command              : Update
Updating             : C:\somepath\somepath\somefile1.doc
Completed            : C:\somepath\somepath\somefile1.exe
External             : C:\somepath\somepath\somefile1.fla
Completed            : C:\somepath\somepath\somefile1.txt
Completed            : C:\somepath\somepath\somefile1.doc
Completed            : C:\somepath\somepath\somefile1.exe
Command              : Update
Updating             : C:\somepath\somepath\somefile222.fla
External             : C:\somepath\somepath\somefile222.txt
Updating             : C:\somepath\somepath\somefile222.doc
Completed            : C:\somepath\somepath\somefile222.exe
External             : C:\somepath\somepath\somefile222.fla
Completed            : C:\somepath\somepath\somefile222.txt
Completed            : C:\somepath\somepath\somefile222.doc
Completed            : C:\somepath\somepath\somefile222.exe

好ましい出力は

C:\somepath\somepath\somefile222.doc
C:\somepath\somepath\somefile222.doc
4

1 に答える 1

1

これは最適なコードではなく、おそらく一部をクリーンアップできる可能性がありますが、これで作業を開始できます。このコードは、書き込み開始を示すテキストを探して行を読み取ります。次に、書き込みが完了したことを示すテキストが見つかるまで行を出力します。その時点で、それ以上行を読み取らず、ループを終了します。

bool output = false;
foreach (var line in File.ReadLines("C:\\test.txt"))
{
    if (!output && line.Contains("beginText"))
    {
        output = true;
    }
    else if (output && line.Contains("endText"))
    {
        break;
    }

    if (output)
    {
        Console.WriteLine(line);
    }
}

質問の更新に基づいて編集します。

出力すべきものと出力すべきでないものを定義するルールが何であるかわからないため、結果行のフィルタリングはあなたに任せますが、少なくとも最後の更新行の後に結果を取得する方法は次のとおりです。 :

var regex = new Regex(@"Command\s+:\s+Update");
List<string> itemsToOutput = null;
foreach(var line in File.ReadLines("C:\\test.txt"))
{
    if (regex.IsMatch(line))
    {
        itemsToOutput = new List<string>();
        continue;
    }

    if (itemsToOutput != null)
    {
        itemsToOutput.Add(line);
    }
}
于 2012-12-19T08:58:32.337 に答える