Announcement

Collapse
No announcement yet.

php csv

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • php csv

    Hallo zusammen,

    ich habe eine csv - Datei mit z.B. diesem Eintrag:

    "Inhalt 1","Inhalt 2 Zeilenumbruch ""\"" und
    weiter","Inhalt 3"

    Ja, das ist eine Zeile, wobei im Feld 2 ein Zeilenumbruch ist.

    Ich habe das mal mit diesem Script ausgelesen:

    PHP Code:
    <?php

    if (($handle fopen("file.csv""r")) !== FALSE)
    {
        while ((
    $data fgetcsv($handle,0,',','"')) !== FALSE
        {
            
    $anzahl 3;
            echo 
    "<ul>";
            for (
    $x 0$x $anzahl$x++)
            {
                if (isset(
    $data[$x]) == 1)
                {echo 
    "<li>Eintrag von $x :  ".$data[$x]." </li>";}
            }
     
            echo 
    "</ul>";
        }
    }
        
    ?>
    Als Ergebnis bekomme ich folgendes:

    Eintrag von 0 : Inhalt 1
    Eintrag von 1 : Inhalt 2 Zeilenumbruch "\" und
    Eintrag von 0 : weiter"
    Eintrag von 1 : Inhalt 3

    Es sieht so aus, als ob nach dem "\" der erste Zeilenumbruch dann eine neue Zeile erzeugt, statt dies in dem Feld zu machen.
    Wenn ich beim fgetcsv zusätzlich noch einen escape Zeichen hinzu füge, der in dem Text nicht vor kommt,
    funktioniert der Aufruf.

    PHP Code:
    <?php

    if (($handle fopen("importfile/problems.csv""r")) !== FALSE)
    {
        while ((
    $data fgetcsv($handle,0,',','"','X')) !== FALSE
        {
            
    $anzahl 3;
            echo 
    "<ul>";
            for (
    $x 0$x $anzahl$x++)
            {
                if (isset(
    $data[$x]) == 1)
                {echo 
    "<li>Eintrag von $x :  ".$data[$x]." </li>";}
            }
     
            echo 
    "</ul>";
        }
    }
        
    ?>
    Ergebnis:
    Eintrag von 0 : Inhalt 1
    Eintrag von 1 : Inhalt 2 Zeilenumbruch "\" und weiter
    Eintrag von 2 : Inhalt 3


    An der Erzeugung der csv kann ich leider nicht viel machen, weil mir diese in dieser Art vorgegeben wird.
    Problem schein wohl dieses ""\"" zu sein.
    Vor dem Export als csv stand dort "\"
    Der Export scheint hier wohl mit " zu escapen zu wollen.

    Des weiteren habe ich das noch ein paar Tests gemacht.
    z.B. diesen hier:

    csv-Datei:
    "Inhalt 1","Inhalt 2 Zeilenumbruch \" und
    weiter","Inhalt 3"

    PHP Code:
    <?php

    if (($handle fopen("importfile/problems.csv""r")) !== FALSE)
    {
        while ((
    $data fgetcsv($handle,0,',','"')) !== FALSE
        {
            
    $anzahl 3;
            echo 
    "<ul>";
            for (
    $x 0$x $anzahl$x++)
            {
                if (isset(
    $data[$x]) == 1)
                {echo 
    "<li>Eintrag von $x :  ".$data[$x]." </li>";}
            }
     
            echo 
    "</ul>";
        }
    }
        
    ?>
    Ergebnis:
    Eintrag von 0 : Inhalt 1
    Eintrag von 1 : Inhalt 2 Zeilenumbruch \" und weiter
    Eintrag von 2 : Inhalt 3

    Wenn ich das Escape - Zeichen weg nehme, bzw auf X ändere [fgetcsv($handle,0,',','"','X')] wird das wieder falsch dargestellt.

    Eintrag von 0 : Inhalt 1
    Eintrag von 1 : Inhalt 2 Zeilenumbruch \ und
    Eintrag von 0 : weiter"
    Eintrag von 1 : Inhalt 3

    Also, ich vermute mal, dass die Fehlertoleranz bei der csv - Datei Auswertung mir hier Probleme macht.

    Hat jemand eine Idee, wie ich eine csv mit dem Inhalt ""\"" als "\" importieren kann ohne das Escape ändern zu müssen?

    Danke und Grüße
    Stephan

  • #2
    http://php.net/manual/de/function.str-getcsv.php
    Christian

    Comment


    • #3
      ok, danke. Werde ich mal versuchen. Melde mich dann wieder.

      Stephan

      Comment

      Working...
      X