我有一个可以变大的日志文件。
我的日志文件中的信息采用某种格式,我希望将它们转发给单独的数据块。
例如,
这是开始。
Blah Blah
Blah Blah Blah Blah Blah Blah布拉赫
这是开始。
Blah Blah
Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah布拉赫
我希望从下一个“这是开始”之前的“这是开始”获取信息。做这个的最好方式是什么?我的代码在c#。
答案 0 :(得分:1)
以下代码将文件拆分为"This is the start."
行描述的块,并调用回调方法来处理每个块:
public static void ProcessInChunks(string inputFilename,
string delimiter, Action<IEnumerable<string>> processChunk)
{
using (var enumerator = File.ReadLines(inputFilename).GetEnumerator())
{
if (!enumerator.MoveNext())
// The file is empty.
return;
var firstLine = enumerator.Current;
if (firstLine != delimiter)
throw new InvalidOperationException(
"Expected the first line to be a delimiter.");
List<string> currentChunk = new List<string>();
while (enumerator.MoveNext())
{
if (enumerator.Current == delimiter)
{
processChunk(currentChunk);
currentChunk = new List<string>();
}
else
currentChunk.Add(enumerator.Current);
}
processChunk(currentChunk);
}
<强>用法:强>
ProcessInChunks(@"myfile.log", "This is the start.",
chunk => { /* do something here */ });
答案 1 :(得分:0)
如果您无法更改日志创建过程,@ Timwi的答案将会正常运行。如果您可以调整日志创建过程,则可以在每次要编写This is the start.
时创建新的带日期戳的日志文件名。这将创建多个日志文件,但它们已经以所需方式拆分。显然,如果要查找的文本可以更改,这将无法正常工作。