我正在尝试让我的代码过滤并从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
答案 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);
}
}