Christian Bliß: Zeilen löschen

Hallo,

wie kann ich bestimmte Zeilen aus einer txt-Datei löschen?
So weit bin ich schon:

open(LISTE, "<$root/liste.txt") or die "$!";
  my @lines = <LISTE>;
  while (<LISTE>) {
    push @lines, $_;
  }
  foreach (@lines) {
    ($liste_name, $liste_email) = split(/##/, $_);
    open(ANZEIGELISTE, ">>$root/liste_anzeige.txt") or die "$!";
      print ANZEIGELISTE "$liste_name##$liste_email\n";
    close(ANZEIGELISTE);
  }
close(LISTE);

Nun will, sobald die 2 Variablen in die neue Datei liste_anzeige.txt geschrieben wurden, in der liste.txt diese Zeile löschen. Wie mach ich das? Muss ich das '<' vor $root in '>' oder '>>' ändern?

MfG Christian Bliß

  1. Halihallo Christian

    open(LISTE, "<$root/liste.txt") or die "$!";
      my @lines = <LISTE>;
      while (<LISTE>) {

    hä? - Du liest alle Zeilen der Datei ein und willst sie dann nochmals einlesen?
    Einmal reicht, zudem wäre ein zeilenweises einlesen besser:

    while (<LISTE>) {
       my ($liste_name,$liste_email) = split(...);
    }

    so brauchst du keinen Speicher für @lines und ist zudem viel performanter.

    Nun will, sobald die 2 Variablen in die neue Datei liste_anzeige.txt geschrieben wurden, in der liste.txt diese Zeile löschen. Wie mach ich das? Muss ich das '<' vor $root in '>' oder '>>' ändern?

    Geht _überhaupt_ nicht. >> = Anfügen, > = neue Datei+schreiben, < = lesen. Siehe auch
    perldoc -f open.

    Du musst die Datei einlesen, wenn "die 2 Variable" kommt ignorieren und dann alle
    "nur 1 Variable" wieder in die Datei speichern (zwei opens, einmal für lesen, dann für
    schreiben).

    Am effizientesten wäre es wohl, wenn du liste_name und liste_email in einen Hash
    (s. perldoc perlfaq4) legst und liste_name'n ignorierst, wenn sie schon im Hash
    vorkommen. Dann iterierst du über den Hash und schreibst die Daten zurück in die selbe
    Datei (dieses mal die Datei mit '>' geöffnet).

    Viele Grüsse

    Philipp

    --
    RTFM! - Foren steigern das Aufkommen von Redundanz im Internet, danke für das lesen der Manuals.
    Selbstbedienung! - Das SelfForum ist ein Gratis-Restaurant mit Selbstbedienung, Menüangebot steht in den </faq/> und dem </archiv/>.