C#读取并过滤文本

时间:2012-12-19 08:19:43

标签: c# console

我正在尝试让我的代码过滤并从txt文件中的特定单词开始和结束。

是的,抱歉。问题是,如何告诉它从一行开始并停在另一行?

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

我将指明我计划实现的目标。

它必须从“命令:更新”行开始并在结束时停止。棘手的部分是,它必须从最后一个“命令:更新”开始。

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

1 个答案:

答案 0 :(得分: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);
    }
}