Schreiben in eine vorhandene Datei wird nicht überschrieben, die in Fortran
Ich habe eine vorhandene Datei geschrieben, die von einem Fortran-Programm (formatiert) und ich möchte hinzufügen, einige Zeilen am Anfang der Datei. Die Idee ist, so zu tun, ohne eine Kopie der ursprünglichen Datei.
Könnte ich fügen Sie eine Zeile am Ende der Datei mit:
open(21,file=myfile.dat,status='old',action='write',
form='formatted',position="append")
write(21,*) "a new line"
aber wenn ich es versuchte:
open(21,file=myfile.dat,status='old',action='write',
form='formatted',position="rewind")
write(21,*) "a new line"
überschreibt er die ganze Datei.
Kann es unmöglich sein.
Zumindest ich wäre froh um eine Bestätigung, dass es praktisch unmöglich ist.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, es ist unmöglich. Mit
position=
legen Sie nur die position für das schreiben. Normalerweise werden Sie nur löschen alles hinter dem aktuellen Datensatz, indem Sie ein schreiben in eine sequentielle Datei. Sie können möglicherweise passen einem Datensatz am Anfang in einer direct-access-Datei, aber auch nicht nur etwas am Anfang. Sie haben, um eine Kopie der ersten.Wenn Sie mit un-formatierten Daten und wissen, wie viele Linien erwarten, versuchen Sie es mit der direct access file read/write-Methode. Dies hat das Potenzial, um Informationen zu speichern, die für jede Zeile in "Datensatz", die zugegriffen werden kann, die später viel wie ein array.
Um zum Anhängen an den Anfang, einfach erstellen Sie so viele leere Datensätze, wie Sie Zeilen in dein 'Kopf' am Anfang der Datei, dann gehen Sie zurück und ändern Sie deren Werte auf die eigentlichen Zeilen, die Sie wollen, dass Sie später.
Beispiel von Direct Access file io:
code-Quelle, siehe Kapitel auf "Direct Access Files":
http://oregonstate.edu/instruct/ch590/lessons/lesson7.html
Ist es möglich !!! Hier ist ein Beispielprogramm, das könnte die Aufgabe erfüllen.
position=append
.access=append
ist etwas seltsam, nicht standardisierte Erweiterung. Standard Fortran 90 istposition=append