Sun Studio 12:Fortran 编程指南

2.2 直接 I/O

直接或随机 I/O 允许通过记录号直接访问文件。记录号在写入记录时分配。与顺序 I/O 不同,直接 I/O 记录可以按任何顺序读写。但是,在直接访问文件中,所有记录必须具有相同的固定长度。直接访问文件用文件的 OPEN 语句中的 ACCESS=’DIRECT’ 说明符声明。

直接访问文件中的逻辑记录是字节字符串,串长度由 OPEN 语句的 RECL= 说明符指定。READWRITE 语句指定的逻辑记录不能大于定义的记录大小。(记录大小以字节单位指定。)允许更短的记录。直接写入非格式化数据将使记录的未填写部分仍保持未定义。直接写入格式化数据将使未填写的记录用空格进行填充。

直接访问 READWRITE 语句另外还有一个参数 REC=n,用来指定要读取或写入的记录号。

示例:直接访问,非格式化:


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

本程序以直接访问、非格式化 I/O、记录固定长度为 200 字节的方式打开一个文件,然后将第十三条记录读入 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

本程序以直接访问、格式化 I/O、记录固定长度为 200 字节的方式打开一个文件。然后读取第十三条记录,并以 (I10,F10.3) 格式对其进行转换。

对于格式化文件,所写记录的大小由 FORMAT 语句确定。在上述示例中,FORMAT 语句所定义的记录大小为 20 个字符或字节。如果列表中的数据总量大于 FORMAT 语句中指定的记录大小,则可通过单条格式化写指令写入一条以上的记录。在此种情况下,会为随后的每一条记录赋予连续的记录号。

示例:直接访问、格式化、多记录写入


      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 进行编号。