aus <INPUT> gelesene Zeile wieder zurückschieben

- perl
Hi,
ich lese per
while (<INPUT>)
{
#whatever
}
Zeilen aus einem File und verarbeite sie.
Klappt wunderbar.
Das soll solange geschehen, bis die Zeile eine bestimmte Bedingung erfüllt. Auch noch kein Problem:
while (<INPUT>)
{
last if (m/endeersterabschnitt/);
#whatever
}
So, jetzt soll aber in einer zweiten Schleife der Rest des Files verarbeitet werden.
while (<INPUT>)
{
last if (m/endeErsterAbschnitt/);
#whatever, 1st part
}
while (<INPUT>)
{
#whatever, 2nd part
}
Funktioniert im Prinzip ja auch. Die Experten unter Euch werden aber bemerkt haben, daß eine Zeile nicht bearbeitet wird - nämlich genau die, die die Bedingung "endeErsterAbschnitt" erfüllt.
Sollte die mit #whatever, 1st part bearbeitet werden, wär das ja auch kein Problem - einfach Verarbeitung und Abbruch der Schleife austauschen.
Soll sie aber nicht - die muß mit #whatever, 2nd part beackert werden.
Ok, das ginge ja auch noch - wenn es in Perl sowas wie do { } while gäbe.
Jetzt kommt's aber noch dicker:
Die erste Schleife wird nicht immer ausgeführt, sondern nur, wenn eine bestimmte Bedingung erfüllt ist.
Das gesamte Konstrukt sieht also so aus:
if (bedingung)
{
while (<INPUT>)
{
last if (m/endeErsterAbschnitt/);
#whatever, 1st part
}
###
}
while (<INPUT>)
{
#whatever, 2nd part
}
An der mit ### markierten Stelle müßte ich jetzt eigentlich die bereits gelesene Zeile wieder in INPUT zurückschieben können, so daß das nachfolgende <INPUT> sie noch findet.
Geht das irgendwie? Wenn ja, wie?
TIA,
cu,
Andreas
bin mir jetzt auch nicht ganz sicher, aber das sollte mit
tell
&
seek
gehen..
mit tell die position des dateizeigers vor dem 1.part ermitteln
und mit seek im 2. neu setzen...
Gruß Markus
Hallo,
vielleicht hilft dir das weiter:
if (1)
{
while (<DATA>)
{
last if /3/;
print;
}
}
print "--\n";
foreach ($_, <DATA>)
{
next unless defined;
print;
}
__DATA__
line1
line2
line3
line4
line5
für 0 ergibt es:
--
line1
line2
line3
line4
für 1:
line1
line2
--
line3
line4
line5
gruss
für 1 und if /6/:
line1
line2
line3
line4
line5--
gruss
Tag Eternius.
if (1)
[...]
Wozu dieses if? Es funktioniert doch auch ohne.
Siechfred
Hi,
if (1)
[...]Wozu dieses if? Es funktioniert doch auch ohne.
Das ist symbolisch für die Bedingung, unter der die erste While-Schleife stattfindet. Siehe Ursprungsposting.
cu,
Andreas
Hi,
vielleicht hilft dir das weiter:
if (1)
{
while (<DATA>)
{
last if /3/;
print;
}
}
print "--\n";
foreach ($_, <DATA>)
{
next unless defined;
print;
}
Danke.
Das tut zwar das, was ich will - aber irgendwie find ich das nicht so schön ...
cu,
Andreas
--
[Warum nennt sich Andreas hier MudGuard?](http://www.Mud-Guard.de/)
[Schreinerei Waechter](http://www.schreinerei-waechter.de/)
Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
Hallo,
Danke.
Das tut zwar das, was ich will - aber irgendwie find ich das nicht so schön ...
war schön eine Anforderung ;)
gruss
Hi,
Das tut zwar das, was ich will - aber irgendwie find ich das nicht so schön ...
war schön eine Anforderung ;)
nicht explizit, nur implizit ;-)
cu,
Andreas
Hallo,
Das tut zwar das, was ich will - aber irgendwie find ich das nicht so schön ...
war schön eine Anforderung ;)
nicht explizit, nur implizit ;-)
Ah! Innere Schönheit also.
Aber wer wird die in einem Perl-Script denn überhaupt bemerken?
viele Grüße ;-))
Axel