it-swarm.com.de

Einzelner Befehl zum Öffnen einer Datei oder zum Erstellen der Datei und der Daten zum Anhängen

Ich würde gerne wissen, ob es in Fortran möglich ist, nur einen einzigen Befehl (mit Optionen/Bezeichnern) zu verwenden, um Folgendes auszuführen:

  1. Öffnen Sie eine Datei, falls vorhanden, und fügen Sie einige Daten an (Dies kann mit folgenden Anweisungen ausgeführt werden: open(unit=40,file='data.data',Access = 'append',Status='old'). Wenn die Datei jedoch nicht vorhanden ist, wird ein Laufzeitfehler ausgegeben.)

  2. erstellen Sie die Datei, wenn sie nicht vorhanden ist, und schreiben Sie einige Daten.

Ich verwende derzeit inquire, um zu prüfen, ob die Datei existiert oder nicht, aber dann muss ich noch die open-Anweisung zum Anhängen oder Schreiben von Daten verwenden.

15
Matteo Parsani

Soweit mir bekannt ist, besteht die einzige safe - Lösung darin, wie Sie es bereits tun, indem Sie verschiedene open-Anweisungen für die verschiedenen Fälle verwenden:

program proba
  implicit none

  logical :: exist

  inquire(file="test.txt", exist=exist)
  if (exist) then
    open(12, file="test.txt", status="old", position="append", action="write")
  else
    open(12, file="test.txt", status="new", action="write")
  end if
  write(12, *) "SOME TEXT"
  close(12)
end program proba

Sie könnten an meiner Fortran-Schnittstellenbibliothek für libc-Dateisystemaufrufe (modFileSys) interessiert sein, die Ihnen zumindest die logische Variable und die inquire-Anweisung ersparen könnte, indem Sie den Dateistatus direkt abfragen:

if (file_exists("test.txt")) then
    ...
else
    ...
end if

sie können eine ähnliche Funktion natürlich problemlos selbst programmieren, und vor allem sparen Sie sich nicht die beiden open-Anweisungen ...

22
Bálint Aradi
open(61,file='data.txt',action='write',position='append')
write(61,*) 'hey'
close(61)

Dies wird an eine vorhandene Datei angehängt, andernfalls erstellen und schreiben. Das Hinzufügen von status='unknown' wäre gleichwertig.

4

wenn Sie den Status von "alt" auf "unbekannt" setzen, wird der Laufzeitfehler nicht angezeigt, wenn die Datei vorhanden ist oder jetzt.

Vielen Dank

4
Nick

Fügen Sie in der Open-Anweisung das Attribut access wie folgt hinzu:

Open(unit=031,file='filename.dat',form='formatted',status='unknown',access='append')

Die obige Anweisung öffnet die Datei, ohne die alten Daten zu zerstören. Mit dem Befehl write werden die neuen Zeilen in der Datei angefügt .. Die einfachste Lösung für fortran 90.

0
Mubeena Shaikh