fortran文件操作open文档格式.docx

上传人:b****8 文档编号:22709897 上传时间:2023-02-05 格式:DOCX 页数:11 大小:46.91KB
下载 相关 举报
fortran文件操作open文档格式.docx_第1页
第1页 / 共11页
fortran文件操作open文档格式.docx_第2页
第2页 / 共11页
fortran文件操作open文档格式.docx_第3页
第3页 / 共11页
fortran文件操作open文档格式.docx_第4页
第4页 / 共11页
fortran文件操作open文档格式.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

fortran文件操作open文档格式.docx

《fortran文件操作open文档格式.docx》由会员分享,可在线阅读,更多相关《fortran文件操作open文档格式.docx(11页珍藏版)》请在冰豆网上搜索。

fortran文件操作open文档格式.docx

SCRATCH'

表示要打开一个暂存文盘,这个时候可以不需要指定文件名称,也就是FILE这个一栏可以忽略。

因为程序本身会自动取一个文件名,至于文件名是啥也不重要,因为暂存盘会在程序结束后自动删除。

UNKNOWN'

由各编译器自定义。

通常会同REPLACE的效果。

这一栏不给定时,默认为STATUS='

ACCESS='

SEQUENTIAL'

or'

DIRECT'

设置读写文件的方法:

读写文件的操作会以“顺序”的方法来做读写,“顺序读取文件”。

DIRET'

读写文件的操作可以任意指定位置,“直接读取文件”。

不赋值时候,默认为:

ACCESS='

RECL=length在顺序读取文件中,RECL字段值用来设置一次可以读取多大容量的数据。

打开“直接读取文件”,RECL=length的length值是用来设置文件中每一个模块单元的分区长度。

length的单位在文本根式下为1个字符,也就是1byte。

在二进制格式下则由编译器自行决定,一般可能为1byte(G77)或4byte(VisualFortran)。

ERR=LABEL 

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

IOSTAT=var 

这个字段会设置一个整数值给后面的整型变量,这是用来说明文件打开的状态,数值会有下面三种情况:

var>

表示读取操作错误

var=0 

表示读取操作正常

var<

表示文件终了

BLANK='

NULL'

ZERO'

用来设置输入数字时,当所设置的格式字段中有空格存在时所代表的意义。

时,空格代表没有东西。

时,空格部分会自动以0代入。

以下是Fortran90添加的功能:

POSITION='

ASIS'

REWIND'

APPEND'

设置文件打开时候的读写位置:

表示文件打开时的读取的位置不特别指定,通常就是在文件的开头。

是默认值。

表示文件打开时的读取位置移到文件的开头。

POSITION='

表示文件打开时的读取位置移到文件的结尾。

ACTION='

READ'

WRITE'

READWRITE'

设置打开文件的读写权限:

表示所打开的文件可以用来读取及写入,这是默认值。

表示所打开的文件只能用来读取数据。

表示所打开的文件只能用来写入数据。

PAD='

YES'

NO'

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

在格式化输入时,不足的字段不会自动以空格填满。

DELIM='

APOSTEROPHE'

QUOTE'

NONE'

纯粹输出字符串内容

输出字符串内容会在前后加上双引号

输出字符串内容会在前后加上单引号

-----------------------------------------

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 

会设置一个数值给在它后面的变量,用来说明文件的读写状态。

stat>

表示读取操作发生错误。

stat=0 

表示读取操作正常。

stat<

表示文件终了。

ERR=errlabel 

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

END=endlabel 

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

以下是fortran90添加功能:

ADVANCE='

设置在文本格式下的顺序文件中,每一次的READ,WRITE命令完成后,

读写位置会不会自动想下移动一行。

ADVANCE='

是默认的状态,每读写一次会向下移动一行。

会暂停自动换行的操作。

使用这个字段时候一定要设置输出入格式,在屏幕输出时可以使用这个设置来控制write命令是否会自动换行。

SIZE=count 

在ADVANCE='

时,才可以使用这个字段。

它会把这一次输出入的字符数目设置给后面的整型变量。

查询文件的状态INQUIRE:

在使用open打开文件的前后,都可以通过inquire命令来查询文件目前的情况,inquire命令中的各个字段和第一小节中open的字段很类似。

