Push-Nachrichten von MacTechNews.de
Würden Sie gerne aktuelle Nachrichten aus der Apple-Welt direkt über Push-Nachrichten erhalten?
Forum>Entwickler>Log-File in einer Tabelle darstellen

Log-File in einer Tabelle darstellen

Bleistift13.01.0817:56
Ich möchte ein Logfile in einer Tabelle darstellen. Die Console(.app) macht ja ziemlich genau das. Gibt es da evt. einen Code den ich nutzen kann? Oder ein kleiner Code-Schnipsel? Vielleicht mit Regular Expressions?
0

Kommentare

Resistance15.01.0810:31
Willst du wirklich eine Tabelle?

Logfiles neigen dazu, Informationen völlig unstrukturiert dazustellen, es ist meistens ziemlich schwer, das in eine Tabelle zu pressen (von den Standardinformationen wie Datum, Uhrzeit etc. pp.) mal abgesehen.

Du kannst entweder ein Textfield dafür nutzen (völlig unstrukturiert) oder du mußt dich mit den TableViews auseinander setzen (das würde bedeuten, daß dein Programm dann eine Art "Datenquelle" für die TableView zur Verfügung stellt, in der dann nach und nach die Felder abgefragt werden, so ala gibt mir feld 1 aus Zeile 2, gib mir feld 4 aus Zeile 3 usw.) - das ist nicht besonders schwer, aber lästig, da die Informationen VORHER vorliegen müssen, du mußt also selber vorher die Daten strukturieren (zB. mußt du zu beginn wissen, wieviele Zeilen angezeigt werden sollen).

Wenn du sie einfach in ein Textfield reinklaschst, kann man sie auch sehen (zugegeben: bei großen Logfiles ziemlich unkomfortabel, aber große Logfiles gilt es ja sowieso zu vermeiden )
0
stv
stv15.01.0816:42
Ich treffe mal zwei Annahmen, da du in der Frage nicht darauf eingehst:

1. Die einzelnen "Zeilen" des Logfiles sind durch einen Linebreak-Character (\\n) voneinander separiert.
2. Du willst das mit Obj-C und Cocoa machen.

Die Richtung die ich einschlagen würde, wäre eine Instanzveriable als NSMutableArray zu deklarieren und zur Laufzeit zu dieser die NSString-Objekte, welche durch das Zerpflücken des Logiles an der Stelle \\n entstehen hinzuzufügen.

Das Array dient als dataSource für die NSTableView. Jetzt kannst du entweder den Glue-Code selbst schreiben (also die Delegate-Methoden implementieren) oder einfach Bindings verwenden.

Nur mal so als spontanen Ansatz...

Gruß,
Stefan
0
Bleistift15.01.0822:08
1. Die einzelnen "Zeilen" des Logfiles sind durch einen Linebreak-Character (\\\\n) voneinander separiert.
2. Du willst das mit Obj-C und Cocoa machen.
Jap, beides korrekt
Aber wie kann ich das Log-File bzw. dessen Informationen in die einzelnen Spalten aufteilen?
0
stv
stv16.01.0813:16
Hast du mal ein Beispiel wie das Logfile aussieht? Wahrscheinlich wirst du hier tatsächlich entweder mit RegExen oder NSRange weiterkommen, aber ohne das Ding gesehen zu haben kann ich natürlich nix vorschlagen
0
Bleistift18.01.0810:10
Jap, kann ich:
Fri Jan 18 2008 10:08:49.60 CET -Allw- local:0 192.168.1.1:80 (http) tcp4 'Safari (179)'

Es handelt sich um das Programm "PeerGuardian".
0
stv
stv18.01.0814:41
Da der Aufbau der Zeile ja immer gleich sein sollte, fallen mir spontan zwei Möglichkeiten ein:

1. Du nimmst einen NSScanner wie im String Programming Guide beschrieben: http://developer.apple.com/documentation/Cocoa/Conceptual/Strings/Articles/Scanners.html#//apple_ref/doc/uid/20000147

2. Du ermittelst die Position des bekannten Chars, an welchem der String getrennt und in die einzelnen Teile für die Spalten zerlegt werden soll mittels NSRange:

- (NSArray *) arrayFromLogString:(NSString *)logString
{
    NSMutableArray *tmpArray = [NSMutableArray array];
    
    if([logString rangeOfString:@""].length > 0) {
        [tmpArray addObject:[logString substringToIndex:[logString rangeOfString:@""].location]];
        [tmpArray addObject:[logString substringFromIndex:[logString rangeOfString:@""].location]];
    }
    
    return tmpArray;
}

Diese schnell zusammengeworfene (sollte laufen, aber ohne Gewähr!) Methode nimmt eine Zeile entgegen und trennt diese an dem spezifizierten Separator (in dem Fall hab ich mal das genommen). Zurück bekommst du ein Array mit dem Teil vor dem Separator in der ersten Zeile und dem Teil danach in der zweiten. Das läßt sich noch generalisieren (z.B. durch Übergabe des Trennzeichens) und erweitern, so dass im Idealfall diese Methode schon für deine Zwecke reichen könnte.
0
Bleistift18.01.0819:40
Danke! Ich werde das morgen mal probieren
0

Kommentieren

Diese Diskussion ist bereits mehr als 3 Monate alt und kann daher nicht mehr kommentiert werden.