Datei/Array lesen bis

15/04/2009 - 15:06 von Helmut Schneider | Report spam
Hi,

Ich möchte eine Datei einlesen und den Text zwischen den Markern "## Start
Variables" und "## End Variables" durch einen anderen ersetzen. Bis zum
ersten Marker kann ich lesen, dann aber beisst es bei der Logik aus.

Text
Mehr Text
## Start Variables
Var 1
Var 2
Var 3
## End Variables
Noch
mehr Text

foreach (<FILE1>) {
if ("$_" ne "## Start Variables") {
push(@newArray, "$_");
} else {
last;
}
}

Wie muss ich weiter machen? Muss ich das Array wieder von vorne auslesen,
kann ich an der Stelle weiter machen? Ich hab es auch schon mit while...next
versucht, aber irgendwie stimmt auch die Verschachtelung nicht.

Danke und Gruß, Helmut

No Swen today, my love has gone away
My mailbox stands for lorn, a symbol of the dawn
 

Lesen sie die antworten

#1 Tim Landscheidt
15/04/2009 - 15:29 | Warnen spam
"Helmut Schneider" wrote:

Ich möchte eine Datei einlesen und den Text zwischen den
Markern "## Start Variables" und "## End Variables" durch
einen anderen ersetzen. Bis zum ersten Marker kann ich
lesen, dann aber beisst es bei der Logik aus.

Text
Mehr Text
## Start Variables
Var 1
Var 2
Var 3
## End Variables
Noch
mehr Text

foreach (<FILE1>) {
if ("$_" ne "## Start Variables") {
push(@newArray, "$_");
} else {
last;
}
}

Wie muss ich weiter machen? Muss ich das Array wieder von
vorne auslesen, kann ich an der Stelle weiter machen? Ich
hab es auch schon mit while...next versucht, aber irgendwie
stimmt auch die Verschachtelung nicht.



Wofür soll denn das @newArray dienen? Falls Du nur einen
(mehrzeiligen) Text in einer Datei immer durch einen anderen
ersetzen willst, kannst Du so etwas wie "perl -i -0777 -pwe
's/ZEILE1ZEILE2ZEILE3/NEUEZEILE1NEUEZEILE2NEUEZEILE3/g;'"
benutzen.

Ansonsten kann der skalare ..-Operator sein, was Du
suchst:

| if (/^## Start Variables$/../^## End Variables$/)
| { print ("Obacht: Wird für *jede* Zeile innerhalb der Marker einschließlich aufgerufen!"); }
| else
| { push (@newArray, $_); }

Tim

Ähnliche fragen