Hallo zusammen,
ein perl-Skript öffnet eine Datei mit Lesezugriff (entweder explizit, oder das Skript ist ein Einzeiler und wird mit "perl -e '...' DATEI" in der Shell ausgeführt).
Nun kann ich mit der Konstruktion
wunderbar die Datei zeilenweise lesen und verarbeiten, auch einzelne Zeilen gezielt überspringen.
Wie aber kann ich, ohne alle Zeilen lesen zu müssen, in der Datei navigieren?
Ich denke dabei etwa an Aktionen der folgenden Typen:
Alle diese Aufgaben kann man natürlich mit der zeilenweisen Leseschleife nachbauen.
Das ist aber u.U. extrem ineffizient; für die erste Aufgabe etwa müsste ich wieder 324 Zeile lesen, zählen und ignorieren (O
Operationen), nur um einen bestimmten Zugriff zu finden (sollte O(1) sein).
Ich habe inzwischen einiges Material zum Dateizugriff in perl gelesen und ausprobiert, aber nichts gefunden. Irgendwie scheinen diese Überlegungen kaum eine Rolle zu spielen.
Könnt Ihr mir dabei weiterhelfen?
Vielen Dank und viele Grüße!
ein perl-Skript öffnet eine Datei mit Lesezugriff (entweder explizit, oder das Skript ist ein Einzeiler und wird mit "perl -e '...' DATEI" in der Shell ausgeführt).
Nun kann ich mit der Konstruktion
Code:
while (<>) {...}
wunderbar die Datei zeilenweise lesen und verarbeiten, auch einzelne Zeilen gezielt überspringen.
Wie aber kann ich, ohne alle Zeilen lesen zu müssen, in der Datei navigieren?
Ich denke dabei etwa an Aktionen der folgenden Typen:
- Gehe zu Zeile 324 (d.h. Lade diese Zeile nach $_ und ermögliche die Fortsetzung des zeilenweisen Lesens).
- Gehe - von der aktuell gelesenen Zeile aus - 5 Zeilen nach oben (und erlaube das vorwärts Weiterlesen von dort).
- Gehe in die 185.-letzte Zeiie.
Alle diese Aufgaben kann man natürlich mit der zeilenweisen Leseschleife nachbauen.
Das ist aber u.U. extrem ineffizient; für die erste Aufgabe etwa müsste ich wieder 324 Zeile lesen, zählen und ignorieren (O
Ich habe inzwischen einiges Material zum Dateizugriff in perl gelesen und ausprobiert, aber nichts gefunden. Irgendwie scheinen diese Überlegungen kaum eine Rolle zu spielen.
Könnt Ihr mir dabei weiterhelfen?
Vielen Dank und viele Grüße!