[Dresden-pm] Datei Lesen plus schreiben
Maik Hentsche
maik at mm-double.de
So Mai 6 05:30:03 PDT 2012
Sebastian Oeste <oeste.sebastian at googlemail.com> wrote:
>
> Hallo,
>
> Ich wollte ein Perl Skript schreiben mit dem ich eine bestimmte Zeile
> aus einer Datei löschen kann.
> [..]
> Warum funktioniert das nicht ?
Aus mehreren Gründen. Kommentare inline.
> #! /usr/bin/perl -w
>
> use strict;
> use warnings;
use warnings und perl -w aktiviert beides Warnungen. Das use macht es
lokal, das -w global. Deshalb solltest du ersteres bevorzugen, sonst
kriegst du Warnungen, wenn du ein Modul nutzt, das nicht warning-sicher
ist.
> use feature "say";
>
> my ($fh, $i);
> open ($fh, "+>", "test.txt") || die qq/cannot open $!/;
perl -f open sagt:
"You can put a '+' in front of the '>' or '<' to indicate that you want
both read and write access to the file; thus '+<' is almost always
preferred for read/write updates--the '+>' mode would clobber the file
first."
Der letzte Teil ist wichtig. Mit +> wird dein File erstmal kaputt
gemacht. Angenommen, das würde funktionieren, wie du willst, dann...
> my @lines = ();
> $i = 0;
> while ( <$fh> )
> {
> push (@lines, $_) unless $i == 2;
> $i ++;
> }
... wärst du hier am Ende des Files. Du müsstest den Filepointer erstmal
zurück auf den Anfang setzen.
seek $fh, 0, 0;
ABER: Das hilft dir auch nicht, so wie du willst. Angenommen, dein File
hat 6 Zeilen. Dann würdest du nun die ersten 5 Zeilen mit Zeile
1,2,3,4,5,6 überschreiben und Zeile 6 bliebe bestehen (und wäre damit
doppelt).
> for (@lines)
> {
> print $fh "$_\n" ;
Damit verdoppelt du die Newline am Ende der Zeile, denn du hast die
oben mit gelesen, ohne sie zu entfernen.
> }
>
> close ($fh);
> Habt ihr ein Tip für mich wie das noch eleganter geht ?
Nur lesend öffnen, dann deine Version um die Zeilen in ein Array zu
lesen. Datei nur zum Schreiben öffnen und los schreiben.
so long
Maik
--
Der Verstand ist wie eine Fahrkarte. Sie hat nur Sinn wenn man sie
benutzt. (Ernst R. Hauschka (*1926), deutscher Essayist,
Aphoristiker und Bibliothekar)
-------------- nächster Teil --------------
Ein Dateianhang mit Binärdaten wurde abgetrennt...
Dateiname : signature.asc
Dateityp : application/pgp-signature
Dateigröße : 190 bytes
Beschreibung: nicht verfügbar
URL : <http://mail.pm.org/pipermail/dresden-pm/attachments/20120506/8f78a5fb/attachment.bin>
Mehr Informationen über die Mailingliste Dresden-pm