fortran95 文件读写等操作的字段参数总结

1. 打开文件(open)

open(unit=number,file='filename',form='...',status='...',access='...',recl=length,err=label,iostat=iostat,blank='...',position='...',action=action,pad='...',delim='...')

unit=number

number必须是一个正整数,它可以使用变量或是常量来赋值。number值最好避开1,2,5,6,因为2,6是默认的输出位置,也就是屏幕。1、5则是默认的输入位置,也就是键盘。

file='filename'

这个字段用来指定所要打开的文件名称,文件名要符合操作系统规定,像是Windows下文件名不区分大小写,UNIX中则会区分大小写,还有不管使用哪一个操作系统,最好都不要使用中文文件名。

form='formatted' or 'unformatted'

form字段只有两个值可以设置:'formatted'或'unformatted'。
form='formatted'表示文件使用“文本文件”格式来保存;
form='unformatted'表示文件使用“二进制文件”格式来保存。
这一栏不给定时,默认值为form='formatted'。

status='new' or 'old' or 'replace' or 'scratch' or 'unknown'

status='new' 表示这个文件原本不存在,是第一次打开;
status='old' 表示这个文件原本就已经存在;
status='replace' 文件若已存在,会重新创建一次,原本的内容会消失。文件若不存在,会创建新文件;
status='scratch' 表示要打开一个暂存盘,这个时候可以不需要指定文件名称,也就是file这一栏可以忽略,因为程序本身会自动取一个文件名,至于文件名是什么也不重要,因为暂存盘会在程序结束后自动删除;
status='unknown' 由各编译器自定义,通常会同replace的效果。
这一栏不给定时,默认值为unknown。

access='sequential' or 'direct'

这个字段用来设置读写文件的方法。
access='sequential' 读写文件的操作会以“顺序”的方法来做读写,这就是“顺序读写文件”;
access='direct' 读写文件的操作可以任意指定位置,这就是“直接读取文件”。
不赋值时,默认值为sequential。

recl=lengh

在顺序读取文件中,recl字段值用来设置一次可以读写多大容量的数据。
在打开“直接读取文件”时,recl=length的length值是用来设置文件中每一个模块单元的区分长度。
length的单位在文本格式下为1字符,也就是1byte。在二进制格式下则由编译器自行决定,一般可能为1byte(G77)或4bytes(Visual Fortran)。

err=label

这个字段用来设置当文件打开发生错误时,程序会跳跃到label所指的代码行处来继续执行程序。

iostat=var

这个字段会设置一个整数值给后面的整型变量,这是用来说明文件的打开状态,数值会有下面三种情况:
var>0 表示读取操作发生错误;
var=0 表示读取操作正常;
var<0 表示文件终了。

blank='null' or 'zero'

这用来设置文件输入数字时,当所设置的格式字段中有空格存在时所代表的意义。blank='null'时,空格代表没有东西。blank='zero'时,空格部分会自动以0代入。

Fortran90添加的功能:

position='asis' or 'rewind' or 'append'

position='asis' 表示文件打开时的读取位置,不特别指定位置,通常就是在文件开头,这是默认值;
position='rewind' 表示文件打开时的读取位置移到文件的开头;
position='append' 表示文件打开时的读取位置移到文件的结尾。

action='read' or 'write' or 'readwrite'

设置所打开文件的读写权限:
action='readwrite' 表示所打开文件可以用来读取及写入,这是默认值;
action='read' 表示所打开的文件只能用来读取数据;
action='write' 表示所打开的文件只能用来写入数据。

pad='yes' or 'no'

pad='yes' 在格式化输入时,最前面的不足字段会自动以空格填满,默认值是pad='yes';
pad='no' 在格式化输入时,不足的字段不会自动以空格填满。

delim='apostrophe' or 'quote' or 'none'

delim='none' 纯粹输出字符串内容;
delim='quote' 输出字符串会在前后加上双引号;
delim='apostrophe' 输出字符串会在前后加上单引号。

2. 读写文件(write/read)

write/read(unit=number,fmt=format,nml=namelist,rec=record,iostat=stat,err=errlabel,end=endlabel,advance=advance,size=size)

unit=number

这个字段用来指定read/write所使用的输入/输出的位置。

fmt=format

指定输入输出格式使用。

nml=namelist

指定读写某个namelist的内容。

rec=record

在直接读取文件中,设置所要读写的文件模块位置。

iostat=var

这个字段会设置一个整数值给后面的整型变量,用来说明文件的读写状态:
var>0 表示读取操作发生错误;
var=0 表示读取操作正常;
var<0 表示文件终了。

err=errlabel

指定在读写过程中发生错误时,会转移到某个行代码来继续执行程序。

