Für was steht das?
CSV steht für Comma Separated Values, also kommagetrennte Werte. Allerdings wird das mit dem Komma nicht so eng gesehen. Im Prinzip kann jedes Zeichen als Trennzeichen verwendet werden, sinnvoll sind natürlich möglichst die Zeichen, die in den Werten selbst eher selten vorkommen. Sehr beliebt ist neben dem Komma noch das Semikolon (Strichpunkt ; ), aber in freier Wildbahn trifft man auch auf die Pipe (senkrechter Strich | ), das AT-Zeichen (Klammeraffe @), den Tabulator und so ausgefallene Ideen wie nicht-druckbare Zeichen (zum Beispiel ASCII 7 = Bell, also ein Piepser).
Ein einfaches Beispiel
AK;4711;K0815;30.05.2013
POS;1;S123;5;9.99
POS;2;H456;3;17.95
Hier wird das Semicolon als Trennzeichen verwendet. Sie sehen, CSV ist ein unglaublich sparsames Format, da zu jedem Wert nur noch ein einzelnes Zeichen als Trenner kommt. Und am Ende eines Datensatzes steht üblicherweise ein Zeilenumbruch, auch das ein Zeichen oder schlimmstenfalls zwei. Da kann Fix Record oder gar XML bei weitem nicht mithalten.
Dröseln wir die Zeilen auf.
AK;4711;K0815;30.05.2013
- AK soll hier für den Auftragskopf stehen. Dies ist die Satzartkennung, an der eine Software (oder auch der Mensch) erkennt, was für ein Datensatz folgt.
- 4711 ist die Auftragsnummer
- K0815 ist die Kundennummer
- 30.05.2013 schließlich ist das Auftragsdatum, übliches deutsches Format dd.mm.yyyy
POS;1;S123;5;9.99
- POS ist die Kennung für die Position.
- 1 ist die Positionsnummer.
- S123 ist die Artikelnummer.
- 5 ist die Menge.
- 9.99 zu guter Letzt ist der Einzelpreis
Anders als bei Fix Record empfiehlt es sich bei CSV nicht, auf Zeilenumbrüche zu verzichten. Denn es gibt hier eine sehr praktische Regelung: Folgen in einem Datensatz keine Werte mehr, kann man auch die Trennzeichen weglassen. Angenommen, nach dem Einzelpreis könnte in einer Positionszeile noch der Name und die Beschreibung des Artikels folgen:
POS;1;S123;5;9.99;USB-Stick;Speicherstick mit USB 3.0 und 4 GB Kapazität
Dann müsste man, wenn man diese beiden Texte weglassen will, nicht etwa so schreiben:
POS;1;S123;5;9.99;;
Sondern man kann die letzten beiden ; einfach weglassen. In einer Fix Record-Datei müsste man die Zeile noch extra mit Leerzeichen aufblähen und könnte dafür gerade mal auf den Zeilenumbruch verzichten. Schlechtes Geschäft…
Satzarterkennungen
Eine Nachricht besteht üblicherweise aus verschiedenen Teilen, zum Beispiel einem Kopf wie oben, oft auch einem Nachsatz am Ende, dann Informationen zu einzelnen Sendungen oder Abrufen oder was auch immer, Details zu Positionen und so weiter. Üblicherweise steht die Satzart gleich ganz vorne. Das ist ungemein praktisch, denn dann kann man nach einer einfachen Regel vorgehen:
Man sehe sich den ersten Wert jeder Zeile an. Da steht, welche Satzart folgt. Anhand der Format-Definition weiß man nun, welche Werte in welcher Reihenfolge kommen. Man „zerhackt“ jede Zeile am Trennzeichen und gut. Ein sehr einfach zu verarbeitendes Format.
Regeln für die Praxis
Wie eingangs erwähnt, sollte man als Trennzeichen eines wählen, das in den Werten selbst eher selten vorkommt. „Eher selten“ ist aber kein „gar nicht“. Was tut man nun, wenn das Trennzeichen doch im Wert auftaucht?
Beispiel:
POS;1;S123;5;9.99;USB-Stick;“Speicherstick; USB 3.0; 4 GB Kapazität“
Hier steht der Strichpunkt auch in der Artikelbeschreibung, und das sogar zwei mal. Sie sehen schon, wie man das auflöst: Man fasst den Wert in „Anführungszeichen“ ein. Die Wahl des “ ist wiederum sehr üblich, aber nicht unbedingt verpflichtend. Als häufigste Alternative taucht das einfache Hochkomma ‚ auf. Innerhalb einer Datei ändert sich das „Quotation“-Zeichen, wie man das Ding nennt, ebenso wenig wie das Trennzeichen.
Damit stoßen wir aber direkt auf das nächste Problem: Was, wenn in der Artikelbeschreibung auch wieder Anführungszeichen (oder ein anderes Quotation-Zeichen) enthalten sind?
Dann wird üblicherweise „escaped“, also entwertet. Und dazu dient der Backslash: „Dieser Text enthält \“Anführungszeichen\“ mittendrin.“
Ein \“ ist also ein entwertetes „, das nur als das Zeichen selbst, aber eben nicht als Quotation interpretiert wird.
Und damit der Spaß so schnell kein Ende hat: Sollte der Backslash \ selbst im Text vorkommen, entwertet er sich auch selbst: \\
Eines noch: Um das kompakte, aber recht unstrukturierte Format für Menschen leichter lesbar zu machen, wird gerne in der ersten Zeile eine Art Überschrift ausgegeben. Diese enthält nur die Bezeichnungen der Werte, die in den folgenden Zeilen kommen. Gerade bei Datenexporten mit nur einer Satzart – die auch keine Satzartkennung vorn haben – ist das recht häufig zu finden. Ein Beispiel:
Nachname,Vorname,Straße,HausNr,PLZ,Ort
Meier,Hans,Haupstraße,22,12345,Obernest
Müller,Emil,Nebenstr.,17,98765,Unterstadt
In diesen Fällen muss man also die erste Zeile einfach ignorieren, wenn man nur die eigentlichen Daten verarbeiten will.
Variationen
Wenn Daten von Menschen bearbeitet werden, dann nur selten direkt im CSV-Format. Statt dessen wird gerne Excel oder ein offenes Pendant (OO Calc etc.) dafür genutzt. In Excel können Sie jederzeit Ihre Tabellen als CSV-Dateien exportieren, und wenn Sie unter Windows auf einer CSV-Datei doppelklicken, fühlt sich meist auch Excel dafür zuständig, das Ding zu öffnen. Excel macht beim Export nach CSV eine Sache anders: Es entwertet Anführungszeichen nicht mit einem Escape-Zeichen wie dem \, sondern verdoppelt sie:
„Dieser Text enthält „“Anführungszeichen““ mittendrin.“
Und das ist auch noch erlaubt!
Sie müssen also damit rechnen, auch mal so was in die Finger zu bekommen. Aber Ihre Konverter-Software sollte auch damit klarkommen.
Was die weiteren Variationen angeht:
CSV wird besonders gern für kompakte Exporte aus oder Importe in z.B. Datenbanken genutzt. Da solche Ex-/Importroutinen meist schnell mal „reingehackt“ wurden, gibt es dort einen gewissen Wildwuchs. Der eine Entwickler denkt sich, in seinen Werten kommt nie etwas vor, das in „“ eingeschlossen werden müsste, und seine Routinen weigern sich strikt, Dateien mit „“ auch nur zu lesen. Andere sind da übervorsichtig und klammern selbst reine Zahlenwerte noch in „“. Achten Sie also darauf, dass Software, mit der Sie CSV-Dateien verarbeiten wollen, nicht nur bei der Wahl der Sonderzeichen (Trenner, Quote und evtl. Escape) flexibel ist, sondern auch was die Regeln für das „Quoten“ angeht.
Verwendung
Anders als bei Fix Record gibt es bei CSV keine großen, definierten Nachrichtenstandards, die darauf aufbauen. Wie im vorigen Abschnitt schon erwähnt, wird CSV besonders gerne für den schnellen, unkomplizierten Ex- und Import von Daten genutzt. Es ist nun mal wunderschön kompakt, hat wohl den geringsten Overhead aller Formate (na ja, EDIFACT und X12 können da mithalten, sind aber wesentlich komplexer, was die Logik angeht) und ist unglaublich simpel.