检查某个程序是否存在

programex0903

implicitnone

character(len=20):

:

filename="

ex0903.f90"

logicalalive

inquire(file=filename,exist=alive)

if(alive)then

write(*,*)filename,"

exist."

else

doesn'

texist."

endif

ednprogramex0903

详细介绍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)

文件代号

FILE=filename 

文件名

查询文件读取情况,会设置一个整数给后面的变量:

文件读取操作错误

文件读取操作正常

文件终了

发生错误时会转移到复制的代码行继续执行程序。

EXIST=exist 

检查文件是否存在,返回布尔变量,真表示存在,假值表示不存在。

OPEND=opened检查文件是否用已经用open打开,返回布尔变量,真表示已经打开,假表示尚未打开。

NUMBER=number 

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

NAMED=named 

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

ACCESS=access 

检查文件的读取格式,返回一个字符串,可以是:

'

代表文件使用顺序读取格式

代表文件使用直接读取格式

UNDEFINED'

代表没有定义

SEQUENTIAL=sequential 

查看文件是否使用顺序格式,会返回一个字符串,可以是:

代表文件是顺序读取文件

代表文件不是顺序读取文件

代表不知道

DIRECT=direct查看文件是否使用直接格式,会返回一个字符串,可以是:

文件是直接读取文件

文件是非直接读取文件

FORM=form查看文件的保存方法,返回字符串,可以是:

FORMATTED'

打开的是文本文件

UNFORMATTED'

打开的是二进制文件

没有定义

FORMATTED=fmt查看文件是否是文本文件,返回字符串,可以是:

本文件是文本文件

本文件非文本文件

无法判断

UNFORMATTED=fmt查看文件是否是二进制文件,返回字符串,可以是:

本文件是二进制文件

本文件非二进制文件

RECL=length返回open文件时recl栏的设置值。

NEXTREC=nr 

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

BLANK=blank 

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

以下是fortran90的添加功能:

POSITION=position 

返回打开文件时position字段所给定的字符串,可能是'

'

'

ACTION=action 

返回打开文件时action字段所赋值的字符串,可能是'

READ=read 

返回字符串,检查文件是否为只读文件:

文件是只读的

文件不是只读的

WRITE=write 

返回一个字符串,检查文件是否可写入:

文件可以写入

文件不可以写入

无法判定

READWRITE=readwrite返回一个字符串,检查文件是否可以同时读及写:

文件可以同时读写

文件不可以同时读写

 

DELIM=delim 

返回打开文件时,DELIM字段所设置的字符串,返回值可以是:

APOSTROPHE'

PAD=pad 

返回打开文件时PAD字段所设置的字符串,返回值可以是:

其他文件运行命令:

BACKSPACE(UNIT=number,ERR=errlabel,IOSTAT=iostat)把文件读写位置退回一步。

ENDFILE(UNNIT=number,ERR=errlabel,IOSTAT=iostat)使用这个命令会把目前文件的读写位置变成文件的结尾。

REWIND(UNIT=number,ERR=errlabel,IOSTAT=iostat)把文件的读写位置倒回到文件开头。

CLOSE(UNIT=number,STATUS=string,ERR=errlabel,IOSTAT=)把文件关闭,不要进行读写操作。

STAT='

KEEP'

会在文件关闭后,保留这个文件。

是默认状态。

DELETE'

在文件关闭后,消除这个文件。

-------------------------------------------

程序结束时候会自动关闭文件,不过最好要养成自己关闭文件的习惯。

在读文件的时候要懂得略掉一些没有必要的数据,如文件中的注释行。

自由格式的数据文件读取(可以先读入前面的判断字符,结合selectcase或其他方法判断读入的数据)

在open,read,write时使用不同的unit值,就可以打开多个文件。

最好不要同时打开很多个文件。

顺序文件(SEQUENTIAL):

在读写时,不能任意赋值到文件的某个位置读写数据,只能从开头开始一步步向下进行。

在改变文件读写位置时,只能一步步地退,或是直接移回到文件开头。

直接访问文件:

把文件的空间,内容,事先分区成好几个同样大小的小模块,这些模块会自动安顺序编号。

读写文件时,要先赋值文件读写位置在第几个模块,再进行读写的工作。

