Problem beim Einlesen von CSV-Dateien

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Problem beim Einlesen von CSV-Dateien

    Hallo zusammen.

    Ich habe eine CSV-Datei mit Daten in dieser Form:

    01bc;1
    040138;1
    07bc;1
    0g008;4
    10kg046;3
    10mute238;2
    12auto22;6
    12bdhmd005;5
    12bon013;1
    12bong13;36
    12bong14;9
    12bong2;4
    12bong20;2
    ...

    Der erste Wert ist eine Artikelnummer, der zweite ein Lagerbestand. Diese Werte müssen in eine Datenbank.

    Das habe ich so gemacht:

    PHP-Code:
    $read=fopen($datei,"r+");
    while (!
    feof($read)) {
        
    $rein=fgets($read);
    $rein str_replace("'""\'"$rein);
    $daten=explode(";",$rein);

    $query "INSERT INTO in_stock SET katalognummer = '".$daten[0]."', stock = '".$daten[1]."' ";

    if (!
    mysql_query($query)) {
    echo 
    "Fehler: ".$query."<br>";
    }


    Komischerweise wird nur die erste von knapp 3500 Zeilen aus der CSV-Datei geschrieben. Und dort wird dann auch in die Spalte 'stock' noch der Wert aus der zweiten Zeile des CSV mitgenommen. Also die Query sieht dann so aus:

    INSERT INTO in_stock SET katalognummer = '01bc', stock = '1 040138';

    Mir macht es den Eindruck, als würde der Zeilenumbruch im CSV nicht interpretiert werden. Was kann man da tun?

    Grüße

    Emil

  • #2
    Ich würde es erstmal mit der hier probieren ... http://de3.php.net/manual/de/function.fgetcsv.php
    carpe noctem

    [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
    [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

    Kommentar


    • #3
      No, leider nicht. Wenn ich das Beispiel von der Seite nehme, bekomme ich sowas ausgegeben:

      89 fields in line 1:
      01bc
      1 040138
      1 07bc
      1 0g008
      4 10kg046
      3 10mute238
      2 12auto22
      6 12bdhmd005
      5 12bon013
      1 12bong13
      36 12bong14
      9 12bong2
      4 12bong20
      2 12bong29l
      1 12bong31
      5 12bong38l

      Dabei findet er ganze 39 Zeilen mit teils unterschiedlicher Anzahl an fields.

      Das Script sieht so aus:

      PHP-Code:
      $row 1;                                      // Anzahl der Arrays
      $handle fopen ($datei,"r");              // Datei zum Lesen öffnen
      while ( ($data fgetcsv ($handle1000";")) !== FALSE ) { // Daten werden aus der Datei
                                                     // in ein Array $data gelesen
          
      $num count ($data);                      // Felder im Array $data
                                                     // werden gezählt
          
      print "<p> $num fields in line $row: <br>\n";
          
      $row++;                                    // Anzahl der Arrays wird 
                                                     // inkrementiert
          
      for ($c=0$c $num$c++) {              // FOR-Schleife, um Felder 
              
      print $data[$c] . "<br>\n";            // des Arrays auszugeben
          
      }
      }
      fclose ($handle); 
      Wie kann ich rausfinden, ob mit der CSV-Datei etwas nicht in Ordnung ist? In meinm Texteditor sieht die ganz normal aus.

      Grüße

      Emil

      Kommentar


      • #4
        Original geschrieben von bienenschlau
        Wie kann ich rausfinden, ob mit der CSV-Datei etwas nicht in Ordnung ist? In meinm Texteditor sieht die ganz normal aus.
        mit nem editor, der auch einen hex-modus hat (z.b. notepad++) mal die zeilenumbrüche genauer ansehen.
        http://de.wikipedia.org/wiki/Zeilenumbruch

        das könnte für dich auch interessant sein:
        http://de.php.net/manual/de/ref.file...t-line-endings

        Kommentar


        • #5
          Wenn es mit den CSV-Funktionen von PHP nicht funzt, könntest du ja probieren das ganze händisch einzulesen z.B. so
          PHP-Code:
          $datei 'pfad/zu/deiner/datei.csv';
          $datei file($datei);
          $resultat = array();
          foreach(
          $datei as $wert){
            
          $temp explode(';',$wert);
            
          $resultat[] = array($temp[0],$temp[1]);

          Ergibt dies denn etwas sinnvolles?
          Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

          [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
          Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

          Kommentar


          • #6
            Also es lag tatsächlich am fehlenden Zeilenumbruch. Ich hatte mir das CSV aus Excel schreiben lassen. Nachdem ein Kollege das CSV dann auf einem Windows-PC aus Excel erstellt hat, ging es.

            Trotzdem danke für die Hilfe.

            Emil

            Kommentar

            Lädt...
            X