frankx: Ein paar konkrete Antworten

Beitrag lesen

Hellihello Vinzenz,

Du solltest ja auch ganz andere verwenden.

Zelle irgendwo aaaa°°°aaa dann §aaa°°°aaa§ draus mache. ich möchte ja das dingens mit PHPs explode zerlegen am Delimiter.

Nein, das möchtest Du nicht.

Ich weiß zwar, dass man möglichst 100% Lösungen anstreben sollte, aber es erscheint mir fast möglich, Delimiter zu finden, die nicht im Text auftauchen wie [°°°°°°] und [#§#] zum Beispiel.

Ja eben. Genau aus diesem Grund haben sich Leute schon Gedanken gemacht und
eine (nicht perfekte) Spezifikation für dieses Problem erstellt. Ich dachte,
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...".

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

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."

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."

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

  
  
$Zeilen_noch_als_Text=explode($Zeilentrenner,$Tabelle_als_CSV);  
foreach ($Zeilen_noch_als_Text as $Zeile_als_Text) {  
   $Zeilen[]=explode($Spaltendelimiter,$Zeile_als_Text);  
}  

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" ")

c) was ist, wenn jetzt ";" der Spaltentrenner und '"' das Datenfeld-Enclosure-Zeichen ist. Im Datensatz steht nun 'abc"","CRLF","aaa' - das wird dann masikiert zu  'abc"""",""CRLF"",""aaa'?

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.

Dank und Gruß,

frankx