C # Как разобрать текстовый файл по группировке? - PullRequest
2 голосов
/ 10 декабря 2010

У меня есть простая программа, которая читает текстовый файл журнала и пытается его проанализировать.

Программа может "группировать" / анализировать текстовый файл журнала путем "---------------------- ", который я пытался использовать метод" .split ", но он не работает.

По сути, если возможно, я бы хотел, чтобы программа сгруппировала текстовый файл между каждым "----------------" в "--------------- "для других процессов.

Может кто-нибудь посоветовать, пожалуйста, коды?Спасибо!

Мои коды:

class Program
{
    static void Main(string[] args)
    {

        System.Collections.Generic.IEnumerable<String> lines = File.ReadLines("C:\\Syscrawl\\new.txt");

        foreach (String r in lines.Skip(7))
        {

            String[] token = r.Split('-');

            foreach (String t in token)
            {
                Console.WriteLine(t);
            }
        }
    }
}

Пример текстового файла;

Restore Point Info
Description   : Installed Apache HTTP Server 2.2.16
Type          : Application Install
Creation Time : Thu Dec  9 08:04:46 2010

C:\syscrawl\Restore\RP10\snapshot\_REGISTRY_USER_NTUSER_S-
1-5-21-1390067357-413027322-1801674531-500

Software\Microsoft\Windows\CurrentVersion\Explorer\RecentDocs not found.
----------------------------------------
Restore Point Info
Description   : Testing 0
Type          : System CheckPoint
Creation Time : Thu Dec  9 08:05:43 2010

C:\syscrawl\Restore\RP11\snapshot\_REGISTRY_USER_NTUSER_S-
1-5-21-1390067357-413027322-1801674531-500

Software\Microsoft\Windows\CurrentVersion\Explorer\RecentDocs not found.
----------------------------------------
Restore Point Info
Description   : Installed Python 2.4.1
Type          : Application Install
Creation Time : Thu Dec  9 08:09:12 2010

C:\syscrawl\Restore\RP12\snapshot\_REGISTRY_USER_NTUSER_S-
1-5-21-1390067357-413027322-1801674531-500

Software\Microsoft\Windows\CurrentVersion\Explorer\RecentDocs not found.
----------------------------------------
Restore Point Info
Description   : Installed AccessData FTK Imager.
Type          : Application Install
Creation Time : Thu Dec  9 08:14:02 2010

C:\syscrawl\Restore\RP13\snapshot\_REGISTRY_USER_NTUSER_S-
1-5-21-1390067357-413027322-1801674531-500

Software\Microsoft\Windows\CurrentVersion\Explorer\RecentDocs not found.

Ответы [ 2 ]

2 голосов
/ 10 декабря 2010

Достаточно простой итератор может дать вам последовательность наборов строк между разделителями:

static IEnumerable<IList<string>> ParseLines(IEnumerable<string> lines)
{
    var lineSet = new List<string>();
    foreach(var line in lines)
    {
        if(line.StartsWith("----"))
        {
            yield return lineSet;
            lineSet = new List<string>();
        }
        else
        {
            lineSet.Add(line);
        }
    }
}
0 голосов
/ 10 декабря 2010

Ваша проблема в том, что вы разделяете каждую строку, а не файл как один фрагмент данных.

string fileContent = File.ReadAllText("C:\\Syscrawl\\new.txt");
var logItems = fileContent.Split(new string[]{"----------------------"}, false);

Каждый из этих logItems будет по-прежнему включать разрывы строк при рендеринге на экране. Я бы держал их как один фрагмент данных, а не разбивал их на строки.

...