ファイルの入出力
ファイルの入出力の形式
フォートランでの入出力は、下のような形式がある。
例
1a 直接(direct)アクセス 書式なし GrADSとのやり取り
1b 書式あり ほとんど使うこと無し
2 逐次(sequential)アクセス 書式なし write(8) A
3a 書式あり お任せ write(8,*) A
3b 陽に指定 write(8,'(F10.2)') A
|
-
直接(direct)アクセスは、ファイルの先頭から読み書きを行う必要がなく、途中から読んだり出来るが、read/write文で入出力させる配列や変数の長さはopen文で予め指定したものに限られる。
というので、データベースなどの用途に用いられ、GrADSに読ませるファイルへ出力させる以外、ほとんど使う必要はない。
-
書式なしread/write文は、メモリーで記憶されたままを出力されるので、高速な入出力が行われ、ファイルの読み書きで精度が落ちたりはしない利点がある。
また、ファイルサイズも必要以上に大きくならない。但し、例えば単精度/倍精度実数で書いたものは単精度/倍精度実数で読まなければならない。
メモリーでの記憶形式は、機種依存性があり、PC、Sunと計算機センターの機種などでのやり取りには工夫を要する(big/little endian問題。コンパイラーのオプションで対応出来ることもある)。
-
書式ありread/write文は、人間が読める形でテキストファイルで入出力されるの
で、ちゃんと入出力できたかを確認するのが容易であるが、精度が落ちたり、ファ
イルサイズが大きくなり、処理に時間がかかる。文字コードの問題以外の機種依存
性はない。結果を簡単に見たい場合などは、お任せの書式ありWrite(*,*)を用いる
のが便利だが、大量に出力させた場合などは、陽に書式を指定して見やすくした方が
よい。
ファイルの入出力のサンプルプログラム
書き出しプログラム (ex110.f)
読み込みプログラム (ex111.f)
上のプログラムでは、
(a) 逐次アクセス書式あり(その1)
do N = 1, Nmax
write(10,*) X( N ), Y( N )
end do
(b) 逐次アクセス書式あり(その2)
write(20,*) ( X( N ), Y( N ), N = 1, Nmax )
(c) 逐次アクセス書式なし(その1)
write(30) X,Y
(d) 逐次アクセス書式なし(その2)
write(40) X
write(40) Y
(e) 直接アクセス書式なし(その1)
do N = 1, Nmax
write(50, rec=N) X( N ), Y( N )
end do
(f) 直接アクセス書式なし(その2)
write(60, rec=1) ( X( N ), Y( N ), N = 1, Nmax )
となっているが、同じ形式でも、(a)と(b)、(c)と(d)は、違うファイルができてしまう。
これは、一つのwrite文に対して、書式ありは最後に改行コードが、書式なしは、最初に8バイトで何バイト出力するか情報が付加されるためである。
(e)と(f)は、同じファイルができる。
2002年度 fortran 演習
担当教官:山中康裕(galapen@ees.hokudai.ac.jp)・豊田威信(toyota@lowtem.hokudai.ac.jp)