首页 > 解决方案 > 如何在由字符串标记分隔的范围内提取文本文件的内容

问题描述

我有一个控制台文件,我需要匹配一个字符串(“Seq Started”),如果我得到这个字符串,我想复制所有文本,直到我在一个 txt 文件中得到另一个字符串(“Seq Ended”)。

标签: c#text-filestext-extraction

解决方案


你可以使用这个。

我们加载文件并解析行以搜索开始和结束分隔符序列,假设每个分隔符序列中只允许一个。

然后,如果找到正确的部分,我们使用 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}.");
  }
}

推荐阅读