profile picture

Michael Stapelberg

cCSVParse (2014)

published 2014-11-07, last modified 2018-03-18
Edit Icon

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

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.

I run a blog since 2005, spreading knowledge and experience for almost 20 years! :)

If you want to support my work, you can buy me a coffee.

Thank you for your support! ❤️