Sun Studio 12: Fortran プログラミングガイド

2.2 直接探査入出力

直接探査入出力、つまりランダム入出力を使用すると、レコード番号によってファイルに直接探査できます。レコード番号は、レコードが書き込まれたときに割り当てられます。順番入出力とは異なり、直接探査出力レコードは、どのような順番でも読み取り、あるいは書き込みできます。しかし、直接探査ファイルでは、すべてのレコードが同じ固定長でなければいけません。直接探査ファイルは、そのファイルの OPEN 文の ACCESS='DIRECT' 指定子によって宣言されます。

直接探査ファイル中の論理レコードは、OPEN 文の RECL= 指定子によって指定されたバイト長を持つ文字列です。 READ 文と WRITE 文で、定義されたレコードサイズより大きな論理レコードを指定してはいけません。レコードサイズはバイト数で指定します。論理レコードのほうが短い場合は差し支えありません。書式なし直接探査書き込みでは、レコード中の書き込まれていない部分は不定となります。書式付き直接探査書き込みでは、書き込まれていないレコードは空白で埋められます。

直接探査の READ 文と WRITE 文には、REC=n 引数が追加されており、読み取りや書き込みを行うレコード番号を指定するようになっています。

例: 直接探査、書式なし


      OPEN( 2, FILE='data.db', ACCESS='DIRECT', RECL=200,
&             FORM='UNFORMATTED', ERR=90 )
      READ( 2, REC=13, ERR=30 ) X, Y

このプログラムでは、ファイルを直接探査、書式なし入出力、200 バイトの固定記レコードで開いたあとで、13 番目のレコードを X と Y に読み込みます。

例: 直接探査、書式付き


      OPEN( 2, FILE='inven.db', ACCESS='DIRECT', RECL=200,
&             FORM='FORMATTED', ERR=90 )
      READ( 2, FMT='(I10,F10.3)', REC=13, ERR=30 ) X, Y

このプログラムでは、ファイルを直接探査、書式なし入出力、200 バイトの固定レコード長で開きます。次に 13 番目のレコードを読み取り、(I10,F10.3) の書式を使用して変換します。

書式付きファイルの場合、書き込まれるレコードのサイズは、FORMAT 文によって決定されます。前述の例では、FORMAT 文はレコードを 20 文字、または 20 バイトに定義しています。並び上のデータの量が FORMAT 文で指定されたレコード長より大きい場合、1 つの書式付き書き込みで複数のレコードを書き込むことができます。このような場合、各後続のレコードには、連続するレコード番号が割り当てられます。

例: 直接探査、書式付き、複数レコード書き込み:


      OPEN( 21, ACCESS='DIRECT', RECL=200, FORM='FORMATTED')
      WRITE(21,'(10F10.3)',REC=11) (X(J),J=1,100)

直接探査装置 21 への書き込みによって、10 の要素からなる 10 のレコードが作成されます。 なぜなら、レコードごとに 10 要素であると書式で指定しているからです。 これらのレコードには、11 から 20 までの番号が割り当てられます。