25

Fortran で、単一のコマンド (オプション/指定子を使用) を使用して次のことを実行できるかどうかを知りたいです。

  1. 存在する場合はファイルを開き、いくつかのデータを追加します (これは次のように実行できます:open(unit=40,file='data.data',Access = 'append',Status='old')ただし、ファイルが存在しない場合は実行時エラーが発生します)

  2. ファイルが存在しない場合は作成し、データを書き込みます。

現在inquire、ファイルが存在するかどうかを確認するために使用していますが、それでもopenステートメントを使用してデータを追加または書き込む必要があります。

4

4 に答える 4

32

私が知る限り、唯一の安全な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

もちろん、同様の関数を自分で簡単にプログラムできます。特に、2 つのopenステートメントからあなたを救うことはできません...

于 2013-03-20T17:33:05.023 に答える
9
open(61,file='data.txt',action='write',position='append')
write(61,*) 'hey'
close(61)

これは既存のファイルに追加されます。それ以外の場合は、作成して書き込みます。追加status='unknown'することは同等です。

于 2016-11-29T14:55:09.083 に答える
4

ステータスを「old」から「unknown」に置き換えると、ファイルが存在するか、または現在存在する場合、実行時エラーは発生しません。

ありがとう

于 2013-03-20T14:58:01.583 に答える
-1

open ステートメントで、次のように属性accessを追加します。

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

上記のステートメントは、古いデータを破棄せずにファイルを開き、書き込みコマンドはファイルに新しい行を追加します。Fortran 90 の最も簡単なソリューション。

于 2014-11-01T01:43:28.997 に答える