CSV -> Problem mit Anfürhungszeichen.

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

  • CSV -> Problem mit Anfürhungszeichen.

    Hi, ich habe eine CSV-Datei. Trenner ist ein Semikomma und die Datensätze werden von doppelten Anführungszeichen eingeschlossen. Dummerweise werden auch doppelte Anführungszeichen innerhalb der Einträge verwendet. z.B.
    "03419";"Diese Lampe verbessert nicht nur Ihre Raumluft, sondern auch das Ambiente Ihres Wohnzimmers.";"Duftgarten - Aromalampe "Aladin"";"Bereits seit der Antike kennen Menschen die entspannende Wirkung der Raumdüfte. Mit Hilfe der Aromalampe steigen auch Sie in die Höhen der stimulierenten Duftwelten.<li>Höhe: 14cm.<li>Durchmesser: bis zu 16cm.";"http://www.partner.head-shop.de/export/images/thumb/03419.jpg";"http://www.partner.head-shop.de/export/images/product/03419-1.jpg";"";"";"";"4.99";"|Esoterik:Räucherzubehör:Gefäße & Schalen|Esoterikele:duftlampen";"http://www.head-shop.de/shop/03419.html?mv_pc=themadrogennet";
    Wenig erfolg hatte ich daher mit:
    Code:
    LOAD DATA LOCAL
            INFILE '/kunden/url/products_export.csv'
            REPLACE
            INTO TABLE headshop_artikel
            FIELDS
                    TERMINATED BY ';'
                    OPTIONALLY ENCLOSED BY '"';
    auch nicht mit:
    Code:
    LOAD DATA LOCAL
            INFILE '/kunden/url/products_export.csv'
            REPLACE
            INTO TABLE headshop_artikel
            FIELDS
                    TERMINATED BY ';'
    Am besten geht noch:
    Code:
    LOAD DATA LOCAL
            INFILE '/kunden/url/products_export.csv'
            REPLACE
            INTO TABLE headshop_artikel
            FIELDS
                    TERMINATED BY '";"'
    Problem: erster und letzter Datensatz haben jeweils noch ein anfürhungszeichen an Anfang/Ende.

    Was schlagt ihr vor?

    Gruß,
    syco23
    Zuletzt geändert von syco23; 30.10.2005, 19:50.
    [COLOR=darkblue].: 1+1=23 :.[/COLOR]

  • #2
    per php umformatieren ... je zeile das erste/letzte zeichen entfernen ... danach den import
    Kissolino.com

    Kommentar


    • #3
      an sowas hatte ich auch schon gedacht. Nur wollte ich weder mit Änderungen arbeiten (ich muss die Datei jetzt regelmäßig hochladen) noch ein php-interface gestalten, sondern die phpmyadmin-Oberfläche verwenden.

      Anyway, thanx.
      [COLOR=darkblue].: 1+1=23 :.[/COLOR]

      Kommentar


      • #4
        ob du die daten "per hand" über pma aktualisierst oder ein script anschubst, das die arbeit erledigt (<= per cronjob) ist doch wurscht, oder?
        Kissolino.com

        Kommentar


        • #5
          Ja, schon, aber ich bin zu faul bzw. beschäftigt zum Script schreiben.
          [COLOR=darkblue].: 1+1=23 :.[/COLOR]

          Kommentar


          • #6
            so, ich hab jetzt ein Scirpt geschreiben, das das für mich übernimmt. Vielleicht verirrt sich ja mal jemand her, dem der Code nützlich ist.

            PHP-Code:
            <?
            include("../connect.inc.php");
            $filename = "products_export.csv";
            $filename2= "products_export2.csv";
            $counter=0;
            if ($csv = @file($filename)) {
                foreach ($csv as $csv_aktuell) {
                    $zeile = substr(trim($csv_aktuell),1,-1);
                    $zeile = str_replace('";"',"[trenner]",$zeile);
                    $zeile = str_replace(";",";",$zeile);
                    $zeile = str_replace('"',"&quot;",$zeile);
                    $zeile = str_replace("[trenner]",';',$zeile);
                    $datei .= $zeile.";\n";
                    // erte Zeile entfernen:
                    if ($counter == 0) {
                        unset($datei);
                        $counter++;
                    }
                }
               if (!$handle = fopen($filename2, "w")) {
                     print "Kann die Datei ".$filename2." nicht erstellen<br />";
                     exit;
               }
               // Schreibe $datei in die erstellte Datei.
               if (!fwrite($handle, $datei)) {
                   print "Kann in die Datei ".$filename2." nicht schreiben<br />";
                   exit;
               }
               print "Fertig, in Datei ".$filename2." wurde geschrieben<br />";
               fclose($handle);
               // IN MYSQL EINTRAGEN:
               if ($eintrag = mysql_query("LOAD DATA LOCAL
                    INFILE '/kunden/domains/webseiten/headshop/".$filename2."'
                    REPLACE
                    INTO TABLE headshop_artikel
                    FIELDS
                            TERMINATED BY ';'")) {
                    echo "Eintrag in Datenbank erfolgreich<br />";
               } else {
                       echo "Eintrag hat nicht geklappt<br />";
               }
               unlink($filename2);
            } else {
                echo "Fehler - CSV-Datei existiert nicht<br />";
            }

            ?>
            Was Ihr Pros nicht (mehr) versteht: So "ein paar Zeilen" dauern bei mir immer noch ca. 1h bis alles klappt (außer es kommen nur Funktionen vor, mit denen ich oft zu tun habe). daher habe ich nach einer anderen Lösung gesucht..

            Anyway,..

            Gruß,
            Syco
            Zuletzt geändert von syco23; 18.03.2004, 02:54.
            [COLOR=darkblue].: 1+1=23 :.[/COLOR]

            Kommentar


            • #7
              Da war natürlich wieder ein Bug drinnen. So funzt es:

              PHP-Code:
                  foreach ($csv as $csv_aktuell) {
                      
              $zeile substr(trim($csv_aktuell),1,-2);
                      
              $zeile str_replace('";"',"[trenner]",$zeile);
                      
              $zeile str_replace(";",";",$zeile);
                      
              $zeile str_replace('"',"&quot;",$zeile);
                      
              // Nicht möglich wg. $quot; und ;:
              //        $zeile = str_replace("[trenner]",';',$zeile);
                      
              $datei .= $zeile."[trenner]\n";
                      
              // erte Zeile entfernen:
                      
              if ($counter == 0) {
                          unset(
              $datei);
                          
              $counter++;
                      }
                  } 
              [COLOR=darkblue].: 1+1=23 :.[/COLOR]

              Kommentar

              Lädt...
              X