Was ist ein CSV-File – Grundlagen und Details des Datenformats
Datenbank-Applikationsentwickler haben häufig mit dem Problem zu kämpfen mit anderen Systemen Daten auszutauschen.
Hierfür gibt es zwei weit verbreitete Schnittstellen.
Zum einen gibt es das modernere XML und zum zweiten das gute alte CSV-Format (Comma Separated Values).
Da es für XML keine fest-definierten bzw weitverbreiteten Standards gibt und einige Verantwortliche auch garnicht über XML richtig bescheid wissen, wird meist nur CSV als Schnittstellen-Format genutzt und von manchen Unternehmen sorgar nur CSV zugelassen.
Aber auch hier gibt es viele Gemeinheiten die beim Erstellen und beim Lesen einer CSV-Datei zu beachten sind, wie Ihr im folgenden Tutorial sehen werdet.
Trenner – Der Grundaufbau
Im Grunde ist der Aufbau ganz einfach: Es werden einfach die zu übertragenden Inhalte mit einem Trenner (z.B. einem Komma oder Semikolon) getrennt in einer Text-Datei geschrieben.
Andre,Bernd,Christian,Dora
Ist das Ausgangsformat eine Tabelle, so wird für jede Zeile auch eine einzelne Zeile im CSV geschrieben.
Zusätlich werden häufig in der ersten Zeile dann die Spaltennamen aufgelistet.
Bei einer Tabelle mit den Spalten Vorname und Ort kann das dann so aussehen:
Vorname,Ort
Andre,Hamburg
Bernd,Kiel
Christian,München
Der Feldbegrenzer
Soweit so gut, was ist aber, wenn ich eine Zahl 5,3 abspeichern möchte? Ganz einfach: Wir nehmen einen anderen Trenner, zum Beispiel ein Semikolon.
Und was ist, wenn jetzt dieser andere Trenner auch in einem Inhalt vorkommt?
Um in diese Problematik überhaupt nicht zu kommen, wird an dieser Stelle nun ein Feldbegrenzer eingeführt, meistens werden hier Anführungsstriche oder Hochkomma genutzt.
„Vorname“,“Ort“,“Produkt“
„Andre“,“Hamburg“,“Keyboard, grau“
„Bernd“,“Kiel“,“Diskette“
Jetzt wird es kompliziert
Und was machen wir, wenn ein Trenner Und ein Feldbrenzer in einer Zelle vorkommen?
In so einem Fall kann nicht mehr zwischen dem Ende eines Inhaltes und dem tatsächlichen Inhalt unterschieden werden.
Viele Systeme hören jetzt mit der CSV-Unterstützung auf, anscheinden meinen sie wohl, dass sowas jawohl nicht so häufig vorkomme.
Ein Beispiel, dass sowas ganz schnell vorkommt ist das gute Beispiel einer guten alten Diskette, und zwar der 3,25″ Diskette.
Also was machen? Im CSV-Format wird in so einem Fall der Feldtrenner wiederholt, wie zu sehen ist:
„Vorname“,“Ort“,“Produkt“
„Andre“,“Hamburg“,“Keyboard, grau“
„Bernd“,“Kiel“,“3,25″“ Diskette“
Kommen mehrere Feldtrenner hintereinander muss natürlich jeder wiederholt werden:
Ein Satz wie
Er sagte:“Ich schreib kein Hochkomma,“ und fuhr fort „weil ich Anführungsstriche nutze.““Warum das?“ fragte sie darauf.
wird im CSV zu:
 „Er sagte:““Ich schreib kein Hochkomma,““ und fuhr fort „“weil ich Anführungsstriche nutze.““““Warum das?““ fragte sie darauf.“
Wie man sieht, kann ein CSV ziemlich unübersichtlich werden.
Achtung: Feldtrenner sind nicht zwingend erforderlich!
Sie müssen nur dann geschrieben werden, wenn ein Trenner im Inhalt vorkommt.
So ist auch ein folgendes CSV absolut gängig:
Vorname,Ort,Produkt
Andre,Hamburg,“Keyboard, grau“
Bernd,Kiel,“3,25″“ Diskette“
Zudem werden in der Praxis die Inhalte manchmal auch durch feste Spaltenbreiten oder durch sogenannte TABS getrennt.
Während ein TAB nichts anderes ist als ein nicht-lesbares Zeichen, das beim Phrasen des CSVs (also beim Lesen) genauso erkannt werden kann wie ein Komma, gibt es bei festen Spaltenbreiten natürlich das Problem, dass die Inhalte begrenzt sind und das Format natürlich nicht universell einsetzbar ist.
Funktionelles CSV-Format
In sogenannten funktionellen CSVs wird dem normalen CSV, wie oben beschrieben, noch ein Anweisungskopf voran gestellt, der Informationen zur Verarbeitung der Daten bereit hält.
Dies ist allerdings nicht standardisiert, weshalb auch keine feste Syntax existiert.
Tipps zum Testen
Wer die obigen Beispiele mal selbst erzeugen will oder ein bisschen mit dem CSV-Format rumspielen will oder ein selbsterstelltes CSV auf richtige Syntax überprüfen will, der kann Tabellenkalkulationsprogramme wie Excel dafür nutzen, da diese CSV unterstützen.
So, ich hoffe Euch hat mein Ausflug in das CSV-Format gefallen! Habt Ihr vielleicht Ergänzungen oder war was nicht verständlich?