web-dev-qa-db-ja.com

ファイルを開く、またはファイルと追加データを作成する単一のコマンド

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

  1. ファイルが存在する場合はそれを開き、データを追加します(これはopen(unit=40,file='data.data',Access = 'append',Status='old')で実行できますが、ファイルが存在しない場合はランタイムエラーが発行されます)

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

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

17
Matteo Parsani

私の知る限り、唯一のsafeソリューションは、さまざまなケースに異なる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

私の libcファイルシステムコールへのFortranインターフェイスライブラリ(modFileSys) に興味があるかもしれません。これにより、ファイルステータスを直接クエリすることで、少なくとも論理変数とinquireステートメントを節約できます。

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

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

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

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

6

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

ありがとう

4
Nick

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

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

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

0
Mubeena Shaikh