CSV-Dateien können für den Import tricky sein, da sie unterschiedliche Trennzeichen haben können. Ein weiterer Pitfail kann beim Import die UTF-8 Formatierung darstellen, daß soll aber nicht Teil dieses Artikels sein. Grundsätzlich gibt es natürlich auch eine fertige PHP-Methode mit der man den PHP CSV Delimiter ermitteln kann. Aber die ist nicht immer einsetzbar.
PHP CSV Delimiter ermitteln
Es gibt die Möglichkeit, daß CSV-File nach den Vorkommen der möglichen Delimiter / Trenner zu durchsuchen und nach ihrem Vorkommen zu sortieren. Hier ist der dazugehörige Quellcode:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
//The delimiters array to look through $delimiters = array( 'semicolon' => ";", 'tab' => "\t", 'comma' => ",", ); //Load the csv file into a string $csv = file_get_contents($file); foreach ($delimiters as $key => $delim) { $res[$key] = substr_count($csv, $delim); } //reverse sort the values, so the [0] element has the most occured delimiter arsort($res); reset($res); $first_key = key($res); return $delimiters[$first_key]; |
Das ist eine sehr gute Methode. Übrigens sollte einem ein PHP-Codestandard vorschlagen die Double-Quotes von dem Tabulator-Delimiter zu entfernen, kann man das nicht tun. Aber man kann aus Performance-Gründen auch nur die erste Zeile einer CSV-Datei auswerten. Das ist natürlich gerade bei großen CSV-Files sinnvoll.
Über den Author Roland Golla
Der Clean-Code-Developer Roland Golla ist seit vielen Jahren als PHP-Programmierer im Einsatz und entwickelt u.a. Webapplikationen für verschiedene Aufgabenfelder in Unternehmen. So auch einen Google-Adwords-Link-Verifizierungs-Tool. In diesem Tool werden CSV-Files hochgeladen und dann die Links mit Hilfe des Header-Status auf ihre Gültigkeit überprüft.