BadBrain: Substitute in einer Datei

Hallo Foris,

ich möchte gerne in einer Datei einen Text durch nichts ersetzen.

Ich verwende dazu folgenden Code:

open (FILE, ">>$file") || die "unable to write $file!!!!!\n";
   while (<FILE>) {
          s/</BODY></HTML>//g;
   }
close (FILE);

Kann mir jemand sagen, wieso das nicht funktioniert.

  1. ich möchte gerne in einer Datei einen Text durch nichts ersetzen.
    Ich verwende dazu folgenden Code:
    [...]
    Kann mir jemand sagen, wieso das nicht funktioniert.

    Du musst deine Änderungen auch zurückschreiben. Warum verwendest du den Modus '>>'? Damit würden alle Änderungen angehängt werden, der ursprüngliche Inhalt bleibt erhalten. Du solltest dir übrigens mal das Standardmodul Tie::File ansehen.

    Siechfred

    --
    Ein Selbständiger ist jemand, der bereit ist, 16 Stunden am Tag zu arbeiten, nur um nicht 8 Stunden für einen Anderen arbeiten zu müssen.
    1. Du musst deine Änderungen auch zurückschreiben. Warum verwendest du den Modus '>>'? Damit würden alle Änderungen angehängt werden, der ursprüngliche Inhalt bleibt erhalten. Du solltest dir übrigens mal das Standardmodul Tie::File ansehen.

      Siechfred

      Danke ich werde mir das Modul mal ansehen.

      Wie würde ich die Änderungen zurückschreiben? So?
      $_ =~ s/</BODY></HTML>//g;
      print "$_";

      Sorry für die Blöde Frage, aber ich bin Perl-Beginner.

      Ich öffne die Date mit >>, weil ich den ürsprünglichen Inhalt noch brauche. Ich schreibe zuerst die Datei mit allen HTML-Tags, danach möchte ich den Inhalt im <BODY> verändern.

      1. Sorry für die Blöde Frage, aber ich bin Perl-Beginner.

        Dein Problem ist in fast jeder Sprach das gleiche. Eine Datei ist keine Datenbank, d.h. du kannst die lesen oder schreiben und beim Schreiben hast du die Möglichkeit Daten anzuhängehn oder die alte Datei zu löschen, je nach Verwendungszweck.

        Ich öffne die Date mit >>, weil ich den ürsprünglichen Inhalt noch brauche. Ich schreibe zuerst die Datei mit allen HTML-Tags, danach möchte ich den Inhalt im <BODY> verändern.

        Um Daten in einer Datei zu überschrieben, kannst du sie im RW (ReadWrite) Modus öffnen (wie steht sicher in der Doku unter dem Befehl open) musst dann aber den Filezeiger mit seek manuell setzten und beim löschen mit truncate überflüssige Inhalte abschneiden.

        Oft ist es einfacher, die Datei zu lesen die Änderungen vornehmen diese in eine Temporäe Datei schreiben die alte Date löschen und die temporäre umbenennen.

        Struppi.

        1. Hi,

          Oft ist es einfacher, die Datei zu lesen die Änderungen vornehmen diese in eine Temporäe Datei schreiben die alte Date löschen und die temporäre umbenennen.

          Oder bei einfachen Anwendugsfaellen: Datei in einen String einlesen, String bearbeiten, Datei mit bearbeitetem String ueberschreiben.

          mfG,
          steckl

    2. Hallo nochmal,

      mit dem Tie::File Modul klappt es wunderbar.

      Danke an alle, für die Tipps und die schnellen Antworten.

      Supi :))

  2. open (FILE, ">>$file") || die "unable to write $file!!!!!\n";

    Damit ('>>$file') wir eine Datei zum Anhängen von Daten geöffnet, d.h. an den alten Dateiinhalte wird ein weitere angehängt (bestest Beispiel ist ein Log-File).

    Was möchtest du denn erreichen, eine leere Datei? Dann würde ich es mit

    open (FILE, ">$file") || die "unable to write $file!!!!!\n";
    close FILE;

    versuchen. Dies erzeugt eine leere Datei in der nichts drin steht bzw. überschreibt die alten Daten.