直接访问文件可以任意到文件的任何一个地方来读写。

在使用直接访问文件时,要小心使用endfile命令,使用这个命令会把目前所在的文件位置之后的数据都清除掉。

二进制文件的操作:

使用二进制文件来做直接读取时,open命令中的recl字段所设置的整数n值所代表的大小会随编译器不同而改变。

每个编译器应该都可以经过设置来改变recl字段的单位大小。

二进制文件没有必要在数据之间用区分符号来增加文件的可读性,因为二进制文件本身就没有可读性。

二进制文件是直接把内存的二进制数据写入文件,就没有所谓的格式化输入/出存在。

存放“精确”及“大量”的数据时,使用二进制文件是比较好的选择。

二进制文件也可以使用顺序格式来操作,顺序格式下显示来的二进制文件,每个数据的前后都会被编译器补上一些额外的信息,所生成的文件不太容易被其他程序读取。

关于以上文件操作详细见《fortran95程序设计》9-3~9-5。

InternalFile(内部文件)

使用写入文件的方法,把数据写到一个字符串变量中。

a=2

b=3

character(len=20):

string

write(unit=string,fmt="

(I2,'

+'

I2,'

='

I2)"

)a,b,a+b!

把字符串变量当作输出的目的。

write(*,*)string

结果:

2+3=5

还可以经过read命令从字符串读入数据:

integer:

a

string="

123"

read(string,*)a

write(*,*)a

在某些情况下需要使用内部文件来设置数据:

使用read命令从键盘输入数据时,如果用户输入错误的数据,会导致死机。

如需要输入整数时却输入英文字母,就可能会死机。

比较好的处理办法是,程序先暂时把数据当作字符串读入,检查字符串中是否含有不合理的字符,如果字符串中都是0~9的数字字符,就把字符串转成整数,不然就请用户在输入一次。

内部文件还可应用在动态改变输出格式,输出格式可以事先存放在字符串中,程序进行时,动态改变字符串内容就可以改变输出格式。

(见书P263)

NAMELIST:

NAMELIST是很特殊的输入/输出方法,收录在f90标准当中,f90中有统一NAMELIST的格式。

NAMELIST可以把一组相关变量封装在一起,输入/出这一组变量时,只要在write/read中的NML字段赋值使用哪一个NAMELIST就行了。

programex0918

implicitnone

integer:

a=1,b=2,c=3

namelist/na/a,b,c

write(*,nml=na)

stop

endprogramex0918

&

NA

1,

2,

3,

/

程序中把a,b,c这三个变量放在名字叫做na的namelist中。

namelist也算是声明的一部分,必须编写在程序执行命令前面。

NAMELIST的语法很类似COMMON,不过使用namelist时一定要取名字:

namelist/nl_name/var1,var2,... 

后面的变量会放在nl_name这个namelist中。

封装好namelist后,在write的NML字段中指名要输出哪一个namelist,就可以把namelist中的变量全部输出。

write(*,nml=na)!

输出na这个namelist

输出namelist时候不能赋值输出格式,f90标准中规定输出namelist时首先会输出符号&

,后面紧接着这个namelist的名字。

接着会根据顺序输出变量的名称,等号以及内容,变量之间用空格或逗号来做分隔,最后使用除号来作结束。

至于每个数值内容会使用何种格式输出由编译器自行决定。

NAMELIST也可以用来输入数据,不过通常都会用来读取文件,不会用在键盘输入。

输入格式需要按照前面的格式。

na....../不需要按照变量顺序输入,程序会自动按照变量名称来设置数值。

变量甚至可以重复输入,不过变量会得到最后一次设置的数值。

namelist通常使用在文本文件的输入/输出中,使用read从文件中读取数据时,会自动从目前的位置向下寻找存放namelist的地方。

programex0920

a(3)

namelist/na/a

open(10,file="

ex0920.txt"

read(10,nml=na)

write(*,"

(3I2)"

)a

endprogram

输入文件的内容如下:

happybirthday

naa=1,2,3/

程序打开时,读写位置在文件的开头,read命令会自动向下寻找na这个namelist的存放位置来读取数据,这边可以看到namelist处理数组的方法,它会在等号后面根据顺序显示数组内容。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 预防医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1