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程序设计》 中国电力出版社