neuer Eintrag in Datei oben
Paul
- perl
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!!
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
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!!
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.
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
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.
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