Chris Weber: Bestimmte Zeile(n) aus Textdatei entfernen (oder loeschen)

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

  1. [ .... ]

    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

  2. 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