Vinzenz Mai: Ein paar konkrete Antworten

Beitrag lesen

Hallo Frank,

Ja eben. Genau aus diesem Grund haben sich Leute schon Gedanken gemacht und
eine (nicht perfekte) Spezifikation für dieses Problem erstellt. Ich dachte,

ich betone "nicht perfekte", aber sehr brauchbare

dass Du genau diese Spezifikation im Auge hättest, schließlich speicherst Du
Deine Datei als

<timestamp>.csv

ab. PHP verfügt über die Funktion fgetcsv, um solche Dateien zu verarbeiten.
Andere Programmiersprachen verfügen über vergleichbare Funktionen.
CSV ist ein übliches Format, nutze es.

An diesem Punkt war ich noch am Hadern.

Wikipedia meint u.a.: "Die Abkürzung CSV steht dabei für Character Separated Values...".

Äh ja, und als Trennzeichen wird ein *Zeichen* genommen.

So wird ja zB. u.a. ein Semikolon statt Komma verwandt, um Konflikte mit den Dateninhalten zu vermeiden.

Nö, das ist Unsinn. Es kann prinzipiell gesehen jedes Zeichen verwendet werden. Semikolon, Komma und Tabulator sind wahrscheinlich die am häufigsten
verwendeten Zeichen.

Jetzt finde ich unter http://tools.ietf.org/html/rfc4180
"While there are various specifications and implementations for the  CSV format (...), there is no formal  specification in existence, which allows for a wide variety of interpretations of CSV files."

Das meinte ich mit "nicht perfekt".

Auch: "Each field may or may not be enclosed in double quotes (however some programs, such as Microsoft Excel, do not use double quotes at all). If fields are not enclosed with double quotes, then
ouble quotes may not appear inside the fields."

Keine Ahnung, wo das steht - aber: Es stimmt nicht. Es ist falsch :-)
Excel verwendet sehr wohl doppelte Anführungszeichen (zumindest Excel 2007).

Ich Frage mich deshalb:

a) Ist es im Grunde nicht ein (zu Recht) recht beliebiges Format. Ich brauche doch nur Spaltentrenner und Zeilentrenner bekannt geben, und es ist sofort lesbar

Nun, ob das unter die Spezifikation fällt, weiß ich nicht - und sofort lesbar,
für mich zumindest nicht.

b) ist diese Variante nicht doch auch CSV und erspart:
  i das Maskieren des Spaltendelimiters innerhalb der Datensätze
  ii das Verdoppeln des  Umgebungszeichens ("If double-quotes are used to enclose fields, then a double-quote appearing inside a field must be escaped by preceding it with another double quote.  For example: "aaa","b""bb","ccc" ")

Nö, dieses Problem hast Du immer.

Im Grunde sehe ich es wie Du, dass spezifizierte Datenformate gentutz t werden sollten, bin hier aber etwas ratlos, ob das nicht mit beliebigen Trennern doch im Rahmen dieser eher unspezifischen Spezifikation liegt und dies nicht wirklich eine relativ sichere und einfache Lösung ist.

Du hast normalerweise überhaupt kein Problem, wenn Du

a) das üblichste aller Umgebungszeichen verwendest, die doppelten Anführungszeichen
b) das gewählte Umgebungszeichen im Inhalt vorher verdoppelst
c) das üblichste Zeilenende verwendest, einen Zeilenumbruch
d) eines der üblichsten Spaltentrennzeichen verwendest, Semikolon oder Komma

... und dann fgetcsv nimmst.

Der große Vorteil dieses Vorgehens ist, dass Du Dir die so entstandene Datei
mit jeder Anwendungssoftware, die CSV kann - wie z.B. Excel oder Calc aus
OpenOffice.

Freundliche Grüße

Vinzenz