您好我有一个包含大量数据的报告文件,我需要将其拆分,但报告名称。
因此每个报告都标记为“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;
}
答案 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;
}