Как читать данные в определенном формате - PullRequest
1 голос
/ 08 сентября 2010

У меня есть файл журнала, который может стать довольно большим.

Информация в моем файле журнала представлена ​​в определенном формате, и я хочу получать от них отдельные блоки данных.

Например,

Это начало.

Бла Бла

Бла Бла Бла Бла Бла Бла

Ли

Это начало.

Бла-бла

Бла Бла Бла Бла Бла Бла

Бла Бла Бла Бла Бла Бла

Бла Бла Бла Бла Бла Бла

Ли

Я хочу получить информацию от «это начало» до начала следующего «это начало». Каков наилучший способ сделать это? Мой код в C #.

Ответы [ 2 ]

1 голос
/ 08 сентября 2010

Следующий код разделит файл на куски, обозначенные линией "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 */ });
0 голосов
/ 08 сентября 2010

Если вы не можете изменить процесс создания журнала, ответ @Timwi будет работать хорошо.Если вы можете настроить процесс создания журнала, вы можете создавать новые имена файлов журнала с меткой даты каждый раз, когда хотите записать This is the start..Это создаст несколько файлов журнала, но они уже будут разбиты нужным образом.Очевидно, что если текст для поиска может измениться, это не сработает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...