Kommentare in CSV-Dateien

2006-03-15
3 min read

Silke Schümann erwähnte im Templaterie Blog eine interessante Möglichkeit: CSV-Datensammlungen sind sehr viel besser zu wareten, wenn am Anfang der Dateien ein Kommentar steht, der Sinn und Verwendungszweck der Daten sowie das Datenformat erklärt. Dieser Kommentar ist nur für denjenigen gedacht, der diese Dateien von Hand ändert, oder ein Programm schreibt, das auf diese Daten zugreift. Bei der Auswertung der Daten soll der Kommentar ignoriert werden.

Offensichtlich in der Hoffnung, dass andere daraus lernen, beschreibt Silke einen Fehler, der Ihr unterlaufen ist. Sowohl das fehlerhafte, als auch ihr korrigiertes PHP-Skript sind im Templaterie Blog erläutert. Da mir die Idee sehr gut gefällt, habe ich sie noch ein wenig weiter verfolgt:

Die Testdaten sind unter http://stefan.waidele.info/php-ex/katalogtestdata.csv einzusehen. Sie entsprechen den Orginaldaten, sind jedpch „SFW“. Die Links zu den Skripten öffnen sich in neuen Browserfenstern. Sowohl das Skript als auch die Ausabe desselben sind zu sehen.

Kommentar überspringen 1: Falscher Ansatz

Wie Silke bereits feststellen musste, werden die Zeilen der Datei von der ersten bis zur letzten gelesen, auch wenn die Zählervariable im Skript schon viel weiter ist. Das Resultat kann man der Vollständigkeit halber hier sehen: http://stefan.waidele.info/php-ex/falsch.php.
Vorteil: Keiner
Nachteil: Falsches Ergebniss

Kommentar überspringen 2: Besserer Ansatz:

Der Zeilenzähler beginnt bei 0. Vor der Ausgabe wird geprüft, ob man schon an der 10. Zeile vorbei ist. Wenn ja, werden die Daten ausgegeben: http://stefan.waidele.info/php-ex/besser.php
Vorteil: Einfach (?) zu programmieren
Nachteile: Performance (Prüfung bei jedem Schleifendurchlauf), Feste Position und Größe des Kommentars, die Bedingung der Abrfrage muss in Abhängigkeit von der Schleifenimplementierung formuliert werden (Startet $row bei 0 oder 1? Inwiefern stimmt diese Zählung mit dem Editor überein? In meinem Beispiel wird ein Datensatz „irrtümlicherweise‘ Ausgelassen)


Kommentar überspringen 3: Noch besserer Ansatz:

Der Kommentar wird in einer seperaten Schleife gelesen. Die Hauptschleife braucht sich nicht mehr um ihn zu kümmern und startet direkt bei den Daten: http://stefan.waidele.info/php-ex/nochbesser.php
Vor- und Nachteile: Wie bei 2, jedoch bessere Performance da weniger Abfragen erfolgen. Die Bedingungen der ersten Schleife (die den Kommentar überspringt) sind besser (weniger fehlerträchtig) zu formulieren.

Flexible Kommentare: IMO, der beste Ansatz:

Kommentare werden durch eine Raute gefolgt vom Feldtrenner am Zeilenanfang eingeleitet (hier: „#|“). In jeder Zeile wird auf dieses Zeichen geprüft. Es werden nur Daten ausgewertet. Kommentare (und Leerzeilen) werden übersprungen: http://stefan.waidele.info/php-ex/IMOambesten.php
Vorteil: Flexible, gut lesbare Datensammlungen (wichtig bei manueller Pflege), Sicher zu programmieren (kein ‚versehentlicher‘ Verlust von Datensätzen)
Nachteile: Performance (2 Prüfungen bei jedem Schleifendurchlauf), Änderung der CSV-Datei (wg. anderem Kommentarsyntax, siehe: http://stefan.waidele.info/php-ex/katalogtestdata2.csv)

Fazit:

Auch wenn Aufgrund der guten Datenbankunterstützung in PHP die Benutzung selbstverwalteten CSV-Dateien meist nur die zweitbeste Lösung ist, kommt man manchmal nicht um diese herum. Dann ist es wichtig, die Daten möglichst Zukunftssicher und übersichtlich abzulegen. Werden die Dateien vom Benutzer im Editor verändert und somit zahlt sich der (leicht) erhöhte Aufwand beim Programieren auf jeden Fall aus.

Ich finde die Idee, CSV-Dateien mit Kommentaren und Leerzeilen lesbarer zu gestalten ausgesprochen gut. Vielen Dank an Silke Schümann für die Idee!