Mailinglisten-Archive |
"jm.Fuchs" wrote: > > Ich möcht eine von Excel exportierte CSV-Datei mit dem Befel "LOAD DATA > INFILE" in eine Datenbank laden. Dies funktioniert auch prima, ausser das > decimal Zahlen (z.B. ##,##) unter Excel mit einem komma getrennt werden, > dies aber während des Updates nicht berücksichtigt wird. Es wird also nur > die Zahlen vor komma übertragen. > Was ist zu machen ? Ich gehe immer wieder zwei Wege. Entweder ich bringe dem Kunden bei, daß Zahlen einen Punkt statt eines Kommazeichens besitzen und schwärme ihnen etwas von besonders günstiger Programmierung vor oder ich parse die Datei vor dem LOAD DATA INFILE. Das parsen bietet sich immer dann an, wenn es mit einem einfachen LOAD... nicht getan ist. Dies ist z.B. bei komplexeren Shops der Fall wo "flache" CSV Dateien mehrere Tabellen speisen. Hilfreich sind die Funktionen: str_replace(), http://www.php.net/manual/function.str-replace.php3 fgetcsv, http://www.php.net/manual/function.fgetcsv.php3 Als letzte Variante, in der ich keine wesentliche Erleichterung sehe, ist die Modifizierung des Datentyp in der Datenbank. Man benutzt statt float(8,2) ein varchar(10) und läßt PHP beim Auslesen den Wert konvertieren. Dies ist natürlich nicht ganz sehr effektiv, da unnötig viele Konvertierungen erfolgen, aber wer will... Ulf
php::bar PHP Wiki - Listenarchive