Newbie: Datei handle
Thomas D
- perl
Moin,
ich such einen Tipp fuer den richtigen Ansatz.
Problem:
Ich moechte in einer Datei unbekannter Groesse _eine_ Zeile mit bestimmtem Inhalt auslesen und danach diese Zeile loeschen. Weil spaeter als CGI, muss das gelockt funktionieren. Der Inhalt der Zeile wird spaeter weiter bearbeitet.
Meine Loesung(bislang ohne Erfolg):
datei mit "+<" oeffnen, locken, in array einlesen, zeile finden und loeschen
#bis hierhin alles OK. Wie bekomme ich jetzt den geaenderten Inhalt meines arrays wieder in die Datei zurueck und zwar ohne an den noch in der Datei existierenden Inhalt anzuhaengen?
Thomas
Hi,
Ich moechte in einer Datei unbekannter Groesse _eine_ Zeile mit bestimmtem Inhalt auslesen und danach diese Zeile loeschen.
wie sehr "unbekannt" ist diese Größe?
Wenn das eine "handelsübliche" Datei ist, solltest Du den modifizierten Array-Inhalt komplett zurückschreiben.
Ist die Datei dafür zu groß, solltest Du eine Datenbank verwenden, die genau für solche Aktionen geeignete Operationen bereit stellt.
mfG - Michael
Ich moechte in einer Datei unbekannter Groesse _eine_ Zeile mit bestimmtem Inhalt auslesen und danach diese Zeile loeschen.
wie sehr "unbekannt" ist diese Größe?
Die Groesse ist erstmal auf wenige Zeilen beschraenkt.
Wenn das eine "handelsübliche" Datei ist, solltest Du den modifizierten Array-Inhalt komplett zurückschreiben.
genau da liegt mein Problem:
open (DAT , "+<tmp_file") ;
&LockFile(DAT);
#dann wird umsortiert und der komplette neue Inhalt ( um besagte
#Zeile dezimiert) soll nun in die Datei geschrieben werden.
Und zwar _ersetzend_ und nicht anhaengend. Will sagen hab keine
Idee, wie ich den Inhalt der geoeffneten Datei loeschen bzw. durch
den neuen ersetzen kann. Ich hatte zwar mit truncate rumexperi-
mentiert, doch dessen Wirkungsweise ist mir nicht klar.
Danke
Thomas
Hallo Thomas,
open (DAT , "+<tmp_file") ;
&LockFile(DAT);#dann wird umsortiert und der komplette neue Inhalt ( um besagte
#Zeile dezimiert) soll nun in die Datei geschrieben werden.Und zwar _ersetzend_ und nicht anhaengend. Will sagen hab keine
Idee, wie ich den Inhalt der geoeffneten Datei loeschen bzw. durch
den neuen ersetzen kann. Ich hatte zwar mit truncate rumexperi-
mentiert, doch dessen Wirkungsweise ist mir nicht klar.
Folgendes hat sich bei mir bewährt:
Mit "seek(DAT,0,0);" (perldoc -f seek) setze ich den "Dateizeiger" auf den Anfang der Datei. Anschließend lösche ich den gesamten Inhalt der Datei mit "truncate(DAT,0);" (perldoc -f truncate), was afaik die Länge der Datei auf 0 setzt (so ist der Inhalt eben gelöscht ;-).
Gruß AlexBausW
Please visit my SELFvisitingcard @ http://www.atomic-eggs.com/selfspezial/daten/150.html
Danke fuer Eure schnellen Antworten!
#dann wird umsortiert und der komplette neue Inhalt ( um besagte
#Zeile dezimiert) soll nun in die Datei geschrieben werden.Und zwar _ersetzend_ und nicht anhaengend. Will sagen hab keine
Idee, wie ich den Inhalt der geoeffneten Datei loeschen bzw. durch
den neuen ersetzen kann. Ich hatte zwar mit truncate rumexperi-
mentiert, doch dessen Wirkungsweise ist mir nicht klar.Folgendes hat sich bei mir bewährt:
Mit "seek(DAT,0,0);" (perldoc -f seek) setze ich den "Dateizeiger" auf den Anfang der Datei. Anschließend lösche ich den gesamten Inhalt der Datei mit "truncate(DAT,0);" (perldoc -f truncate), was afaik die Länge der Datei auf 0 setzt (so ist der Inhalt eben gelöscht ;-).
sieht gut aus - mache mich jetzt ueber perldoc her
Thomas