Christoph Jeschke: Textfile mit mehreren Daten, davon einmal mit Zeilenumbrüchen

Beitrag lesen

Guten Tag,

Wie schaffe ich es _nun_, die 3 Informationen $vorname, $familienname und
$text da getrennt rauszufiltern und weiterzuverarbeiten? Die Textumbrüche
dürfen dabei _nicht_ verloren gehen, der Text soll so, wie ihn der User
eingegeben hat, aus der .csv-Datei übernommen werden und in eine DB
gespeichert werden.

Du solltest auf den seltsamen Trenner (###) verzichten und tatsächlich ein Komma-, meinetwegen auch semikolonsepariertes, Format verwenden, welches du mit fgetcsv() und fputcsv() deutlich leichter bearbeiten kannst, als mit explode(). Zeichen, die dabei eine Mehrbedeutung haben, z.B. der Zeilenumbruch, musst du dabei so escapen, dass diese ihre Mehrbedeutung verlieren, z.B. könntest du urlencode()/urldecode(), base64_encode()/base64_decode() oder pack()/unpack() verwenden.

Mal schnell als Beispiel runtergetippt (bedarf auf jeden Fall noch besserer Ausnahmebehandlung):

<?php  
  
$values[] = array('Zeile 1, Zelle 1', 'Zeile 1, Zelle 2', "Zeile 1, Zelle 3\n mit Umbruch");  
$values[] = array('Zeile 2, Zelle 1', 'Zeile 2, Zelle 2', 'Zeile 2, Zelle 3');  
  
$h = fopen('tmp.csv', 'w+');  
  
foreach($values as $line)  
{  
        // in $line befindet sich nun ein array  
        array_walk($line, 'sanitize_csv');  
        fputcsv($h, $line, ';', '"');  
}  
  
fclose($h);  
  
readfile('tmp.csv');  
  
function sanitize_csv(&$value, $index)  
{  
        $value = urlencode($value);  
}  
  
?>  
  
$ php -f csv.test.php  
Zeile+1%2C+Zelle+1;Zeile+1%2C+Zelle+2;Zeile+1%2C+Zelle+3%0A+mit+Umbruch  
Zeile+2%2C+Zelle+1;Zeile+2%2C+Zelle+2;Zeile+2%2C+Zelle+3  

Gruß
Christoph Jeschke

--
Zend Certified Engineer
Certified Urchin Admin
0 45

Textfile mit mehreren Daten, davon einmal mit Zeilenumbrüchen

Brombeermilchtrinker
  • php
  1. 1
    dedlfix
    1. 0
      Brombeermilchtrinker
      1. 0
        Patrick Andrieu
        1. 0
          Brombeermilchtrinker
          1. 0
            Christoph Jeschke
          2. 0
            Patrick Andrieu
            1. 0
              Brombeermilchtrinker
              1. 0
                Patrick Andrieu
                1. 0
                  Jens Holzkämper
                  1. 0
                    Patrick Andrieu
                    1. 0
                      Jens Holzkämper
                2. 0

                  Christoph geht es gut!

                  Patrick Andrieu
                  • menschelei
                  1. 0
                    Der Martin
                  2. 0
                    Kai345
                  3. 0
                    MudGuard
                    1. 0
                      Patrick Andrieu
                      1. 0
                        ChrisB
                    2. 0
                      Harlequin
      2. 2
        dedlfix
        1. 0
          Brombeermilchtrinker
          1. 0
            Harlequin
            1. 0
              Brombeermilchtrinker
          2. 2
            ChrisB
            1. 0
              Brombeermilchtrinker
              1. 0
                ChrisB
                1. 0
                  Brombeermilchtrinker
                  1. 2
                    ChrisB
                    1. 0
                      Brombeermilchtrinker
              2. 2
                ChrisB
                1. 0
                  Brombeermilchtrinker
                  1. 0
                    ChrisB
                    1. 0
                      Brombeermilchtrinker
                      1. 0
                        ChrisB
              3. 5
                dedlfix
                1. 0
                  dedlfix
                2. 0
                  Brombeermilchtrinker
                  1. 0
                    dedlfix
                    1. 0
                      Brombeermilchtrinker
          3. 0
            dedlfix
    2. 0
      Christoph Jeschke
      1. 1
        dedlfix
        1. 0
          Christoph Jeschke
          1. 0
            Brombeermilchtrinker
  2. 0
    Christoph Jeschke