Problem mit Funktion "fgetcsv" und "explode"

Kopfballstar

Erfahrenes Mitglied
Hallo,

folgendes Problem tritt auf. Ich lese eine Datei aus mit:

$Dateizeiger = fopen($csv_file , "r");

und dann

while(($Daten = fgetcsv($Dateizeiger, 1000, ";")) !== FALSE)
{...}

Wie man sieht ist das Trennzeichen ein Semikolon und wird auch in der Funktion fgetcsv so angegeben. Aber blöderweise seperiert diese Funktion erstmal gar nicht richtig, sondern es wird ein Array der Größe 2 erstellt. An Position 1 befindet sich der gesamte String des CSV File (also xyz; xyz; xyz; ...). Erst nach dem letzten Semikolon wird separiert und somit ist Position 2 des Array leer.

Nun teile ich den String im Array[0] mit EXPLODE.

explode(";", $Daten[0])

Aber dadurch wird der String nicht richtig getrennt. Er wird zwar nach einem Semikolon getrennt, aber eben auch nach einem Komma ( "," ). Wieso das? In dem String kommt auch genau einmal ein "," vor, dort darf aber nicht getrennt werden.

Zähle ich die Kommas mit

echo substr_count($Daten[0], ',');

wird dann komischerweise keins gefunden...
 
Ok danke, das klappt.
Aber jetzt stelle ich fest,m das Problem liegt def. schon vorher, also bei fgetcsv. Da wird das Komma als Separator benutzt obwohl ich Semikolon angebe. Das darf nicht sein.
 
Hmm wenn du weiterhin Probleme damit hast kannst du ja eventuell auch darauf verzichten und ein einfaches csv einlesen realisieren mit 2 Zeilen code:

PHP:
$csv = file('datei.csv');
foreach ($csv as $k => $r) $csv[$k] = explode(";", $r);

print_r($csv);
 
Hallo,

danke. Hab das mal ausprobiert und auf den ersten Blick bekomme ich mein gewünschtes Ergebnis! Auch das Koma Problem besteht dann nicht.

Grüße
 
Zurück