Datei zum Lesen und Schreiben öffnen
Siechfred
- perl
0 Cheatah0 Siechfred0 $xNeTworKx
0 Christian Kruse
Guten Abend,
wieder mal habe ich ein kleines Perl-Problem. Ich möchte eine Datei öffnen, einlesen, prüfen und dann bei Bedarf eine neue Zeile anhängen. Nun steht hier http://www.perldoc.com/perl5.6.1/pod/func/open.html, dass man "+" und ">>" miteinander kombinieren kann. Dies würde nun bedeuten, dass die Datei zum Lesen und zum Schreiben geöffnet wird, wobei der neue an den alten Inhalt angehängt wird.
Nun habe ich das mal versucht, und es hat nicht funktioniert:
open(LOG, "+>>$datadir/$logfile") or die $!;
my @logentries = <LOG>;
foreach(@logentries) {
#wenn die Bedingung erfüllt ist, dann
print LOG "Neue Zeile\n";
}
close(LOG);
Ich bin mit meinem Latein am Ende und kann mir absolut nicht erklären, warum es nicht geht. Wenn ich zwei Operationen draus mache (Zum Lesen öffnen - Schließen; zum Anhängen öffnen - Schließen), geht es problemlos.
mfg Torsten
Hi,
Nun steht hier http://www.perldoc.com/perl5.6.1/pod/func/open.html, dass man "+" und ">>" miteinander kombinieren kann.
ich finde diese Möglichkeit hoffnungslos absurd und empfehle Dir, ihre Existenz zu ignorieren. Öffne eine Datei zum Lesen, wenn Du aus ihr lesen möchtest. Öffne eine Datei zum Schreiben, wenn Du in sie schreiben möchtest. Aber öffne sie nicht zum Schreiben, wenn Du aus ihr lesen möchtest und umgekehrt.
Wenn ich zwei Operationen draus mache (Zum Lesen öffnen - Schließen; zum Anhängen öffnen - Schließen), geht es problemlos.
Ja.
Cheatah
Guten Abend,
ich finde diese Möglichkeit hoffnungslos absurd und empfehle Dir, ihre Existenz zu ignorieren. Öffne eine Datei zum Lesen, wenn Du aus ihr lesen möchtest. Öffne eine Datei zum Schreiben, wenn Du in sie schreiben möchtest. Aber öffne sie nicht zum Schreiben, wenn Du aus ihr lesen möchtest und umgekehrt.
Die Frage ist nun, warum bietet Perl diese Möglichkeit an, wenn sie böse ist? Hast du eine plausible Erklärung (neben der offensichtlichen Unlogik), warum es nicht geht?
mfg Torsten
Hallo,
Die Frage ist nun, warum bietet Perl diese Möglichkeit an, wenn sie böse ist? Hast du eine plausible Erklärung (neben der offensichtlichen Unlogik), warum es nicht geht?
Es hat manchmal auch Sinn eine Datei zum Lesen und Schreiben zu öffnen.
Ich kann dir mal ein Beispiel von mir geben. Meine Webseitenstatistik wurde anfangs immer abwechselnd zum Lesen, dann zum Schreiben geöffnet. Dummerweise kam es dann vor, dass 2 User zur gleichen Zeit dazu führten, dass meine ganze Stastik gelöscht und somit zerstört wurde, obwohl ich flock verwendete. Die einzige Möglichkeit bestand darin, sie gleichzeitig zum Lesen und Schreiben zu öffnen, wie ich mit Hilfe des Forums festgestellt hatte und seither hat es immer funktioniert.
Eine Datei gleichzeitig zum Lesen und Schreiben zu öffnen, kann also absolut notwenig sein.
$xNeTworKx.
Guten Abend,
Es hat manchmal auch Sinn eine Datei zum Lesen und Schreiben zu öffnen.
Ich kann dir mal ein Beispiel von mir geben. [...]
Genau dies habe ich vor, eine Logdatei, die prüft, ob sich der Besucher innerhalb einer vorgegebenen Zeit schon mal in ein Gästebuch eingetragen hat. Wenn ja, wird er freundlich drauf hingewiesen, wenn nein, wird seine IP nebst Uhrzeit an die Logdatei angehängt und er kann was reinschreiben. Dazu muss ich aber nun mal erst die alten Einträge auslesen.
mfg Torsten
Hallo,
Genau dies habe ich vor, eine Logdatei, die prüft, ob sich der Besucher innerhalb einer vorgegebenen Zeit schon mal in ein Gästebuch eingetragen hat. Wenn ja, wird er freundlich drauf hingewiesen, wenn nein, wird seine IP nebst Uhrzeit an die Logdatei angehängt und er kann was reinschreiben. Dazu muss ich aber nun mal erst die alten Einträge auslesen.
Ich weiß zwar nicht genau, wie im Endeffekt dein Programm arbeiten wird, aber ich würde die Datei zum Lesen und Schreiben öffnen ( +< ), in dem Moment, wo er etwas hineinschreibt, da ja zur gleichen Zeit die Logdatei von jemanden Anderen geöffnet werden könnte, aber wirklich nur dann.
$xNeTworKx.
Hallo Siechfred,
wieder mal habe ich ein kleines Perl-Problem. Ich möchte
eine Datei öffnen, einlesen, prüfen und dann bei Bedarf
eine neue Zeile anhängen. Nun steht hier
http://www.perldoc.com/perl5.6.1/pod/func/open.html,
dass man "+" und ">>" miteinander kombinieren kann. Dies
würde nun bedeuten, dass die Datei zum Lesen und zum
Schreiben geöffnet wird, wobei der neue an den alten
Inhalt angehängt wird.
Korrekt.
Nun habe ich das mal versucht, und es hat nicht
funktioniert:
Kein Wunder ;)
open(LOG, "+>>$datadir/$logfile") or die $!;
Hier ist der Dateizeiger bereits ganz am Ende der Datei.
my @logentries = <LOG>;
Und hier versuchst du, vom Ende an noch weiter zu lesen.
Besser waere also:
open LOG,'+<'.$datadir.'/'.$logfile or die $!;
my @entries = <LOG>; # hiermit wird der Dateizeiger ans Ende der Datei gesetzt
foreach(@entries) {
print LOG "zeile\n" if dasunddas;
}
close LOG;
Gruesse,
CK
Hallo CK,
Kein Wunder ;)
Hier ist der Dateizeiger bereits ganz am Ende der Datei.
Ergänzende Frage: Ich könnte doch den Dateizeiger mittels seek(LOG,0,0) am Anfang positionieren und die alten Daten auslesen. Dann müsste der Zeiger doch wieder am Ende der Datei sein und man könnte den neuen Inhalt anhängen. Könnte das so funktionieren?
mfg Torsten