バイナリファイルの入出力


バイナリファイルの入力

バイナリファイルをFortranで読み出すためには、テキストに比べて少し複雑なことをすることになる。

fortranプログラム例

PROGRAM samp
IMPLICIT NONE
INTEGER i,j,k,siz
REAL,DIMENSION(1:5,1:5,1:2) :: temp

siz=5*5*2*4
OPEN(300,FILE="hoge.bin",ACCESS="direct",FORM="unformatted",STATUS="OLD",recl=siz)
READ(300,rec=1) (((temp(i,j,k),i=1,5),j=1,5),k=1,2)
CLOSE(300)

OPEN(310,FILE='hogeout.txt',STATUS="REPLACE")
WRITE(310,*) (((temp(i,j,k),i=1,5),j=1,5),k=1,2)
CLOSE(310)

STOP
END PROGRAM samp

OPEN文で、ACESS="direct"つまり直接探査をします。
何も書かなければACCESS="sequential"つまり順番探査になる。
OPEN文やREAD文の中では、数値演算は行えないので、前もってsiz=5*5*2*4と書く。ここで*4かどうかはコンパイラに依存する。
READ文でデータ数が1つなら、rec=1と書く。
hogeout.txtに出力している。

バイナリファイルへの出力

バイナリファイルで出力するためには、入力と逆の方法をする。これでGrADSで読める。
もっとも(x,y,z)のデータなら、GMTでgrdファイルを作った方が簡単。

fortranプログラム例

PROGRAM samp
IMPLICIT NONE
INTEGER i,j,k,siz
REAL,DIMENSION(1:5,1:5,1:2) :: temp

siz=5*5*2*4
temp(:,:,:)=0.0
OPEN(300,FILE="hoge.bin",ACCESS="direct",FORM="unformatted",STATUS="REPLACE",recl=siz)
WRITE(300,rec=1) (((temp(i,j,k),i=1,5),j=1,5),k=1,2)
CLOSE(300)

STOP
END PROGRAM samp

このプログラムで作成したバイナリファイルを、上のプログラムで読み込むことができる。

バイナリ入力におけるエラー

バイナリの入力では、変数の型を適切に指定する必要がある。
もし、バイナリの中身が整数なのに、DOUBLE PRECSIONのように指定してしまうと

forrtl: severe (67): input statement requires too much data, unit ...

のように怒られる。

rec=2以上の場合の入出力

rec(レコード)数が2以上、つまり変数が2つ以上ある場合には、以下のような書き方をする。

最終更新:2011年07月11日 17:51