Sven Rautenberg: Schreiben an Position mit SEEK?

Beitrag lesen

Moin!

Programmiere gerade in CGI/PERL.

Du programmierst in _PERL_. CGI ist eine Schnittstelle für alles mögliche, damit kann man nicht programmieren. :)

Hab die Frage zwar schon gestern in ähnlicher Weise gestellt, muss aber nochmal fragen.

Oha, </faq/#Q-11> droht.

Ich bekomme das mit der Seek funktion irgendwie nicht auf die reihe.

Wenn ich das so schreibe:

open (infile,"<textfile"); # wenn ich ich das kleiner als (<) Zeichen so ein
                           #so einfüge, dann liest er nur aus, anders
                           #functioniert es garnicht

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.

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.

Von einer Möglichkeit, einen Schreibezeiger irgendwohin zu setzen habe ich noch nichts gehört. 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.

seek (infile,5,0);         #Position --> funktioniert auch soweit, wenn ich
                           #das kleiner als Zeichen einsetze

Der Seek-Befehl funktioniert meines Erachtens nur beim Datei_LESEN_, nicht 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.

- Sven Rautenberg