2010-12-10 2 views
2

Ich habe ein einfaches Programm, das eine Log-Text-Datei liest und versucht, es zu analysieren.C# Wie parse ich Textdateien durch Gruppierung?

Das Programm wäre ablle zu „Gruppe“/die Protokolltextdatei von „----------------------“ analysiert, was ich versucht habe zu verwenden die ".split" -Methode, aber es funktioniert nicht. Grundsätzlich

wenn möglich Ich möchte das Programm zur Gruppe der Textdatei zwischen von jedem „----------------“ bis „---------- ----- "für andere Prozesse.

Kann jemand bitte auf den Codes beraten? Vielen Dank!

Meine Codes:

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); 
      } 
     } 
    } 
} 

Ein Beispiel pf der Textdatei;

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. 

Antwort

0

Ihr Problem ist, dass Sie jede Zeile spalten, die Datei nicht als ein einziges Stück von Daten .

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

werden Jede dieser logItems noch seine Zeilenumbrüche enthalten, wenn Sie es auf dem Bildschirm machen. Ich würde sie als ein einzelnes Stück Daten behalten, anstatt sie in Zeilen zu teilen.

+0

Viele Fehler generiert. Die "Split" -Methode kann String nicht als Variable aufnehmen, sondern nur Arrays. – JavaNoob

+0

Ja, ich habe es behoben. –

2

Eine relativ einfache Iterator können Sie eine Reihenfolge der Sätze von Linien zwischen Teilern geben:

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); 
     } 
    } 
}