Daten aus CSV-DAtein extrahieren und in TXT-Datei abspeichen mittels PHP

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

  • Daten aus CSV-DAtein extrahieren und in TXT-Datei abspeichen mittels PHP

    Hallo!

    Ich hab hier im Forum leider nichts passendes gefunden.
    Falls es schon irgendwo stehen sollte, sorry :-)

    Ich bin auf der Suche nach einem PHP-Script, dass mir bestimmte Spalten aus eine CSV-Datei extrahiert und diese als TXT-Datei abspeichert. Gibt es so etwas?

    Bin leider noch absoluter Neuling in dieser MAterie...

    Bin für jede Hilfe sehr dankbar!

    Gruß

  • #2
    Definiere txt-Datei. Definiere bestimmte Spalten.

    Kommentar


    • #3
      Naja meine CSV-Datei ist ja in Spalten aufgebaut.
      z. B.:
      Gruppe;Name 1;Name2;Postleitz.;Ort;Straße;Telefon;Fax;


      Nun hab ich 3000 Datensätze in dieser CSV-Datei.
      Mit einem PHP-Script will ich nun z.B.: die Spalten, Name2, Ort und Telefon extrahieren und als txt-Datei speichern. Weil für den weiteren Arbeitsgang wird eine txt-Datei gebraucht.

      Andere Spalten z.B. Gruppe, Name1, Postleitz sollen in einer 2.txt-Datei gespeichert werden.

      Ist es nun klarer, was ich benötige?

      Danke

      Kommentar


      • #4
        Zuerst mal könnten dir folgende Fkt helfen

        - file()
        - explode()
        - fopen()
        - fwrite()
        - fclose()

        Mittels file() liest du die csv Datei in ein Array ein (1. Zeile hat den Array Index 0)
        Mittels explode() trennst du die gewünschte Zeile in ihre Bestandteile.
        Diese Bestandteile schreibst du z.B. in einen String und schreibst diesen mittels fwrite (gültiger File Pointer vorausgesetzt) in deine Textdatei.

        Lies dir mal das Manual zu den Fkt durch.

        Gruss

        tobi
        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


        • #5
          fgetcsv wird immer wieder vergessen zu erwähnen

          Kommentar


          • #6
            Original geschrieben von onemorenerd
            fgetcsv wird immer wieder vergessen zu erwähnen
            Ich dachte eben, dass der Lerneffekt beim Selberstricken höher ist

            Gruss

            tobi
            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


            • #7
              Danke für eure Hilfe.

              Ich hab mir das alles jetzt mal durchgelesen, aber für mein derzeitiges Wissen ist es glaub ich utopisch so ein Script selber zu schreiben. Gibt es nicht schon etwas in der Richtung, dass ich verwenden?

              Kommentar


              • #8
                Wieso utopisch ? Hat doch jeder mal klein angefangen...
                Also erstmal musst du die csv Datei einlesen
                PHP-Code:
                $datei 'pfad/name.csv';
                /*rgibt ein Array in dem jedes Element einer Zeile der Datei entspricht
                Zugriff mittels $inhalt[0] für Zeile 1 --> immer von der gewünschten Zeile eins abziehen, damit du den korrekten Array Index erhälst
                */
                $inhalt file($datei);
                // gesuchte Zeile 3 und Elemente 0,1 und 4 in txt Datei
                $temp explode(';',inhalt[2]);
                $schreiben $temp[0].' '.$temp[1].' '.$temp[4]."\r\n";
                $datei1 'meine.txt';
                $fp fopen($datei1,'a');
                fwrite($fp,$schreiben);
                fclose($fp); 
                Der Code ist nicht getestet. Aber so in der Art sollte es funzen

                Gruss

                tobi
                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


                • #9
                  Hi!

                  Also im Grunde funktioniert das Script ja schon gut. Ich hab es an meine Belange angepasst. Wenn ich die php-Datei aber öfter aufrufe, gibt er mir in der txt-Datei den gleichen Datensatz öfters aus. Woran kann das liegen?

                  Ich hab noch eine Frage. Ich möchte alle Datensätze ausgeben und nciht nur einen bestimmten. Muss ich das mit einer Schleife machen?

                  Dankeschön für eure Hilfe

                  Kommentar


                  • #10
                    Wenn ich die php-Datei aber öfter aufrufe, gibt er mir in der txt-Datei den gleichen Datensatz öfters aus. Woran kann das liegen?
                    Ich würde sagen works as designed
                    Schau dir mal die Parameter zu fopen() im Manual an (a steht für append sprich anhängen --> da wird nix überschrieben.
                    Ich möchte alle Datensätze ausgeben und nciht nur einen bestimmten. Muss ich das mit einer Schleife machen?
                    Ja das geht am besten mit einer Schleife
                    PHP-Code:
                    $temp = array();
                    $inhalt file($datei);
                    foreach(
                    $inhalt as $wert){
                        
                    $temp[] = explode(';',$wert);

                    $temp ist dann ein mehrdimensionaler Array. Der erste Index enspricht der
                    Zeile - 1 und die einzelnen Elemente werden über den 2. Index angesprochen ($temp[0][1] für das 2. Element der ersten CSV Zeile)

                    Gruss

                    tobi
                    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


                    • #11
                      Hi Tobi!

                      Also das mit dem fopen hab ich mir durchgelesen. Hab das 'a' mit dem 'w' ersetzt und es funktioniert einwandfrei. Allerdings hab ich noch nicht gerafft, wie ich das mit der Schleife mache. Mein Code sieht im Moment so aus

                      PHP-Code:
                      <?php
                      $datei 
                      'daten.csv';
                      $temp = array();
                      $inhalt file($datei);
                      foreach(
                      $inhalt as $wert){
                          
                      $temp[] = explode(';',$wert);
                      }
                      $schreiben $temp[1][2].' '.$temp[1][3].' '.$temp[1][4].' '.$temp[1][2]."\r\n";
                      $datei1 'test_3.txt';
                      $fp fopen($datei1,'w');
                      fwrite($fp,$schreiben);
                      fclose($fp);

                      ?>
                      Aber jetzt gibt er mir ja nur die Elemente der zweiten Zeile aus. Wie baue ich jetzt die Schleife ein? Hab gerade selber ein wenig rumprobiert, aber ich bekomme es leider nicht hin.

                      Kommentar


                      • #12
                        PHP-Code:
                        $tempo '';
                        foreach(
                        $inhalt as $wert){
                            
                        $temp[] = explode(';',$wert);
                        }
                        foreach(
                        $temp as $wert){
                            
                        $tempo .= implode(' ',$wert)."\r\n";

                        $tempo kannst du mittels fwrite in die Datei schreiben.

                        Gruss

                        tobi
                        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


                        • #13
                          Nochmal Tausend Danke, dass du mir so geduldig weiterhilfst. Leider stehe ich schon wieder auf dem Schlauch. Mein Script sieht jetzt wie folgt aus

                          PHP-Code:
                          <?php
                          $datei 
                          'daten.csv';
                          $tempo '';
                          $inhalt file($datei);
                          foreach(
                          $inhalt as $wert){
                              
                          $temp[] = explode(';',$wert);
                          }
                          foreach(
                          $temp as $wert){
                              
                          $tempo .= implode(';',$wert)."\r\n";
                          }
                          $schreiben $temp[1][2].' '.$temp[1][3].' '.$temp[1][4].' '.$temp[1][2]."\r\n";
                          $datei1 'test_3.txt';
                          $fp fopen($datei1,'w');
                          fwrite($fp,$schreiben);
                          fclose($fp);

                          ?>
                          Aber es funktioniert nicht. Muss ich $tempo noch bestimmen? $schreiben und $tempo stören die sich nicht beide?

                          Wo ist mein Denkfehler?
                          Hoffe du hast noch etwas geduld mit mir.

                          Kommentar


                          • #14
                            $tempo kannst du mittels fwrite in die Datei schreiben.
                            PHP-Code:
                            fwrite($fp,$schreiben); 
                            ist das dein denkfehler?

                            gruß
                            peter
                            Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
                            Meine Seite

                            Kommentar


                            • #15
                              Ich glaub nicht wirklich. Wenn ich nämlich

                              PHP-Code:
                              fwrite($fp,$tempo); 
                              schreibe, dann zeigt es mir alle Zeilen an. ABer ich möchte ja nur gewisse Spalten, die in $schreiben festgelegt sind, anzeigen lassen.
                              Und nun weiß ich nicht wie ich tempo mit Schreiben verbinden kann.

                              Kommentar

                              Lädt...
                              X