Ich habe ja hier schon einmal über die Flip-Flop-Funktion in Perl geschrieben. Damals ging es um das Durchsuchen eines Arrays.
Die Tage hatte ich ein ähnliches Problem, diesmal allerdings mit einer Datei.
In dieser Datei lagen einige Daten, auf die ab und an mal zugegriffen werden soll, allerdings nur lesend. Das Beschreiben oder Ändern war nicht von Nöten.
Die Daten hatten die Form
Bezeichner
daten
daten
daten
---
Prima, dachte ich, da versuchst Du mal das Flip-Flop.
Wir erinnern uns: Das Flipflop holt ja nur die Daten, die zwischen dem Bezeichner und dem --- liegen.
Also flugs den Code geschrieben:
open ($in,'<test.txt') || die ("Datei existiert nicht");
while (<$in>){
if (/fred/ .. /\-\-\-/) { push (@ergebnis,$_);
} pop @ergebnis;
print@ergebnis;
Die Datei wird also geöffnet und zeilenweise nach dem gesuchten Bezeichner abgesucht. Die gefundenen Werte stehen dann im Array @ergebnis.
Funktioniert also auch mit Dateien. Aber: Wer hier so ein bißchen gelesen hat, erkennt vielleicht, daß die Datei in diesem Script IMMER KOMPLETT durchsucht wird, auch wenn der Wert schon gefunden wurde.
Alles was hinter den gesuchten Werten steht, könnte man jedoch weglassen, da das je nach Textfile einiges an Rechnerzeit sparen kann, und man will ja die CPU ein bißchen schonen...
Also das Script angepaßt, und nun sieht es folgendermaßen aus:
open ($in,'<test.txt') || die ("Datei existiert nicht");
while (<$in>){
if (/fred/ .. /\-\-\-/) { push (@ergebnis,$_);
$found=1;
}
else
{last if $found==1;}