Ankündigung

Einklappen
Keine Ankündigung bisher.

Werte einer Textdatei mit file() und explode() gezielt ausgeben

Einklappen

Neue Werbung 2019

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

  • Werte einer Textdatei mit file() und explode() gezielt ausgeben

    Ich habe eine .txt Datei, deren durch ":" getrennte Werte ich gerne gezielt ausgeben möchte:

    So sieht mein .txt aus:
    Code:
    Wert eins1:Wert eins2:Wert eins3:Wert eins4:Wert eins5:Wert eins6
    Wert zwei1:Wert zwei2:Wert zwei3:Wert zwei4:Wert zwei5:Wert zwei6
    Wert drei1:Wert drei2:Wert drei3:Wert drei4:Wert drei5:Wert drei6
    PHP-Code:
    <?php

    $datei 
    file("text.txt");

    foreach(
    $datei as $inhalt => $wert)
    {
    $file[$inhalt] = explode(":",$wert);}

    foreach(
    $file as $inhalt => $wert)
    {echo 
    "<p>".$wert[1]."</p>";}

    ?>
    So sieht meine Ausgabe dann aus:

    Code:
    Wert eins2
    Wert zwei2
    Wert drei2
    Jetzt ist das nicht ganz das was ich möchte. Denn ich möchte gerne jeden einzelnen Wert gezielt ansprechen können. In diesem Beispiel sollte also nur das zweite Wort der ersten Zeile, also nur "Wert eins2" ausgegeben werden. Was mache ich falsch?


  • #2
    In Summe ? Du brichst dir mit unausgegorenen Dateiformaten die Finger.

    Lösung: JSON. Es sei denn es bleibt keine andere Wahl und man hat keinen Einfluss auf das Format.
    [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

    Kommentar


    • #3
      Wie meinst du das? Ich habe leider keinen Einfluss auf die Formatierung der Text Datei. Die bekomme ich so. Möchte diese möglichst unkompliziert weiterverarbeiten. Ich brauche jedoch nur bestimmte und nicht alle Werte. Diese möchte ich dann in einen animieren news-ticker darstellen. Damit das so klappt, wie ich mir es vorstelle muss ich es hinbekommen jeden einzelne Wert gezielt zb mittels echo ausgeben zu können. Nur wie?

      Kommentar


      • #4
        Du greifst falsch zu. Füge mal hinter deiner ersten Schleife ein
        PHP-Code:
        var_dump($file); 
        ein, schau dir die Ausgabe an und beschäftige dich mit den Grundlagen von Arrays.
        Dann ist es fast immer empfehlenswert, file mit diesen Flags
        PHP-Code:
        $datei file("text.txt",FILE_IGNORE_NEW_LINES FILE_SKIP_EMPTY_LINES); 
        zu benutzten, damit die keinen Ärger mit Zeilenumbrüchen und Leerzeilen hast.
        PHP-Klassen auf github

        Kommentar


        • #5
          Evtl. kannst Du Dir Dein Array besser vorbereiten:
          PHP-Code:
          $aValues array_map(
                  function ( 
          $val ) {
                      return 
          explode':'$val );
                  },
                  
          file'text.txt'FILE_IGNORE_NEW_LINES|FILE_SKIP_EMPTY_LINES )
              ); 
          so hättest Du pro Zeile alle Werte als Array-Elemente und kannst nach dem Schema drauf zugreifen:
          Code:
          aValues[zeile][spalte]
          Competence-Center -> Enjoy the Informatrix
          PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

          Kommentar


          • #6
            Das klingt super so, aber klappt bei mir leider nicht. Bekomme keine Ausgabe

            PHP-Code:
            <?php
            $aValues 
            array_map(
                    function ( 
            $val ) {
                        return 
            explode':'$val );
                    },
                    
            file'text.txt'FILE_IGNORE_NEW_LINES|FILE_SKIP_EMPTY_LINES )
                
                );  

            echo 
            aValues[1][1];  

            ?>

            Kommentar


            • #7
              PHP-Code:
              $file = new SplFileObject("text.txt");
              $file->setFlags(SplFileObject::READ_CSV);
              $file->setCsvControl(':');
              foreach(
              $file AS $row) {
                  echo 
              $row[1];

              Kommentar


              • #8
                PHP-Code:
                $file = new SplFileObject("text.txt");
                $file->setFlags(SplFileObject::READ_CSV);
                $file->setCsvControl(':');
                foreach(
                $file AS $row) {
                    echo 
                $row[1];

                Gib mir die ganze Zeile aus, wie kann ich damit nur einzelne Daten einer Zeile ausgeben?

                Kommentar


                • #9
                  Bitte beschäftige dich mal mit Array's, das sind Grundlagen! Einige Tipps dazu: http://www.php-faq.de/ch/ch-arrays.html
                  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
                    Danke für den Link. Ich muss also ein multidimensionales Array erzeugen, habe das mal so versucht. Klappt aber nicht. Ich möchte das wirklich verstehen, aber irgendwie klappts nicht.

                    PHP-Code:
                    <?php

                    // Datei önnen

                    $datei file'text.txt'FILE_IGNORE_NEW_LINES|FILE_SKIP_EMPTY_LINES ); 

                    // Array nach Zeilen-Umbruch erzeugen (enthält alle Zeilen)

                    $datei explodePHP_EOL$datei ); 
                       
                    $zeilen  = array(); 


                    // Array erzeugen, Doppelpunkt als Trenner 

                      
                    foreach( $zeilen as $zeile ) { 
                        
                    $zeile array_mapexplode":"$zeile ) ); 

                      }

                    print_r$datei[2][2] );
                    ?>

                    Kommentar


                    • #11
                      Mit der Funktion file bekommst du die Datei Zeile für Zeile in ein Array. Dann gehst du mit foreach das Array durch und hast dann in der Schleife jeweils eine Zeile am Wickel. Diese Zeile splittest du mit explode und hast somit ein Array mit den einzelnen Werten. Je nachdem, welchen Wert du haben willst, sollte in dem Array der Index 0 bis 5 das richtige Ergebnis liefern.

                      PHP-Code:
                      <?php

                          $lines 
                      file("test.txt");
                          
                          
                      $indexForOutput 0;
                          
                          echo 
                      "Index = $indexForOutput<br>\n";
                          
                          foreach (
                      $lines as $line)
                          {
                             
                      $values explode(":"$line);
                             echo 
                      $values[$indexForOutput] . "<br>\n";
                          }
                          
                          
                      $indexForOutput 1;
                          
                          echo 
                      "<br>Index = $indexForOutput<br>\n";
                          
                          foreach (
                      $lines as $line)
                          {
                             
                      $values explode(":"$line);
                             echo 
                      $values[$indexForOutput] . "<br>\n";
                          }
                          
                          
                      $indexForOutput 2;
                          
                          echo 
                      "<br>Index = $indexForOutput<br>\n";    
                          
                          foreach (
                      $lines as $line)
                          {
                             
                      $values explode(":"$line);
                             echo 
                      $values[$indexForOutput] . "<br>\n";
                          }
                          
                          
                      $indexForOutput 3;
                          
                          echo 
                      "<br>Index = $indexForOutput<br>\n";
                          
                          foreach (
                      $lines as $line)
                          {
                             
                      $values explode(":"$line);
                             echo 
                      $values[$indexForOutput] . "<br>\n";
                          }
                          
                          
                      $indexForOutput 4;
                          
                          echo 
                      "<br>Index = $indexForOutput<br>\n";
                          
                          foreach (
                      $lines as $line)
                          {
                             
                      $values explode(":"$line);
                             echo 
                      $values[$indexForOutput] . "<br>\n";
                          }
                          
                          
                      $indexForOutput 5;
                          
                          echo 
                      "<br>Index = $indexForOutput<br>\n";    
                          
                          foreach (
                      $lines as $line)
                          {
                             
                      $values explode(":"$line);
                             echo 
                      $values[$indexForOutput] . "<br>\n";
                          }
                      ?>
                      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


                      • #12
                        Danke, das ist soweit schon sehr verständtlich. Allerdings kapier ich nicht wie ich nun wirklich nur z.b. einen bestimmten Wert ausgebe.

                        PHP-Code:
                        echo $values[2][1]; 
                        Sollte doch eigentlich nun nur noch "Wert eins3" ausgeben?

                        Kommentar


                        • #13
                          ...

                          Kommentar


                          • #14
                            $values ist doch bei meinem Beispiel kein zweidimensionales Array! Da sind wir wieder bei Posting #9
                            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


                            • #15
                              Hast du mal das gemacht was ich bereits heute früh im Beitrag #4 geschrieben habe?
                              Da hast du bereits ein mehrdimensionales Array!
                              PHP-Klassen auf github

                              Kommentar

                              Lädt...
                              X