andynail: jede 5. Zeile aus einer Textdatei auslesen

Hallo zusammen

da Visual Basic auch einen Zugriff auf bestimmte Daten haben muß will ich diese in einer Textdatei speichern.

Und jetzt brauch ich für eine bestimmte Darstellung jeweils nur die 5x Zeile.

Ich finde im Web immer nur alle Zeilen auslesen zu können oder nur eine bestimmte Zeile auszulesen. Doch weis ich ja nicht wievile Zeilen diese Datei enthält.

Danke gruß Andreas

  1. Hallo,

    da Visual Basic auch einen Zugriff auf bestimmte Daten haben muß will ich diese in einer Textdatei speichern.

    wenn diese Daten bereits in einer Textdatei vorliegen, warum willst Du eine weitere Textdatei erzeugen?

    Und jetzt brauch ich für eine bestimmte Darstellung jeweils nur die 5x Zeile.

    sind Deine Zeilen alle gleich lang (damit meine ich gleiche Anzahl von Bytes, nicht Zeichen) oder kann die Länge der Zeilen variieren?

    Ich finde im Web immer nur alle Zeilen auslesen zu können oder nur eine bestimmte Zeile auszulesen. Doch weis ich ja nicht wievile Zeilen diese Datei enthält.

    Im Normalfall, d.h. Zeilenlänge ist variabel:
    Lies der Reihe nach die Zeilen ein, verwerfe jeweils die vier, die Du nicht brauchst und speichere nur die eine die Du benötigst.
    Falls Du kein Problem damit hast, die ganze Datei auf einen Rutsch zu lesen:
    Lies die Datei mit file() in ein Array ein und iteriere mit einer for-Schleife mit dem Startwert, der Dir die erste gewünschte Zeile liefert und einer Schrittweite von 5 über dieses Array, bis Du am Ende des Arrays angelangt bist. Speichere die entsprechenden Zeilen in Deiner Zieldatei ab.

    Freundliche Grüße

    Vinzenz

    1. Hallo

      ich bekomme hier noch Überhitze. Denn es will nix funktionieren. Ich bräuchte dringend ein Beispiel. Nach mehrmaligen Änderungen ist der Stand:

      $datei = file("Bereiche.txt");  
      $anzahl = count($datei);  
        
      foreach ($datei as $zeile) {  
        $eintrag[] = explode("|-|", $zeile);  
      }  
      echo "$eintrag[2]";  
      
      

      Doch dann bekomme ich als Rückgabewert einfaches Arry. Und wenn ich die Datei mit fopen öffne und dann eine for Schliefe for ($i=0; $i<Anzahl; $i+=5) durchlaufe gibt der mir auch immer nur die ersten 5 aus. Gesamtzahl der Zeilen beträgt 35.

      Wie solls also bitte aussehen?

      Danke gruß Andreas

      1. Hello,

        $datei = file("Bereiche.txt");

        $anzahl = count($datei);

        foreach ($datei as $zeile) {
          $eintrag[] = explode("|-|", $zeile);
        }
        echo "$eintrag[2]";

        
        >   
        >   
        > Doch dann bekomme ich als Rückgabewert einfaches Arry. Und wenn ich die Datei mit fopen öffne und dann eine for Schliefe `for ($i=0; $i<Anzahl; $i+=5)`{:.language-php} durchlaufe gibt der mir auch immer nur die ersten 5 aus. Gesamtzahl der Zeilen beträgt 35.  
        >   
        > Wie solls also bitte aussehen?  
          
        Wenn Du die Aufgabe hättest, auf einer Landstraße jeden fünften Begrenzungspfahl rot anzustreichen, was machst Du dann mit dem 1., 2., 3., 4., 6., 7., 8., 9., 11., usw?  
        Du gehst einfach daran vorbei...  
          
        Genauso muss das Deine Schleife dann auch machen. Sie muss mitzählen und mur jeden 5. beachten.  
          
            $zeile\_nr = 0;  
            foreach($datei as $key => $zeile)  
            {  
                $zeile\_nr ++;  
          
                if ($zeile\_nr == 5)  
                {  
                    ## Zeile rot anmalen  
                    ## ...  
                    ## Zähler zurücksetzen  
                    $zeile\_nr = 0;  
                }  
            }  
          
          
          
        Da die Funktion file() aber bereits einen geschlossenen Nummernkreis von 0 .. (n-1) als Keys in die Arrayelemente einsetzt, kannst Du auch gleich diesen Schlüssel benutzten:  
          
            foreach($datei as $key => $zeile)  
            {  
                if (($key + 1) % 5  == 0)     ## Berechnung mit dem Modulo-Operator  
                {  
                    ## Zeile rot anmalen  
                    ## ...  
                }  
            }  
          
          
        Ich hoffe, dass es so klarer geworden ist.  
          
          
          
          
        Liebe Grüße aus dem schönen Oberharz  
          
          
        Tom vom Berg  
        ![](http://selfhtml.bitworks.de/Virencheck.gif)  
          
        
        -- 
        Nur selber lernen macht schlau  
        <http://bergpost.annerschbarrich.de>  
          
        
        
        1. Hallo Thom

          und ja so hab ichs jetzt gemacht. Es wird dann jalt die komplette Datei eingelesen und ich dachte dafür gäbe es auch was. Aber es funktioniert jetzt und ich bin froh. Vielen Dank dafür.

          Gruß Andreas

          1. Nachdem das Programm/Dateisystem nicht weiß wo die 5. Zeile anfängt, muss alles gelesen werden. Höchstens wenn die Zeilen gleich lang wären, könnte man ausrechnen wohin man als nächstes springen will. Aber ob sich der Aufwand lohnt? Viel schneller wirds wahrscheinlich nicht werden, eher langsamer weil auf einen Rutsch alles einlesen ist schneller als stückchenweise.