Bestimmte Zeile(n) aus Textdatei entfernen (oder loeschen)
Chris Weber
- perl
0 Boris Hoeller0 Cheatah
Hallo mal wieder,
gehen wir mal davon aus, ich haette eine Textdatei mit folgendem Inhalt:
Hallo, mein Name ist
Chris Weber, ich bin
neunzehn und wohne
in Berlin.
Ich habe es jetzt endlich geschafft mit:
open(OUT, "<test.txt");
@OUT = <OUT>;
print $OUT[1];
close(OUT);
eine bestimmte Zeile auszudrucken, wie kann ich aber eine oder mehrere bestimmte Zeilen entfernen, bzw. loeschen ?
Danke fuer Eure Hilfe,
Chris
[ .... ]
gehen wir mal davon aus, ich haette eine Textdatei mit folgendem Inhalt:
Hallo, mein Name ist
Chris Weber, ich bin
neunzehn und wohne
in Berlin.
[ ... ]
eine bestimmte Zeile auszudrucken, wie kann ich aber eine oder mehrere bestimmte Zeilen entfernen, bzw. loeschen ?
Hi Chris,
wie immer: Viele Wege führen nach Rom ....
Hier wohl einer:
--snip --
#!/usr/bin/perl
$a = "Inputfile.txt";
$b = "Outputfile.txt";
open(IN,$a) die "file $a laesst sich nicht oeffnen wegen $!";
open(OUT,">$b") die "file $b laesst sich nicht anlegen: $!";
while (<IN>) {
$zeile = $_;
if ($zeile =~ "wohne") {$zeile="\n";} # Bsp.
print OUT $zeile;
}
close (IN);
close(OUT);
-- snap ---
Nicht getestet, müßte es aber bringen.
Nach öffnen und anlegen der beteilligten Dateien:
Aus dem Inputfile wird Zeile für Zeile eingelesen.
Jede Zeile, die jeweils in die Variable $zeile
eingebracht wird, soll mit if an einer Bedingung getestet werden. Passt die Bedingung wird aus der Zeile mit Zeichen einfach eine mit einem Zeilenumbruch, wenn nicht, wird die Zeile so, wie sie eingelesen wurde auch wieder 'ausgedruckt'.
Schließlich werden die files der guten Ordnung halber wieder geschlossen.
Hoffentlich klappt es ;)
CU
Boris
Danke fuer Eure Hilfe,
Chris
Hi,
Ich habe es jetzt endlich geschafft mit:
open(OUT, "<test.txt");
@OUT = <OUT>;
besser verschiedene Namen wählen!!! (Und noch ein paar: !!!!!)
print $OUT[1];
close(OUT);eine bestimmte Zeile auszudrucken, wie kann ich aber eine oder mehrere bestimmte Zeilen entfernen, bzw. loeschen ?
Es gibt keine Funktion, die eine bestimmte Zeile einer Textdatei auf der Festplatte löscht oder ändert (schreiben kann man nur über die komplette Datei oder anhängend an den Schluß). Wenn Du aber die Datei schon in ein Array eingelesen hast, dann lösche am besten die unerwünschte Zeile mit splice o.ä. (s. weiter oben: "(PERL) entfernen von $array[$i]") und schreibe danach das ganze Array wieder auf die Platte:
open(OUT,">test.txt");
foreach (@array) { print OUT $_; }
close(OUT);
Ansonsten hat Boris schon richtig gesagt: Viele Wege führen nach Rom.
Cheatah