PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : CSV-Datei parsen - Problem mit leeren Spalten



broeggle
06-03-2007, 04:01
Hi,
ich versuche gerade eine CSV Datei einzulesen und anschließend in eine SQL Datei umzuwandeln, jedoch habe ich hierbei das Problem mit leeren Spalten.

Beispiel



Spalte1 Spalte2 Spalte3
23 331 999
233 3332 997
4 995


Wie man sieht bereitet die 4. Zeile das Problem, denn dort ist die 2.Spalte leer.
Wenn ich das ganze jetzt mit

preg_match_all("/(\S*)\s*/" .....
in ein Array mappe, dann bekomme ich leider


array (
array (23, 331, 999),
array (223, 3332. 997),
array (4, 995)
);

als Array zurück.

Das Problem ist, leider ist weder die Breite der Spalten, noch die Anzahl der Leerzeichen konstant.
Und leider ist die Anzahl der Spalten auch für jede Datei unterschiedlich (ich kann sie jedoch anhand der Spaltenüberschrift bestimmen).

--> Habt ihr irgendeine Idee, wie ich den leeren Eintrag dennoch richtig mappen kann?


Vielen Dank schonmal.

Turbohummel
06-03-2007, 06:13
Das ist kein CSV. Das heißt "Coma seperated Values" (wegen Rechtschreibung: Guckt auf die Zeit des Eintrags).
Guck dir die erste Zahl an, guck dir die letzte Zahl an. Guck dann ob noch eine Zahl in der Mitte kommt.
Das ginge, wenn nur die Zahl in der Mitte fehlen würde.

Ich persönlich sehe hinter deinem Beispielbeitrag keine Logik. Es könnte auch der erste Eintrag oder der letzte Eintrag fehlen. Und wo keine Logik, da kann auch ein Rechner die Daten nicht sinnig zerlegen.

elrond
06-03-2007, 06:47
wenn ich sowas mache -also relativ häufig- splitte ich zeile für zeile und checke dann die einzelnen felder....

BlueJay
07-03-2007, 12:57
ich versuche gerade eine CSV Datei einzulesen und anschließend in eine SQL Datei umzuwandeln, jedoch habe ich hierbei das Problem mit leeren Spalten.

Beispiel



Spalte1 Spalte2 Spalte3
23 331 999
233 3332 997
4 995




Ist die brav als CSV von einem anderen Programm exportiert worden oder sieht sie wie oben aus? Dann exportiere sie nochmal mal mit Komma oder Semmelkorn als Trenner.

Dann kannst du sie wieder mit fgetcsv einlesen.

so long,
BlueJay