Jürgen Ogens: Dateizeiger an eine bestimmte Zeile setzen

Guten Morgen

Ich grübele gerade über die Frage, ob es einen PHP-Befehl dafür gibt, den Dateizeiger an den Anfang einer bestimmten Zeile zu setzen. Mir fällt keiner ein. fseek() ist für sowas ja nicht geeignet.

Ideen? Ich würde es euch danken!

Gruß

Jürgen

  1. Hi,

    Ich grübele gerade über die Frage, ob es einen PHP-Befehl dafür gibt, den Dateizeiger an den Anfang einer bestimmten Zeile zu setzen.

    der Begriff "Zeile" ist nichts, was Deinem Filesystem geläufig ist. Definiere, wie viele Zeichen eine Zeile hat, dann kommst Du weiter.

    fseek() ist für sowas ja nicht geeignet.

    Doch. Sofern Du die Zeilenlänge kennst.

    Cheatah

    --
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
  2. Moin Moin !

    Wenn Deine Zeilen alle gleich lang sind:

    fseek($zeilennummer*$zeilenlänge)

    Sonst mußt Du mit ftell (heißt das so in PHP?) die Positionen jedes Zeilenanfangs speichern (z.B. in einem Array) und dann mit fseek dorthin gehen: fseek($zeilenoffsets[$zeilennummer]).

    Steht übrigens mehrfach im Archiv.

    Alexander

    --
    Nein, ich beantworte keine Fragen per eMail. Dafür ist das Forum da.
    Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so!"
    1. Hallo!

      Sonst mußt Du mit ftell (heißt das so in PHP?) die Positionen jedes Zeilenanfangs speichern (z.B. in einem Array) und dann mit fseek dorthin gehen: fseek($zeilenoffsets[$zeilennummer]).

      Wieso sollte man das tun? Wenn ich eh schon dabei bin die Datei durchzugehen, dann kann ich doch auch direkt den pointer setzen, wieso das mit dem Array?
      Wenn man dann eine bestimmte Position hat kann man doch nur von da aus lesen, nicht schreiben, oder(wie soll das auch funktionieren!)?

      $line2find = 20;
      $fp = fopen("file.txt", "r");
      for($line=1; $line > $line2find; $line++) {
         fgets($fp);
      }
      echo ftell($fp);

      Nur was habe ich jetzt davon ? ;-)
      Was kann man jetzt mit der Zahl anfangen?

      Grüße
      Andreas

      1. Moin Moin !

        Sonst mußt Du mit ftell (heißt das so in PHP?) die Positionen jedes Zeilenanfangs speichern (z.B. in einem Array) und dann mit fseek dorthin gehen: fseek($zeilenoffsets[$zeilennummer]).
        Wieso sollte man das tun?
        Nur was habe ich jetzt davon ? ;-)

        OK, vielleicht etwas über das Ziel hinausgeschossen. Damit kannst Du beliebig Zeilen in der Datei anspringen, ohne immer wieder von vorne Zeilen zählen zu müssen.

        Alexander

        --
        Nein, ich beantworte keine Fragen per eMail. Dafür ist das Forum da.
        Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so!"
  3. Ich danke euch für eure Hilfe!
    Schade, vielleicht kommt ja so ein Befehl nochmal...

    Grüße

    Jürgen

    1. Hi!

      Schade, vielleicht kommt ja so ein Befehl nochmal...

      Mich würde sehr interessieren wofür Du das in diesem Fall brauchen würdest. Ich glaube nicht das sowas jemals kommt(vor allem da ich nicht wirklich den Nutzen verstehe), aber vor allem, da PHP sowieso jedes Zeichen einzelnd durchgehen muss, da es nicht weiß an welcher Stelle so ein Umbruch kommt, und ein Umbruch ist ja im Prinzip ein Zeichen wie jedes andere.

      Grüße
      Andreas

      1. Mich würde sehr interessieren wofür Du das in diesem Fall brauchen würdest.

        Wenn ich z.B. ein Gästebuch habe, dessen Daten in einer normalen Textdatei gespeichert werden. Pro Eintrag wird eine Zeile benutzt. Will ich nun z.B. Eintrag 7 bearbeiten, so hätte ich durch solch einen Befehl sagen können: "Gehe zum Eintrag 7". Jetzt muss ich jede Zeile einzel durchsuchen, bis der Eintrag sieben gefunden ist.

        Grüße

        Jürgen