end=endlabel

指定在读写到文件末尾时,要转移到某个行代码来继续执行程序。

Fortran90添加的功能:

advance='yes' or 'no'

设置在文本格式下的顺序文件中,每一次的read/write命令完成之后,读写位置会不会自动向下移动一行。
advance='yes' 是默认的状态,每读写一次会自动下移一行;
advance='no' 会暂停自动换行的操作,
使用这个字段时,一定要设置输入输出格式,在平面输出时可以使用这个设置来控制write命令是否会自动换行。

size=count

当advance='no'时,才可以使用这个字段,它会把这一次输入输出的字符数目设置给后面的整型变量。

3. 查询文件状态(inquire)

inquire(unit=number,file=filename,iostat=stat,err=label,exist=exist,opened=opened,number=number,named=named,access=access,sequential=sequential,direct=direct,form=form,formatted=formatted,unformatted=unformatted,recl=recl)

unit=number

赋值所要查询的文件代号。

file=filename

赋值所要查询的文件名称。

iostat=stat 

查询文件读取情况:
var>0 表示读取操作发生错误;
var=0 表示读取操作正常;
var<0 表示文件终了。

err=errlabel

指定inquire发生错误时,会转移到某个行代码来继续执行程序。

exist=exist

检查文件是否存在,会返回一个布尔变量给后面的逻辑变量,返回真值表示文件存在,返回假值表示文件不存在。

opened=opened

检查文件是否已经使用open命令打开,会返回一个布尔变量给后面的逻辑变量,返回真值表示文件已经打开,返回假值表示文件尚未打开。

number=number

由文件名来查询这个文件所给定的代码。

named=named

查询文件是否取了名字,也就是检验文件是否为临时保存盘,返回值为逻辑数。

access=access

检查文件的读取格式,会返回一个字符串,字符串可以是:
'sequential' 代表文件使用顺序读写格式;
'direct' 代表文件使用直接读取格式;
‘undefined’ 代表没有定义。

sequential=sequential

查看文件时候采用顺序格式,会返回一个字符串:
'yes' 代表文件是顺序读取文件;
'no' 代表文件不是顺序读取文件;
'unknown' 代表不知道。

direct=direct

查看文件时候采用直接格式,会返回一个字符串:
'yes' 代表文件是直接读取文件;
'no' 代表文件不是直接读取文件;
'unknown' 代表不知道。

form=form

查看文件的保存方法,会返回一个字符串:
'formatted' 打开的是文本文件;
'unformatted' 打开的是二进制文件;
'undefined' 没有定义。

formatted=fmt

查看文件是否为文本文件,返回一个字符串:
'yes' 代表本文件是文本文件;
'no' 代表本文件不是文本文件;
'unknown' 无法判定。

unformatted=fmt

查看文件是否为二进制文件,返回一个字符串:
'yes' 代表本文件是二进制文件;
'no' 代表本文件不是二进制文件;
'unknown' 无法判定。

recl=length

返回open文件时recl栏的设定值。

nextrec=nr

返回下一次文件读写的位置。

blank=blank

返回值是字符串,用来查看open文件时的blank参数所给定的字符串值。

Fortran90添加的功能:

position=position

返回打开文件时position字段给定的字符串。

action=action

返回打开文件时action字段给定的字符串。

read=read

返回字符串,检查文件是否为只读文件:
'yes' 代表本文件是只读的;
'no' 代表本文件不是只读的;
'unknown' 无法判定。

write=write

返回字符串,检查文件是否可以写入:
'yes' 代表本文件是可以写入的;
'no' 代表本文件不是可以写入的;
'unknown' 无法判定。

readwrite=readwrite

返回字符串,检查文件是否可以同时读写:
'yes' 代表本文件是可以同时读写;
'no' 代表本文件不是可以同时读写;
'unknown' 无法判定。

delim=delim

返回打开文件时delim字段给定的字符串。

pad=pad

返回打开文件时pad字段给定的字符串。

4. 其它文件运行命令

backspace(unit=number,err=errlabel,iostat=iostat)

把文件的读写位置返回一步,其它参数同上。

endfile(unit=number,err=errlabel,iostat=iostat)

把目前文件的读写位置变成文件的结尾,其它同上。

rewind(unit=number,err=errlabel,iostat=iostat)

把文件的读写位置倒回文件开头,其它同上。

close(unit=number,status=string,err=errlabel,iostat=iostat)

把文件关闭,不再进行读写操作。
status='keep' 在文件关闭后,保留这个文件,这是默认的状态;
status='delete' 在文件关闭后,消除这个文件。


 参考资料: 彭国伦 《Fortran95程序设计》 中国电力出版社

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章