28.02.2011

Einlesen von Dateien mit Objective-C

In den folgenden Abschnitten findet man Code-Beispiele zum Einlesen und Laden von Dateien. Wie so oft bei Objective-C wird der Java-Entwickler an der falschen Stellen nach einer Methode zum Einlesen suchen. Wie auch schon in dem Artikel Verwendung von Dateipfaden bei Objective-C befindet sich die passende Methode in der Klasse NSString. Dort gibt es einen ganzen Satz von Methoden, die mit initWithContentsOfFile beginnen. Eine Reihe von Beispielen findet man auch auf der Apple-Seite Reading Strings From and Writing Strings To Files and URLs und die passenden Erklärungen in der Referenz von NSString.

Einlesen von Textdateien mit ASCII-Zeichen

Als erstes wird eine einfache Textdatei zeilenweise eingelesen. Die Datei enthält ausschließlich ASCII-Zeichen und hat in dem Beispiel folgenden Inhalt:

Joern Hameister
Donald Duck

Der Quellcode zum Einlesen sieht so aus, wenn man davon ausgeht, daß der Dateiname names.txt lautet und sich die Datei im Verzeichnis Dokumente befindet:

//Zeilenweise Textdatei einlesen:
NSString *filename = 
        [@"~/Documents/names.txt" stringByResolvingSymlinksInPath];
NSString *filecontent = 
        [[NSString alloc] initWithContentsOfFile:filename];
    
//Parse filecontent
NSArray *lines = [filecontent componentsSeparatedByString:@"\n"];
for(id names in lines) {
   NSLog(@"%@", names);
}  

Hinweis


Das Zeichen ~ (Tilde) erhält man, indem alt-N auf der Tastatur gedrückt wird.

In dem Beispiel wird die Datei names.txt in ein Objekt von Type NSString eingelesen. Danach wird die Zeichenkette bei jedem Zeilenumbruch aufgeteilt. Die einzelnen Teile werden in einem NSArray abgelegt, welches anschließend in einer for-Schleife ausgegeben wird.

Dieses Beispiel wird nur funktionieren, solange man ASCII-Zeichen verwendet. Sobald beispielsweise Umlaute verwendet werden, wird die Ausgabe der Zeichen merkwürdig aussehen. Deshalb wird im nächsten Abschnitt beschrieben, wie man mit UTF-8 Zeichen umgeht.

Einlesen von Textdateien mit UTF-8 Zeichen

In diesem Beispiel wird erklärt, wie sich Dateien mit UTF-8 Zeichen einlesen und auf der Konsole wieder ausgeben lassen. Die Beispieldatei sieht für dieses Beispiel folgendermaßen aus:

Die Datei enthält also ein Umlaut und ein paar asiatische Zeichen (keine Ahnung was das bedeutet.) und ein paar Notenzeichen (Es soll ja Leute geben, die die verwenden ).

Der Quellcode zum Einlesen sieht diesmal so aus:

//Zeilenweise Textdatei einlesen:
NSString *filename = 
       [@"~/Documents/names.txt" stringByResolvingSymlinksInPath];
NSError *error = nil;

NSString *filecontent = 
       [[NSString alloc] initWithContentsOfFile:filename
                                       encoding:NSUTF8StringEncoding
                                          error:&error];
    
//Parse filecontent
NSArray *lines = [filecontent componentsSeparatedByString:@"\n"];
for(id names in lines) {
    NSLog(@"%@", names);
}        

Es wird die Methode initWithContentsOfFile:encoding:error verwendet. Der zweite Parameter legt das Encoding fest und der dritte Parameter enthält eine Referenz auf ein Error-Objekt. Die Referenz wird gesetzt, wenn ein Fehler auftritt.

Die Ausgabe des Programms sieht ungefähr so aus: