cCSVParse is maintained by Jan Weiß on github.com/JanX2/cCSVParse now since I don’t do Apple stuff since many years.
cCSVParse ist eine Cocoa-Klasse (Apples Objective-C Framework), welche CSV-Dateien schnell und effizient einliest. Es wurde darauf geachtet, dass die Klasse mit allen typischen Eigenheiten des standardlosen CSV-Formats umgehen kann. Dazu gehören:
- Das korrekte Erkennen von Trennzeichen innerhalb von Werten in Anführungszeichen
- Anführungszeichen innerhalb Anführungszeichen
- Zeilenumbrüche innerhalb von Feldern
- Die Wahl eines beliebigen Trennzeichens inklusive automatischer Erkennung desselbigen
Diese Eigenheiten sind der Grund, warum das simple Aufteilen eines NSStrings nicht genügt, um CSV-Dateien einzulesen ;-).
Die eigentliche Funktion, welche die Daten prüft, ist in C geschrieben und benutzt C-Strings, damit die größtmögliche Geschwindigkeit erreicht wird. Zurückgegeben werden die eingelesenen Werte als NSStrings innerhalb eines NSMutableArray pro Zeile.
Die gesamte Klasse (inklusive Headerdatei) ist nur 218 Quelltextzeilen lang (laut SLOCCount) und lässt sich somit bedenkenlos in jedes Projekt integrieren oder zumindest als Basis verwenden.
Mit der Methode -(void)setEncoding:(NSStringEncoding)newEncoding kann man das Encoding der zu verarbeitenden Datei angeben, sodass man nicht hinterher die eingelesenen Daten konvertieren muss.
Beispielaufruf
CSVParser *parser = [CSVParser new]; [parser openFile: @"./sample.csv"]; NSMutableArray *csvContent = [parser parseFile]; int c; for (c = 0; c < [csvContent count]; c++) { NSLog(@"content of line %d: %@", c, [csvContent objectAtIndex: c]); } [parser closeFile];
Geschwindigkeit
In meinem Test wurde eine 115 KB große, ca 1500 Zeilen beinhaltende Datei in 0,2 Sekunden komplett eingelesen und (auf Konsole) ausgegeben.
Herunterladen
- cCSVParse 1.2 (3.5K, GPG-Signatur)
Lizenz
cCSVParse ist freie Open-Source-Software unter der BSD-Lizenz.
Entwicklung
Der aktuelle Entwicklungsstand kann in gitweb verfolgt werden.
Feedback
Solltest du mir eine Nachricht zukommen lassen wollen, schreib mir doch bitte eine E-Mail.