在文本文件中搜索2个字符串,然后将字符串之间的所有行写入另一个文件

时间:2013-08-05 20:04:40

标签: c#

您好我有一个包含大量数据的报告文件,我需要将其拆分,但报告名称。

因此每个报告都标记为“Report1”,然后有一些数据,然后是“Report1End”,然后下一个报告标签“Report2”,例如,重复启动,直到文件结束。

我希望能够将方法传递给文件位置,Report1和Report1End,然后让它创建一个包含Report1数据的新文件。

现在的文件示例

  

随机垃圾

     

报表1   一些东西
  一些东西
  一些东西
  一些东西
  Report1End

     

随机垃圾

     

报告2
  一些东西
  一些东西
  一些东西
  一些东西
  Report2End

     

随机垃圾随机垃圾

我想要输出文件的示例

  

报告2
  一些东西
  一些东西
  一些东西
  一些东西
  Report2End

感谢您帮助我使用下面的示例并稍微更改它似乎可以100%满足我的需要。

static IList<string> LinesBetween(string path, string start, string end)
{
    var lines = new List<string>();
    var foundStart = false;

    foreach (var line in File.ReadLines(path))
    {
        Match SMatch = Regex.Match(line, start, RegexOptions.IgnoreCase);
        if (!foundStart && SMatch.Success)
        { foundStart = true; }

        if (foundStart)
        {
            Match EMatch = Regex.Match(line, end, RegexOptions.IgnoreCase);
            if (EMatch.Success)
            { lines.Add(line); break; }
            else { lines.Add(line); }
        }
    }

    return lines;
}

3 个答案:

答案 0 :(得分:0)

听起来像一个简单的StreamReader / StreamWriter组合:

using (var reader = new StreamReader(inputFile))
{
    using (var writer = new StreamWriter(outputFile))
    {
        string textLine;
        while ((textline = reader.ReadLine()) != null)
        {
            // Check for your particular needs, and write
            // to the output file if applicable
        }
    }
}

答案 1 :(得分:0)

调用类似 - &gt;的函数Fn(“abc.txt”,“Report2”,“Report2End”);

       static string[] Fn(string path, string Start, string End) {

        string[] vc = File.ReadAllLines(path);
        int nStart= Array.IndexOf(vc,Start);
        int nEnd =Array.IndexOf(vc,End);
       return vc.Skip(nStart).Take((nEnd+1) - nStart).ToArray<string>();
         }

答案 2 :(得分:0)

static List<string> LinesBetween(string path, string start, string end)
{
    var lines = new List<string>();
    var foundStart = false;

    foreach (var line in File.ReadLines(path))
    {
        if (!foundStart && line == start)
            foundStart = true;

        if(foundStart)
            if (line == end) break;
            else lines.Add(line);
    }

    return lines;
}