fortran特定位置文件读写(open、write和read命令)

fortran在科学计算中常常需要从文件中读出和写入大量数据,因此指定读写位置就尤其重要,本文介绍三个命令的主要选项。

打开命令open的选项

当我们使用open命令时,默认的打开选项为:
open(UNIT=number, FILE=‘filename’, FORM=‘FORMATTED’, STATUS=‘UNKNOWN’, ACCESS=‘SEQUENTIAL’, RECL=length, ERR=label, IOSTAT=iostat, BLANK=‘NULL’, POSITION=‘ASIS’, ACTION=‘READWRITE’, PAD=‘YES’, DELIM=‘NONE’)

每个选项的含义与注意事项
UNIT=number,number应该为整数,最好避开1、2、5、6;此步骤为必需
FILE=‘filename’,加引号,输入文件名,此步骤为必需
FORM=‘FORMATTED’, 该选项表示以文本文件保存,另一个选项‘UNFORMATTED’表示以二进制文件保存
STATUS=‘UNKNOWN’, 其他选项有‘NEW’表示该文件原本不存在,‘OLD’表示改文件原本就存在,‘REPLACE’表示覆盖原本的文件,'SCRATCH’表示打开一个暂存盘,不需要文件名
ACCESS=‘SEQUENTIAL’, 表示顺序读取文件,需要按顺序读写文件,另一个选项‘DIRECT’表示直接读取文件,可指定任意位置读写
RECL=length, length的单位是bytes,即设置每一模块的读取分区长度
ERR=label, 当读取发生错误时,可以跳跃到label后继续读取
IOSTAT=var, 当返回var>0表示读取发生错误,var=0表示读取正常,var<0表示文件终了
BLANK=‘NULL’, 当输入数字时,该选项表示空格代表空,另一个选项‘ZEROS’表示空格代表0
POSITION=‘ASIS’, 该选项是FORTRAN90添加功能,打开文件时读取位置不特别指定,‘REWIND’表示读取位置在文件开头,‘APPEND’表示读取位置在文件结尾
ACTION=‘READWRITE’, 该选项是FORTRAN90添加功能,表示文件可以用来读写,选项‘READ’表示该选项只能用来读,选项‘WRITE’表示该选项只能用来写
PAD=‘YES’, 该选项是FORTRAN90添加功能,表示格式化输入时,前面不足的字段可以被空格填满,选项‘NO’表示前面不足的字段不会自动填满
DELIM=‘NONE’,该选项是FORTRAN90添加功能,表示纯粹输出字符串内容,选项‘QUOTE’表示输出内容会加双引号,选项‘APOSTROPHE’表示输出内容会加单引号

读写命令read/write的选项

当我们使用读写命令read/write时,默认选项是
read/write(UNIT=number, FMT=‘format’, NLM=namelist, REC=record, IOSTAT=stat, ERR=label, END=‘endlabel’, ADVANCE=‘YES’, SIZE=size)

每个选项的含义与注意事项:
UNIT=number, 指定输出位置,位置在open中定义
FMT=‘format’, 指定输出格式,format用法会在之后写到
NLM=namelist,
REC=record, 设置读写文件的位置,为数字,代表从该文件第record个字节处开始读写,每次读写的字节数由open命令的RECL选项决定。
IOSTAT=stat, 返回文件读写状态stat,stat>0表示读写错误,stat=0表示读写正常,stat<0表示读写到底
ERR=label, 当读取发生错误时,可以跳跃到label后继续读取
END=‘endlabel’, 读写文件到末尾时,转移到endlabel继续读写
ADVANCE=‘YES’, 每读写一次会向下移动一行,另一个选项‘NO’表示读写一次之后不会向下移动,该选项是F90后新增功能
SIZE=size,当advance=‘NO’时,才可使用,会把本次输入输出字符数目设置给后面的整形变量

以上内容转载自《Fortran程序设计》彭国伦编著。

列举一个示例:

C     #This is fortran 90 code
      INTEGER A,B
      OPEN(1,FILE="reskb2",FORM='FORMATTED',
     &      ACCESS='DIRECT',ACTION='READ',RECL=8)
      A=6
      READ(1,400,REC=A)  C1,C2
400   FORMAT(2A4,A4)
      WRITE(*,400)  C1,C2
      END

版权声明:本文为weixin_44498266原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。