-4

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

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

我希望能够拥有可以将文件位置、Report1 和 Report1End 传递给的方法,然后让它使用 Report1 的数据创建一个新文件。

现在的文件示例

随机垃圾

Report1 一些东西
一些东西
一些东西
一些东西
Report1End

随机垃圾

Report2
一些东西
一些东西
一些东西
一些东西
Report2End

随机垃圾随机垃圾

我希望输出文件的示例

Report2
一些东西
一些东西
一些东西
一些东西
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;
}
4

3 回答 3

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
        }
    }
}
于 2013-08-05T20:09:17.853 回答
0

调用函数like--> 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>();
         }
于 2013-08-05T20:16:47.377 回答
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;
}
于 2013-08-05T20:59:42.480 回答