Ankündigung

Einklappen
Keine Ankündigung bisher.

Daten aus TXT auslesen

Einklappen

Neue Werbung 2019

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

  • Daten aus TXT auslesen

    Guten Morgen,

    ich habe mittels PHP (mit file()) eine TXT-Datei ausgelesen.
    In dieser Datei befindet sich pro Zeile beispielsweise verschiedene Bestellungen. Diese sind nun im Array "file".
    Wenn ich nun z.B. file[1] ausgebe, erhalte ich Daten zur Bestellung wie folgt ausgegeben:
    Code:
    "Bestellnummer","Datum","Lieferanten-Nr","Kürzel","Währung","Lieferant"
    Wie bekomm ich nun die einzelnen Felder in eigene Variablen?
    Beispielsweise die Bestellnummer dieser Bestellung in eine Variable "Bestell_Nr" oder die Lieferanten-Nr in die Variable "Lieferanten_Nr"?


  • #2
    Das sieht mir nach CSV aus. Da empfiehlt sich fopen + fgetcsv.

    - http://php.net/manual/en/function.fgetcsv.php

    (Im Zweifel aber immer sicherstellen (Doku lesen, nachfragen, …), um welches Format es sich bei Daten handelt.)

    Kommentar


    • #3
      Zitat von mermshaus Beitrag anzeigen
      Das sieht mir nach CSV aus. Da empfiehlt sich fopen + fgetcsv.

      - http://php.net/manual/en/function.fgetcsv.php

      (Im Zweifel aber immer sicherstellen (Doku lesen, nachfragen, …), um welches Format es sich bei Daten handelt.)
      Nein ist keine CSV-Datei sondern eine TXT-Datei, wie oben schon erwähnt.

      Kommentar


      • #4
        siehe explode()
        Current Projects: http://www.welten-buch.de, http://neu.zooadoo.de

        Kommentar


        • #5
          Zitat von Geromel Beitrag anzeigen
          siehe explode()
          Also ich habe das jetzt hinbekommen mit:

          PHP-Code:
          /* Daten auslesen */
          $data 'input/bestellungen.txt';
          $file file($data);

          /* Eine Bestellung nehmen und die Bestelldaten aufteilen */
          $aufgeteilt $file[0];
          $array explode(",",$aufgeteilt);
                  
          /* Anführungszeichen bei Bestelldaten entfernen */
          $laenge strlen($array[0]);
          $laenge $laenge 2;
          $Bestell_Nr substr($array[0], $laenge);
          echo 
          "<br /> $Bestell_Nr"
          Nun brauch ich dafür nur noch eine Schleife für alle Elemente im Array damit dort das erste und letzte Zeichen entfernt wird, habt ihr da eine Idee?

          Kommentar


          • #6
            Zitat von muahaha Beitrag anzeigen
            Nein ist keine CSV-Datei sondern eine TXT-Datei, wie oben schon erwähnt.
            Öhm... Du weiß schon wofür CSV steht? Der Inhalt/Aufbau/Format deiner Plaintext-Datei sieht nämlich sehr nach einer Textdatei im CSV-Format aus. Wollte es nur erwähnt haben.

            Schleife für alle Elemente im Array damit dort das erste und letzte Zeichen entfernt wird
            Dafür hätte fgetcsv den enclousure Parameter, ansonsten zB array_walk() und trim() als Möglichkeit etc.. oder halt mit foreach zu Fuß.

            LG
            Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
            PHP.de Wissenssammlung | Kein Support per PN

            Kommentar


            • #7
              Nun brauch ich dafür nur noch eine Schleife für alle Elemente im Array damit dort das erste und letzte Zeichen entfernt wird, habt ihr da eine Idee?
              Du brauchst vor allem eine Lösung für den Grund, warum die einzelnen Einträge in Anführungszeichen stehen.

              Innnerhalb eines Felds könnte das Separator-Zeichen (Komma) vorkommen. Zudem könnte dort auch noch das Begrenzerzeichen (Anführungszeichen) selbst vorkommen, das dann in irgendeiner Weise escapet vorliegen muss.

              Es ergibt generell einfach wenig Sinn, mit Daten zu arbeiten, deren Format (und Zeichensatz/Kodierung) man nicht vollständig kennt.

              Hier ist das Format halt vermutlich CSV, auch wenn die Endung *.txt lautet.

              - https://de.wikipedia.org/wiki/CSV_%28Dateiformat%29

              Kommentar


              • #8
                Okey, zum Thema csv-Format --> da hab ich wohl mal wieder etwas dazugelernt!
                Aber so ganz steige ich bei fgetcsv() nicht durch.

                Ich habe es jetzt irgendwie hinbekommen, aber ich denke dass das nicht ganz "sauber" ist.

                PHP-Code:
                $data 'input/bestellungen.txt';
                $file file($data);

                $aufgeteilt $file[0];    /* Eine Bestellung nehmen */
                $array explode('","'$aufgeteilt); /* Daten in Array aufteilen */
                        
                $laenge strlen($array[0]);
                $laenge $laenge 1;
                $array[0] = substr($array[0], $laenge); /* Anführungszeichen bei ersten entfernen */
                $laenge strlen($array[11]);
                $array[11] = substr($array[11], 08); /* Anführungszeichen bei letzen entfernen 
                Grüße!

                Kommentar


                • #9
                  Ungetestet
                  PHP-Code:
                  <?php

                     $filename 
                  'input/bestellungen.txt'// Dateiname
                     
                  $values file($filename);            // Datei in Array lesen

                     
                  foreach($values as $value)            // Schleife über Array
                     
                  {
                        
                  $value substr($value,1);         // erstes Zeichen entfernen
                        
                  $value substr($value,0,-1);      // letztes Zeichen entfernen
                        
                  $data  explode ('","'$value);  // Daten zerlegen
                        
                  print_r($data);                    // Daten ausgeben
                     
                  }
                  ?>
                  Die Deutsche Rechtschreibung ist Freeware! Du darfst sie kostenlos nutzen, allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

                  Kommentar


                  • #10
                    Oder in kurz
                    PHP-Code:
                       $filename 'input/bestellungen.txt'// Dateiname
                       
                    $values file($filename);            // Datei in Array lesen

                       
                    foreach($values as $value)            // Schleife über Array
                       
                    {
                          
                    $data str_getcsv($value); 
                       } 
                    Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                    Kommentar


                    • #11
                      Das CSV-Format gestattet Zeilenumbrüche innerhalb von Feldern. Deshalb ist file keine Option.

                      (Edit: Na ja, wobei es da generell schon so eine Sache ist, von einem definierten Format zu sprechen… Die Spezifikation scheint auch eher das zu beschreiben, was Leute tun. )

                      PHP-Code:
                      <?php

                      function getData($path)
                      {
                          
                      $lines = array();

                          
                      $stream fopen($path'rb');

                          
                      $keys = array(
                              
                      "Bestellnummer""Datum""Lieferanten-Nr",
                              
                      "Kürzel""Währung""Lieferant"
                          
                      );

                          while ((
                      $data fgetcsv($stream)) !== false) {
                              
                      $lines[] = array_combine($keys$data);
                          }

                          
                      fclose($stream);

                          return 
                      $lines;
                      }

                      $path __DIR__ '/muahaha.txt';
                      $data getData($path);

                      var_dump($data);

                      Kommentar


                      • #12
                        Zitat von mermshaus Beitrag anzeigen
                        Das CSV-Format gestattet Zeilenumbrüche innerhalb von Feldern.
                        Da hast du mir erstmal ein Schreck eingejagt. SplFileObject verkraftet das aber auch, hab ich gleich probiert.

                        Bei den CSV-Dateien sehe ich häufig, das die erste Zeile die Spaltenüberschriften enthält. Hier mal ein Muster, welches auch diese Variante erschlägt:

                        PHP-Code:
                        <?php
                        $fileName 
                        'meinedatei.csv';

                        $file = new SplFileObject($fileName'r+');

                        $file->setFlags(SplFileObject::READ_CSV |
                                        
                        SplFileObject::SKIP_EMPTY |
                                        
                        SplFileObject::DROP_NEW_LINE);

                        //wenn anderes Zeichen als Komma benutzt wird
                        $file->setCsvControl(';');

                        //zweidimensionales Array $data erstellen
                        $data iterator_to_array($file);
                        unset(
                        $file);

                        //wenn erste Zeile die Spaltenüberschriften enthält, diese holen und $data verkürzen
                        //alternativ $title = array("Titel_spalte1",...
                        $titles array_shift($data);

                        //wenn Spaltenüberschriften als Key gewünscht sind, diese zufügen
                        $data array_map(
                          function(
                        $line) use($titles){
                            return 
                        array_combine($titles,$line);
                          },
                          
                        $data
                        );

                        //Testausgabe
                        var_dump($data);
                        LG jspit
                        PHP-Klassen auf github

                        Kommentar

                        Lädt...
                        X