Единая команда для открытия файла или его создания и добавления данных

Я хотел бы знать, если в Fortran можно использовать только одну команду (с параметрами/спецификаторами), чтобы сделать следующее:

  • открыть файл, если он существует, и добавить некоторые данные (это можно сделать с помощью open(unit=40,file='data.data',Access = 'append',Status='old'), но если файл не существует, выдается ошибка времени выполнения)

  • создайте файл, если он не существует, и напишите некоторые данные.

В настоящее время я использую inquire, чтобы проверить, существует ли файл или нет, но я все равно должен использовать инструкцию open для добавления или записи данных.

Ответы

Ответ 1

Насколько мне известно, единственным безопасным решением является то, как вы это делаете, используя разные операторы open для разных случаев:

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

Вам может быть интересна моя библиотека интерфейса Fortran для системных вызовов libc (modFileSys), которые могут по крайней мере избавить вас от логической переменной и оператор inquire, напрямую запрашивая статус файла:

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

но, конечно, вы можете легко запрограммировать подобную функцию самостоятельно, и особенно это не спасет вас от двух операторов open...

Ответ 2

если вы замените статус от "old" на "unknown", тогда вы не получите ошибку времени выполнения, если файл существует или теперь.

Спасибо

Ответ 3

open(61,file='data.txt',action='write',position='append')
write(61,*) 'hey'
close(61)

Это будет добавлено к существующему файлу, в противном случае создайте и напишите. Добавление status='unknown' будет эквивалентным.

Ответ 4

В открывшемся выражении добавьте атрибут access следующим образом:

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

Вышеприведенный оператор откроет файл без уничтожения старых данных, и команда write добавит новые строки в файл. Простейшее решение для fortran 90.