Push-Nachrichten von MacTechNews.de
Würden Sie gerne aktuelle Nachrichten aus der Apple-Welt direkt über Push-Nachrichten erhalten?
Forum>Entwickler>Objective-C - Datei - wie zeilenweise lesen

Objective-C - Datei - wie zeilenweise lesen

JackyK
JackyK08.04.0506:40
Hi,

ich habe z.B. logfiles, die ich gerne zeilenweise auslesen moechte.
Bestimmte Zeilen, die z.B. mit "Error" beginnen moechte ich in
eine andere Datei schreiben.
Nun weiss ich nicht genau wie das geht..
Ich kann bis jetzt nur immer eine Dateien komplett auslesen und sie
komplett wieder in eine Andere schreiben.


z.B.:
NSFileHandle *aFile;
NSData *buffer;

buffer = [aFile readDataToEndOfFile];
.. usw.

kann mir jemand einen Tipp geben?
0

Kommentare

Sebastian Harnau08.04.0509:58
Muß es unbedingt ObjectiveC sein? Mir würde da spontan die Shell/Terminal einfallen:

cat log.log | grep Error > errorlog.log

0
JackyK
JackyK08.04.0513:18
Sebastian Harnau
Muß es unbedingt ObjectiveC sein? Mir würde da spontan die Shell/Terminal einfallen:

cat log.log | grep Error > errorlog.log


Ja leider sollte es unbedingt ObjectiveC sein ..
0
Helge Baumann08.04.0514:13
Tja,
das muss zeichenweise gemacht werden, also Zeichen für Zeichen lesen, bis man meint, ein passendes Zeichen (hier eben EOL) gefunden zu haben.

Da gibt es zwei Möglichkeiten:

Du liest wie gehabt die ganze Datei und gehst zeichenweise durch deinen buffer,
oder du liest die Datei zeichenweise.

Was anderes würde auch eine interne Methode nicht machen, schliesslich muss ein Zeilenende erstmal erkannt werden.

Ciao
Helge
0
planetexpress69
planetexpress6908.04.0514:29
Spricht nix dagegen, das mit plain C zu machen und das in einer ObjC-Methode zu verpacken.
0
Sebastian
Sebastian08.04.0515:05
Man muß das nicht zeichenweise machen.
Wenn die Log-Datei nicht allzu groß ist (oder Dir Swappen nichts ausmacht) kannst Du einfach die ganze Datei in einen String lesen und dann mit
NSArray *lines = [file componentsSeparatedByString:@"\n"];
auf die einzelnen Zeilen zugreifen.
0

Kommentieren

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