• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Fortran(コンパイラG95)のfile処理)

Fortran(コンパイラG95)のfile処理

このQ&Aのポイント
  • Fortran(コンパイラG95)を使用して、インプットファイルとアウトプットファイルの処理を自動化したい。
  • プログラムは地震波を作成するためのもので、インプットファイル・アウトプットファイルは数千以上ある。
  • 現在の環境で解決できる方法を探しているが、有料の環境を整えることも検討している。

質問者が選んだベストアンサー

  • ベストアンサー
  • f272
  • ベストアンサー率46% (8627/18452)
回答No.1

私ならgetargなどは使わない。 open(5,file='in.dat') open(6,file='out.dat') という感じでやるのはできるんでしょ。この'in.dat'と'out.dat'を変数にして finame='in.dat' foname='out.dat' open(5,file=finame) open(6,file=foname) とするのも簡単だよね。そうするとファイル名をファイルから読み込ませるという考えもすぐに浮かぶでしょ。 open(1,'filename.dat') read(1,'(a)') finame, foname open(5,file=finame) open(6,file=foname) あとはループさせるだけじゃない? open(1,'filename.dat') do i=1,大きな数 read(1,'(a)') finame, foname open(5,file=finame) open(6,file=foname) ... close(5) close(6) enddo 1番のファイルがEOFになったらループを抜けるようにすればいいし,fonameは読み込まずにfinameから作るようにすることもできるよね。

misakiA
質問者

お礼

 f272さん、丁寧なご回答ありがとうございます。  ファイル終端に達した時の処理やカレントディレクトリ以外を指定してのファイル操作がわからなかった為に時間はかかりましたが、教えて頂いた内容を基に自分なりにコードを書いてみました。  本当にありがとうございました。

misakiA
質問者

補足

実際にかいたコードは以下のようになりました。 open(fi_0, file='3_file/fi_1.txt')   ! 相対パスでインプットファイルの保存先fi_1を指定 do i=1,100 read(fi_0,*,iostat=ist) finame  if (ist /= 0) exit         ! ファイル終端に達した時の処理 call chdir('3_file') ! カレントディレクトリの変更(次行のfinameがカレントディレクトリに                           ! ないため open(fi_1,file=finame) open(fo_1,file='fo_of_'//finame) read (fi_1,*,iostat=ist) a, b if (ist /= 0) stop " ファイル=finameのデータ数が足りません " write(fo_1,*) a, b close(fi_1) close(fo_1) call chdir('../3_getarg')     ! カレントディレクトリを元に戻す enddo close(fi_0)  プログラム、インプット・アウトプットファイルの保存先を同一にするのは避けたかったのでそれぞれの保存先をパスで指定しました。 ただファイル名を文字型のfinameでopenする箇所( open(fi_1,file=finame) )において、file=finameをパス(相対パス)を指定してかく方法が見つけられなかった為、call chdir('相対パス名')を用いてディレクトリを変えて戻してというプロセスを踏んでいます。きっとスマートではないですよね。  以上となります。ありがとうございました。

関連するQ&A