Perl und Dateibearbeitungen

Hallo!!!

Ich habe da eine Frage, welche das lesen und schreiben in Dateien betrifft:

 $ant\_art\_nr = 5;
 if(open(BETLIST, "+)
 {my @gesplittert = split(/\#/,$\_);
 my $akt\_bet\_nr = $gesplittert[8];
 if($akt\_bet\_nr == $ant\_art\_nr)
 {print BETLIST 'Ueberschrieben';
 last();
 }
 }
 close(BETLIST);
 }

… In diesem Programmausschnitt müsste doch eigendlich, sofern

$akt\_bet\_nr

gleich 5 ist die aktuelle Zeile der Datei überschrieben werden, oder wo liege ich falsch?

Danke im Voraus, LEther

Hallo auch,

Ich habe da eine Frage, welche das lesen und schreiben in
Dateien betrifft:

$ant_art_nr = 5;
if(open(BETLIST, "+)
{my @gesplittert = split(/#/,$_);
my $akt_bet_nr = $gesplittert[8];
if($akt_bet_nr == $ant_art_nr)
{print BETLIST ‚Ueberschrieben‘;
last();
}
}
close(BETLIST);
}

… In diesem Programmausschnitt müsste doch eigendlich,
sofern

$akt_bet_nr

gleich 5 ist die aktuelle Zeile
der Datei überschrieben werden, oder wo liege ich falsch?

So einfach geht es leider nicht, denn eine eingelesene
Datei wird als Bytestream angesehen, bei der jedes Byte
eine eigene laufende Nummer hat. Nun bringst Du dieses
Nummerierungsschema aber durcheinander, sobald Du den
alten String mit einem neuen anderer Länge überschreibst.

Deshalb funktioniert der obige Code nicht. Um eine Datei
zu ändern, ohne eine temporäre Datei anzulegen, gibt
es in Perl 2 Möglichkeiten:

a) mit dem inplace-Schalter -i, der im Hintergrund
für dich die ganze Arbeit in b) übernimmt:

perl -ipe 'filterbefehle' datei.txt

b) mit seek, tell und truncate:

open(FH, "+;
# @ARRAY ändern
# und jetzt in folgender Form zurückschreiben:

# an den Anfang der Datei zurück (Bytenr. 0)
seek(FH,0,0) or die;

# neuen Inhalt ab dieser Position einfügen
print FH @ARRAY or die;

# alles hinter der momentanen Position abschneiden 
truncate(FH,tell(FH)) or die;

# und schliessen
close(FH) or die;

Damit gehts …

Gruss,
-Andreas.

Platform?
Danke für Deinen hilfreichen Hinweis!!!
Jetzt stellt sich mir nur noch die Frage, ob der „inplace-Schalter“ in Möglichkeit >>a

Danke für Deinen hilfreichen Hinweis!!!
Jetzt stellt sich mir nur noch die Frage, ob der
„inplace-Schalter“ in Möglichkeit >>a

perl -p -i.alt -e „aktionen…“

Ansonsten gibts eine Fehlermeldung.
Details zu den Schaltern unter „perldoc perlrun“.

Gruss,
-Andreas.

Danke
Danke für deine Antworten,
LEther