Sven Burkert: Sehr ungewöhnlich... CSV Import

Hallo,

ich importiere über ein HTML-Formular eine CSV-Datei. Deren Daten werden in eine Datenbank gespeichert.

Wenn ich den Import mit einer unter Linux erstellten Datei mache, funktioniert alles, wenn ich eine unter Windows erstellte Datei nehme, werden manche Daten falsch gespeichert. Woran könnte das liegen?

In einer Text-Datei gibt es doch keine Metadaten? Aber wieso ist dann die Windows-CSV-Datei ca. 0,5 KB größer?

Habe wenig Hoffnung, dass mir da jemand helfen kann :(
Grüße,
Sven

  1. Moin Sven,

    In einer Text-Datei gibt es doch keine Metadaten? Aber wieso ist dann die Windows-CSV-Datei ca. 0,5 KB größer?

    weil das Windows Format mit \r\n abspeichert, aber Linux nur mit \n
    (Zeilenumbruch)

    regds
    Mike©

    --
    Freunde kommen und gehen. Feinde sammeln sich an.
  2. hi,

    Wenn ich den Import mit einer unter Linux erstellten Datei mache, funktioniert alles, wenn ich eine unter Windows erstellte Datei nehme, werden manche Daten falsch gespeichert. Woran könnte das liegen?

    Wurden die Daten auf beiden Systemen in der gleichen Zeichenkodierung abgespeichert?

    In einer Text-Datei gibt es doch keine Metadaten? Aber wieso ist dann die Windows-CSV-Datei ca. 0,5 KB größer?

    Hast du das unterschiedliche Format der Zeilenumbrüche schon in deine Überlegungen einbezogen?

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Wurden die Daten auf beiden Systemen in der gleichen Zeichenkodierung abgespeichert?

      Ja, beide ISO 8859-15

      Hast du das unterschiedliche Format der Zeilenumbrüche schon in deine Überlegungen einbezogen?

      Nein (siehe andere Antwort)

  3. Hi,

    ein dos2unix(...) sollte helfen.

    1. ein dos2unix(...) sollte helfen.

      Habe diesen Linux-Befehl nicht bei meiner Linux-Distribution Ubuntu :(
      Mal schauen, vielleicht genügt auch diese PHP-Funktion:

      /* ------------------8<------------------------*/
      function dos2unix ($filename) {
             //open original file
             $fp = fopen($filename,'r');
             //open original file
             $fptmp = fopen($filename.'_tmp','w');
             while(!feof($fp)){
                     $line = chop(fgets($fp,4096));
                     $ret = ereg_replace(chr(13) . chr(10),"\n",$line);
                     $ret = ereg_replace(chr(13),"\n",$ret);
                     fwrite($fptmp,$ret);
             }

      fclose($fp);
             fclose($fptmp);
             //remove original file
             unlink($filename);
             //move converted file to old filename
             copy($filename.'_tmp', $filename);
             //remove temp file
             unlink($filename.'_tmp');
      }
      /* ------------------8<------------------------*/

      1. Hi,

        ein dos2unix(...) sollte helfen.

        Habe diesen Linux-Befehl nicht bei meiner Linux-Distribution Ubuntu :(

        dos2unix und co. findest du im Paket sysutils => sudo aptitude install sysutils

        Gruß,
        Andreas.