perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 40
Click for quality!




11.02.2012 / 19:25

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  Perl: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


BeitragDatei am Anfang löschen, während gleichzeitig geschrieben wird
Seitenanfang
Hallo

Welche Möglichkeit gibt es, die Dateigrösse
durch löschen der Anfangszeilen zu reduzieren, während gleichzeitig in die Datei geschrieben wird ?

Danke

Charly

Datum: 20.02.2007-15:21

Beitragre: Datei am Anfang löschen, während gleichzeitig geschrieben wird
Seitenanfang
hi,

nachdem die Datei auf ein Array gelesen wurde, kannst Du mit shift() die erste Zeile rausziehen und mit unshift() eine neue Zeile vorne anfügen. Hinten anfügen geht mit push() und hinten herausnehmen geht mit pop().

Hinweis: Die Datei für alle anderen Prozesse sperren, solange Dein Script darauf zugreift.

roro

Datum: 20.02.2007-16:36

Beitragre: Datei am Anfang löschen, während gleichzeitig geschrieben wir
Seitenanfang
Hallo

Danke für den Hinweis
Problem ist damit gelöst, habe die Datei
mit flock gesperrt:
use Fcntl qw(SEEK_SET LOCK_EX LOCK_UN);
.
.
open FH, "+<$LOGFILE" or die "Kann $LOGFILE nicht öffnen, weil:$!";
flock(FH, LOCK_EX) or die "Fehler beim sperren der Datei $LOGFILE: $!";
.
.
Dateizeilenanzahl ermittelt:
$WC = "wc -l $LOGFILE" ;
@ZEILENANZAHL = `$WC`;
.
Dateiinhalt in Array, Array dann mit shift auf die gewünschte Zeilenanzahl bringen,
Datei auf 0 Inhalt reduzieren:
truncate FH, 0 or die $!;

Datei wieder mit reduziertem Arrayinhalt auffüllen:
foreach (@ARRLOGFILE) {
print FH "$_";
}

...nur mit truncate, ohne Dummyarray, ist's mir nicht gelungen, die Zeilen vom Anfang bis zu einem Punkt der Datei zu entfernen, wobei die Datei esperrt ist.

Datum: 21.02.2007-15:31

-






-
-