[Dresden-pm] Datei Lesen plus schreiben
Richard Möhn
richard.moehn at gmx.de
So Mai 6 05:46:02 PDT 2012
On Sun, May 06, 2012 at 02:09:36PM +0200, Sebastian Oeste wrote:
> Ich wollte ein Perl Skript schreiben mit dem ich eine bestimmte Zeile aus
> einer Datei löschen kann.
>
> #! /usr/bin/perl -w
>
> use strict;
> use warnings;
> use feature "say";
>
> my ($fh, $i);
> open ($fh, "+>", "test.txt") || die qq/cannot open $!/;
> my @lines = ();
> $i = 0;
> while ( <$fh> )
> {
> push (@lines, $_) unless $i == 2;
> $i ++;
> }
>
> for (@lines)
> {
> print $fh "$_\n" ;
> }
>
> close ($fh);
>
> leider funktioniert es nicht mit "+>" die Datei zum lesen und schreiben zu
> öffnen. Damit das Skript funktioniert muss ich die Datei erst zum lesen
> öffnen, nach dem einlesen wieder schließen und dann zum schreiben öffnen.
>
> Warum funktioniert das nicht ?
> Habt ihr ein Tip für mich wie das noch eleganter geht ?
Tipps zur Eleganz:
- Die eingebaute Variable $. ($INPUT_LINE_NUMBER mit use English)
enthält die aktuelle Zeilennummer für das aktuelle Filehandle.
- Bei großen Dateien ist es problematisch, alles in den Speicher (Array)
zu lesen. Daher:
- Entweder Inplace-Bearbeitung mit $^I oder -i.
- Oder Tie::File. Damit kann man auf die Datei wie auf ein Array
zugreifen, ohne dass sie in den Speicher geladen wird.
Beste Grüße
Richard
Mehr Informationen über die Mailingliste Dresden-pm