c# - 如何在由字符串标记分隔的范围内提取文本文件的内容
问题描述
我有一个控制台文件,我需要匹配一个字符串(“Seq Started”),如果我得到这个字符串,我想复制所有文本,直到我在一个 txt 文件中得到另一个字符串(“Seq Ended”)。
解决方案
你可以使用这个。
我们加载文件并解析行以搜索开始和结束分隔符序列,假设每个分隔符序列中只允许一个。
然后,如果找到正确的部分,我们使用 Linq 提取源的行并将结果保存到所需的文件。
using System.Linq;
using System.Collections.Generic;
static void Test()
{
string delimiterStart = "Seq Started";
string delimiterEnd = "Seq Ended";
string filenameSource = "c:\\sample source.txt";
string filenameDest = "c:\\sample dest.txt";
var result = new List<string>();
var lines = File.ReadAllLines(filenameSource);
int indexStart = -1;
int indexEnd = -1;
for ( int index = 0; index < lines.Length; index++ )
{
if ( lines[index].Contains(delimiterStart) )
if ( indexStart == -1 )
indexStart = index + 1;
else
{
Console.WriteLine($"Only one \"{delimiterStart}\" is allowed in file {filenameSource}.");
indexStart = -1;
break;
}
if ( lines[index].Contains(delimiterEnd) )
{
indexEnd = index;
break;
}
}
if ( indexStart != -1 && indexEnd != -1 )
{
result.AddRange(lines.Skip(indexStart).Take(indexEnd - indexStart));
File.WriteAllLines(filenameDest, result);
Console.WriteLine($"Content of file \"{filenameSource}\" extracted to file {filenameDest}.");
}
else
{
if ( indexStart == -1 )
Console.WriteLine($"\"{delimiterStart}\" not found in file {filenameSource}.");
if ( indexEnd == -1 )
Console.WriteLine($"\"{delimiterEnd}\" not found in file {filenameSource}.");
}
}
推荐阅读
- visual-studio-code - 如何获取当前打开的选项卡文件的根路径的路径
- ruby-on-rails - 在构建期间使用 Dockerfile“无法找到 gemfile”在 Rails 上安装 ruby
- python - Python:在 main() 中访问 __version__ 的最优雅方式
- android - 反应原生模块中的“arm64-v8a”、“x86_64”上的应用程序崩溃
- html - 如何修复foreach循环在轮播引导程序4中两次打印数据
- python - 在 Python 中部分应用的高效方法?
- kubernetes - 一个部署资源可以有多个容器吗?
- java - @RequiredArgsConstructor(onConstructor = @__(@Inject)) 和 @RequiredArgsConstructor 有什么区别?
- visual-studio - 在 Visual Studio 颜色主题编辑器中更改错误列表窗口中颜色的类别是什么
- javascript - 如何使用 javascript 将 JSON 转换为普通的 PDF 文本格式或表格格式?