如何读取特定格式的数据

时间:2010-09-08 00:45:37

标签: c# regex text

我有一个可以变大的日志文件。

我的日志文件中的信息采用某种格式,我希望将它们转发给单独的数据块。

例如,

这是开始。

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#。

2 个答案:

答案 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.时创建新的带日期戳的日志文件名。这将创建多个日志文件,但它们已经以所需方式拆分。显然,如果要查找的文本可以更改,这将无法正常工作。