Paul: neuer Eintrag in Datei oben

Hallo zusammen!

Ich bin gerade dabei mich auf dem Gebiet Perl ein wenig vorzuarbeiten und habe ein kleines Script geschrieben, das Eingaben in eine Textdatei schreibt ...und ich bin stolz drauf!! :-)

Nun schreibt er aber jeden neuen Eintrag unter die anderen und ich hätte es gerne so, dass der neue Eintrag über die anderen Einträge geschrieben wird.

Kann mir jemand sagen, wie ich das hinkriege?

Danke!!

  1. Hallo,

    Mit seek() glaube ich kannst du die Stelle auswählen , ich denke aber dass dann die 1. Zeile überschrieben wird.
    Da bleibt dir meiner Meinung nach nichts anderes übrig als folgendes:

    $neuezeile = "Hallo Welt";<

    open(FILE,"<datei.txt");
    my @inhalt = <FILE>;
    close(FILE);

    open(FILE,">datei.txt");
    print FILE $neuezeile,"\n",@inhalt;
    close(FILE);

    (ungetestet)
    Gruss
    Andreas

  2. hi,

    hätte diesen vorschlag:

    #zum schreiben
    open (OUTF, ">>$file") or die $!;
    print OUTF $data;
    close (OUTF);

    #zum lesen
    open (INF, "<$file") or die $!;
    @lines = <INF>;
    close (INF);

    #ausgabe von unten nach oben
    for ($i=$#lines; i>=0; $i--) {
      print $lines[$i];
    }

    die methode hat den vorteil, dass das file $file bei gleichzeitigem zugriff nicht gelöscht wird und man sich einen filelock erspart.

    lg, lois

    Hallo zusammen!

    Ich bin gerade dabei mich auf dem Gebiet Perl ein wenig vorzuarbeiten und habe ein kleines Script geschrieben, das Eingaben in eine Textdatei schreibt ...und ich bin stolz drauf!! :-)

    Nun schreibt er aber jeden neuen Eintrag unter die anderen und ich hätte es gerne so, dass der neue Eintrag über die anderen Einträge geschrieben wird.

    Kann mir jemand sagen, wie ich das hinkriege?

    Danke!!

  3. Nun schreibt er aber jeden neuen Eintrag unter die anderen und ich hätte es gerne so, dass der neue Eintrag über die anderen Einträge geschrieben wird.

    Kann mir jemand sagen, wie ich das hinkriege?

    Du suchst reverse.

    open F, $datei || die "Kann $datei nicht öffnen. Weil: $!";
    print for(reverse <F>);
    close F;

    Die Frage wurde übrigens vor wenigen Tagen schon gestellt. Die Forumssuche kann dir also auch weiterhelfen.

    Struppi.

  4. Hallo Paul,

    Nun schreibt er aber jeden neuen Eintrag unter die anderen und ich hätte es gerne so, dass der neue Eintrag über die anderen Einträge geschrieben wird.

    Eine denkbare Möglichkeit wäre noch die unshift-Funktion:

    open(DATEI, "</dir/deine.datei") || die "Datei nicht gefunden";
    my @Zeilen = <DATEI>;
    close(DATEI);

    unshift(@Zeilen, "Das was vorne dran soll");

    open(DATEI, ">/dir/deine.datei") || die "Datei nicht gefunden";
    print DATEI @Zeilen;
    close(DATEI);

    mfg Siechfred

    --

    ss:| zu:| ls:# fo:| de:[ va:| ch:? n4:& rl:? br:& js:| ie:% fl:( mo:}
    1. open(DATEI, "</dir/deine.datei") || die "Datei nicht gefunden";

      Das muss nicht scheitern, weil die Datei nicht gefunden wird. Der Grund für das scheitern des öffnen's steht in $!

      Ansonsten ist deine Methode nicht sonderlich performant. Ein komplette Datei neu schreiben kann dauern.

      Struppi.

      1. Moin Struppi,

        open(DATEI, "</dir/deine.datei") || die "Datei nicht gefunden";

        Das muss nicht scheitern, weil die Datei nicht gefunden wird. Der Grund für das scheitern des öffnen's steht in $!

        War zu faul, selber was zu pinseln, habe deshalb den obigen Code direkt aus SelfHTML rauskopiert und nur den Pfad zur Datei ein wenig geändert.

        Ansonsten ist deine Methode nicht sonderlich performant. Ein komplette Datei neu schreiben kann dauern.

        Kommt drauf an, was Paul will. Wenn er die Datei zuvor auslesen möchte (z.B. für eine HTML-Ausgabe des kompletten Inhalts), macht's imho schon Sinn.

        Struppi.

        So Long
        Siechfred

        --
        Jedem ist klar, dass man einen Tintenfleck nicht mit Tinte und einen Ölfleck nicht mit Öl wegwischt. Warum wird dann immer wieder versucht, Blut mit Blut wegzuwischen? (B.v.Suttner)
        ss:| zu:| ls:# fo:| de:[ va:| ch:? n4:& rl:? br:& js:| ie:% fl:( mo:}