Christian Kruse: Schreiben an Position mit SEEK?

Beitrag lesen

Hallo Sven,

Dieser Befehl öffnet die angegebene Datei zum _Lesen_. Und zwar
ausschließlich zum Lesen, und sonst für nichts. Logischerweise kannst du
dann nichts in die Datei schreiben.

Richtig. Logisch waere hier der Modus '+<' oder '>>'.

Wenn du schreiben willst, mußt du mindestens man die Datei zum Schreiben
öffnen, wobei es dummerweise zwei Möglichkeiten gibt: Schreiben und die
vorhergehende Datei dabei löschen, oder Schreiben, indem hinten an die
Daten angehängt wird.

Nicht ganz. 'perldoc perlopentut'. Es gibt diverse Lese- und Schreibemodi.

Von einer Möglichkeit, einen Schreibezeiger irgendwohin zu setzen habe ich
noch nichts gehört.

Dann hast du jetzt davon gehoert :)

Die übliche Vorgehensweise für den Fall, daß Daten an den Anfang oder in die
Mitte einer bestehenden Datei geschrieben werden sollen, ist bislang immer
gewesen, eine temporäre Datei anzulegen, entsprechend den Wünschen die alte
Datei auszulesen und in die neue Datei zu kopieren und dabei an passender
Stelle die neuen Daten einzufügen - und am Ende dann die alte Datei zu
löschen und die temporäre Datei umzubenennen in den normalen Dateinamen.

Das hat aber nichts damit zu tun, dass man den Datei-Zeiger im Schreibe-Modus
nicht setzen koennte. Das kann man durchaus. Das liegt nur daran, dass
die Daten dann ueberschrieben werden, mit den neuen. Einen 'Einfuege-Modus'
gibt es nicht.

Der Seek-Befehl funktioniert meines Erachtens nur beim Datei_LESEN_, nicht
beim Schreiben.

Vorher perldoc lesen :)
Natuerlich geht das auch beim schreiben.

Beim Lesen ist er sinnvoll, da man so direkt an eine bestimmte Position
springen kann. Beim Schreiben wäre das nicht so sinnvoll, denn es kann
eigentlich nur überschrieben werden, was vorher in der Datei stand, aber es
kann nicht eingefügt werden. Aus diesem Grunde wird man es wohl unterlassen
haben, SEEK fürs Schreiben zu implementieren.

Sicher ist das sinnvoll. Wenn man z. B. eine Datei mit festen Breiten fuer
Daten-Felder hat. Was meinst du, wie eine binaere Suche in Dateien
umgesetzt wird?
Es ist ueberigens sehr lustig, was passiert, wenn man folgendes macht:

open DAT,'>file';
seek DAT,10737418240,SEEK_SET;
print DAT "filling the hd... :)\n";
close DAT;

Gruesse,
 CK