fortran文件操作From:《Fortran95程序设计》彭国伦1.文件读取的概念:读取:“顺序读取”和“直接读取”。保存:“文本文件”和“二进制文件”。二进制文件:读取快,因为保存格式和数据在内存中的保存方法一样,同时也节省空间。----------------------------------2.文件的操作:----------------------------------open的使用:使用open命令打开文件之后,就可以对文件来做输入输出。example:programex0901impicitnoneopen(unit=10,file='hello.txt')!打开hello.txt文件,unit指定文件代码,file指定文件名称。write(10,*)hello!在代码为10的文件中写入hellostopendprogramex0901open中有很多参数可以使用,详细如下: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字段只有两个值可以设置:FORM='FORMATTED'“文本文件”格式来保存FORM='UNFORMATTED'“二进制文件”格式保存这一栏不给定时候的默认值是:FORM='FORMATTED'STATUS='NEW'or'OLD'or'SCRATCH'or'UNKNOWN'用来说明打开一个新的文件或已经存在的旧文件。STATUS='NEW'打开一个原本不存在的新文件STATUS='OLD'打开一个原来已经存在的文件STATUS='REPLACE'若文件已经存在则重新创建一次,原来的内容消失;若不存在则会创建新文件。STATUS='SCRATCH'表示要打开一个暂存文盘,这个时候可以不需要指定文件名称,也就是FILE这个一栏可以忽略。因为程序本身会自动取一个文件名,至于文件名是啥也不重要,因为暂存盘会在程序结束后自动删除。STATUS='UNKNOWN'由各编译器自定义。通常会同REPLACE的效果。!这一栏不给定时,默认为STATUS='UNKNOWN'。ACCESS='SEQUENTIAL'or'DIRECT'设置读写文件的方法:ACCESS='SEQUENTIAL'读写文件的操作会以“顺序”的方法来做读写,“顺序读取文件”。ACCESS='DIRET'读写文件的操作可以任意指定位置,“直接读取文件”。!不赋值时候,默认为:ACCESS='SEQUENTIAL'。RECL=length在顺序读取文件中,RECL字段值用来设置一次可以读取多大容量的数据。打开“直接读取文件”,RECL=length的length值是用来设置文件中每一个模块单元的分区长度。length的单位在文本根式下为1个字符,也就是1byte。在二进制格式下则由编译器自行决定,一般可能为1byte(G77)或4byte(VisualFortran)。ERR=LABEL这个字段用来设置当文件打开发生错误时,程序会跳跃到LABEL所指定的行代码处来继续执行程序。IOSTAT=var这个字段会设置一个整数值给后面的整型变量,这是用来说明文件打开的状态,数值会有下面三种情况:var0表示读取操作错误var=0表示读取操作正常var0表示文件终了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='APOSTEROPHE'or'QUOTE'or'NONE'DELIM='NONE'纯粹输出字符串内容DELIM='QUOTE'输出字符串内容会在前后加上双引号DELIM='APOSTEROPHE'输出字符串内容会在前后加上单引号-----------------------------------------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=stat会设置一个数值给在它后面的变量,用来说明文件的读写状态。stat0表示读取操作发生错误。stat=0表示读取操作正常。stat0表示文件终了。ERR=errlabel指定在读写过程中发生错误时,会转移到某个行代码来继续执行程序。END=endlabel指定在读写到文件末尾时,要转移到某个行代码来继续执行程序。以下是fortran90添加功能:ADVANCE='YES'or'NO'设置在文本格式下的顺序文件中,每一次的READ,WRITE命令完成后,读写位置会不会自动想下移动一行。ADVANCE='YES'是默认的状态,每读写一次会向下移动一行。ADVANCE='NO'会暂停自动换行的操作。!使用这个字段时候一定要设置输出入格式,在屏幕输出时可以使用这个设置来控制write命令是否会自动换行。SIZE=count在ADVANCE='NO'时,才可以使用这个字段。它会把这一次输出入的字符数目设置给后面的整型变量。----------------------------------查询文件的状态INQUIRE:在使用open打开文件的前后,都可以通过inquire命令来查询文件目前的情况,inquire命令中的各个字段和第一小节中open的字段很类似。example:!检查某个程序是否存在programex0903implicitnonecharacter(len=20)::filename=ex0903.f90logicalaliveinquire(file=filename,exist=alive)if(alive)thenwrite(*,*)filename,exist.elsewrite(*,*)filename,doesn'texist.endifstopednprogramex0903详细介绍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查询文件读取情况,会设置一个整数给后面的变量:stat0文件读取操作错误stat=0文件读取操作正常stat0文件终了ERR=errlabel发生错误时会转移到复制的代码行继续执行程序。EXIST=exist检查文件是否存在,返回布尔变量,真表示存在,假值表示不存在。OPEND=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'本文件非文本文件'UNDEFINED'无法判断UNFORMATTED=fmt查看文件是否是二进制文件,返回字符串,可以是:'YES'本文件是二进制文件'NO'本文件非二进制文件'UNKNOWN'无法判断RECL=length返回open文件时recl栏的设置值。NEXTREC=nr返回下一次文件读写的位置。BLANK=blank返回值是字符串,用来查看open文件时的blank参数所给定的字符串值。以下是fortran90的添加功能:POSITION=position返回打开文件时position字段所给定的字符串,可能是'REWIND','APPEND','ASIS','UNDEFINED'ACTION=action返回打开文件时action字段所赋值的字符串,可能是'READ','WRITE','READWRITE'。READ=read返回字符串,检查文件是否为只读文件:'YES'文件是只读的'NO'文件不是只读的'UNKNOWN'无法判断WRITE=write返回一个字符串,检查文件是否可写入:'YES'文件可以写入'NO'文件不可以写入'UNKNOWN'无法判定READWRITE=readwrite返回一个字符串,检查文件是否可以同时读及写:'YES'文件可以同时读写'NO'文件不可以同时读写'UNKNOWN'无法判定DELIM=delim返回打开文件时,DELIM字段所设置的字符串