收藏 分享(赏)

fortran文件操作-open.doc

上传人:精品资料 文档编号:10254133 上传时间:2019-10-25 格式:DOC 页数:17 大小:25.78KB
下载 相关 举报
fortran文件操作-open.doc_第1页
第1页 / 共17页
fortran文件操作-open.doc_第2页
第2页 / 共17页
fortran文件操作-open.doc_第3页
第3页 / 共17页
fortran文件操作-open.doc_第4页
第4页 / 共17页
fortran文件操作-open.doc_第5页
第5页 / 共17页
点击查看更多>>
资源描述

1、1.文件读取的概念:读取:“顺序读取” 和“直接读取”。保存:“文本文件” 和“二进制文件”。二进制文件:读取快,因为保存格式和数据在内存中的保存方法一样,同时也节省空间。2. 文件的操作:open 的使用:使用 open 命令打开文件之后,就可以对文件来做输入输出。example:program ex0901impicit noneopen(unit=10, file=hello.txt) ! 打开 hello.txt 文件, unit 指定文件代码,file 指定文件名称。write(10, *) “hello“ !在代码为 10 的文件中写入 hellostopend program e

2、x0901open 中有很多参数可以使用,详细如下: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: 指定要打开

3、的文件名称,文件名要符合系统规定。windows 下不区分大小写,unix 下则会区分大小写,最好不要使用中文文件名。FORM=FORMATTED OR UNFORMATTEDFORM 字段只有两个值可以设置:FORM=FORMATTED “文本文件”格式来保存FORM=UNFORMATTED “二进制文件”格式保存这一栏不给定时候的默认值是: FORM=FORMATTED STATUS=NEW or OLD or SCRATCH or UNKNOWN 用来说明打开一个新的文件或已经存在的旧文件。STATUS=NEW 打开一个原本不存在的新文件STATUS=OLD 打开一个原来已经存在的文件S

4、TATUS=REPLACE 若文件已经存在则重新创建一次,原来的内容消失;若不存在则会创建新文件。STATUS=SCRATCH 表示要打开一个暂存文盘,这个时候可以不需要指定文件名称,也就是 FILE 这个一栏可以忽略。因为程序本身会自动取一个文件名,至于文件名是啥也不重要,因为暂存盘会在程序结束后自动删除。STATUS=UNKNOWN 由各编译器自定义。通常会同 REPLACE 的效果。!这一栏不给定时,默认为 STATUS=UNKNOWN。ACCESS=SEQUENTIAL or DIRECT 设置读写文件的方法:ACCESS=SEQUENTIAL 读写文件的操作会以“顺序”的方法来做读写

5、, “顺序读取文件” 。ACCESS=DIRET 读写文件的操作可以任意指定位置, “直接读取文件”。!不赋值时候,默认为: ACCESS=SEQUENTIAL。RECL=length 在顺序读取文件中, RECL 字段值用来设置一次可以读取多大容量的数据。打开“直接读取文件” ,RECL length 的 length 值是用来设置文件中每一个模块单元的分区长度。length 的单位在文本根式下为 1 个字符,也就是 1 byte。在二进制格式下则由编译器自行决定,一般可能为 1 byte (G77) 或 4 byte (Visual Fortran)。ERR=LABEL 这个字段用来设置当

6、文件打开发生错误时,程序会跳跃到 LABEL 所指定的行代码处来继续执行程序。IOSTAT=var 这个字段会设置一个整数值给后面的整型变量,这是用来说明文件打开的状态,数值会有下面三种情况:var0 表示读取操作错误var=0 表示读取操作正常var0 表示读取操作发生错误。stat=0 表示读取操作正常。stat0 文件读取操作错误stat=0 文件读取操作正常stat0 文件终了ERR=errlabel 发生错误时会转移到复制的代码行继续执行程序。EXIST=exist 检查文件是否存在,返回布尔变量,真表示存在,假值表示不存在。OPEND=opened 检查文件是否用已经用 open

7、打开,返回布尔变量,真表示已经打开,假表示尚未打开。NUMBER=number 用文件名来查询这个文件所给定的代码。NAMED=named 查询文件是否取了名字,也就是检查文件是否为临时保存盘,返回值为逻辑数。ACCESS=access 检查文件的读取格式,返回一个字符串,可以是:SEQUENTIAL 代表文件使用顺序读取格式DIRECT 代表文件使用直接读取格式UNDEFINED 代表没有定义SEQUENTIAL=sequential 查看文件是否使用顺序格式,会返回一个字符串,可以是:YES 代表文件是顺序读取文件NO 代表文件不是顺序读取文件UNKNOWN 代表不知道DIRECTdire

8、ct 查看文件是否使用直接格式,会返回一个字符串,可以是:YES 文件是直接读取文件NO 文件是非直接读取文件UNKNOWN 代表不知道FORM=form 查看文件的保存方法,返回字符串,可以是:FORMATTED 打开的是文本文件UNFORMATTED 打开的是二进制文件UNDEFINED 没有定义FORMATTED=fmt 查看文件是否是文本文件,返回字符串,可以是:YES 本文件是文本文件NO 本文件非文本文件UNDEFINED 无法判断UNFORMATTED=fmt 查看文件是否是二进制文件,返回字符串,可以是:YES 本文件是二进制文件NO 本文件非二进制文件UNKNOWN 无法判断

9、RECL=length 返回 open 文件时 recl 栏的设置值。NEXTREC=nr 返回下一次文件读写的位置。BLANK=blank 返回值是字符串,用来查看 open 文件时的 blank 参数所给定的字符串值。以下是 fortran 90 的添加功能:POSITION=position 返回打开文件时 position 字段所给定的字符串, 可能是REWIND,APPEND, ASIS, UNDEFINEDACTION=action 返回打开文件时 action 字段所赋值的字符串,可能是READ, WRITE,READWRITE。READ=read 返回字符串,检查文件是否为只读

10、文件:YES 文件是只读的NO 文件不是只读的UNKNOWN 无法判断WRITE=write 返回一个字符串,检查文件是否可写入:YES 文件可以写入NO 文件不可以写入UNKNOWN 无法判定READWRITE=readwrite 返回一个字符串,检查文件是否可以同时读及写:YES 文件可以同时读写NO 文件不可以同时读写UNKNOWN 无法判定DELIM=delim 返回打开文件时,DELIM 字段所设置的字符串,返回值可以是:APOSTROPHE, QUOTE, NONE, UNDEFINEDPAD=pad 返回打开文件时 PAD 字段所设置的字符串,返回值可以是:YES, NO。其他文

11、件运行命令: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 会在文件关闭后,保

12、留这个文件。是默认状态。STAT=DELETE 在文件关闭后,消除这个文件。!程序结束时候会自动关闭文件,不过最好要养成自己关闭文件的习惯。!在读文件的时候要懂得略掉一些没有必要的数据,如文件中的注释行。!自由格式的数据文件读取(可以先读入前面的判断字符,结合select case 或其他方法判断读入的数据)!在 open,read,write 时使用不同的 unit 值,就可以打开多个文件。最好不要同时打开很多个文件。顺序文件(SEQUENTIAL):在读写时,不能任意赋值到文件的某个位置读写数据,只能从开头开始一步步向下进行。在改变文件读写位置时,只能一步步地退,或是直接移回到文件开头。直

13、接访问文件:把文件的空间,内容,事先分区成好几个同样大小的小模块,这些模块会自动安顺序编号。读写文件时,要先赋值文件读写位置在第几个模块,再进行读写的工作。直接访问文件可以任意到文件的任何一个地方来读写。在使用直接访问文件时,要小心使用endfile 命令,使用这个命令会把目前所在的文件位置之后的数据都清除掉。二进制文件的操作:使用二进制文件来做直接读取时,open 命令中的recl 字段所设置的整数 n 值所代表的大小会随编译器不同而改变。每个编译器应该都可以经过设置来改变 recl 字段的单位大小。二进制文件没有必要在数据之间用区分符号来增加文件的可读性,因为二进制文件本身就没有可读性。二

14、进制文件是直接把内存的二进制数据写入文件,就没有所谓的格式化输入出存在。存放“精确” 及“大量” 的数据时,使用二进制文件是比较好的选择。二进制文件也可以使用顺序格式来操作,顺序格式下显示来的二进制文件,每个数据的前后都会被编译器补上一些额外的信息,所生成的文件不太容易被其他程序读取。关于以上文件操作详细见fortran 95 程序设计 9 395 。Internal File(内部文件)使用写入文件的方法,把数据写到一个字符串变量中。example:a=2b=3character (len=20) : stringwrite (unit=string, fmt=“(I2,+,I2,=,I2)

15、“) a, b, a+b !把字符串变量当作输出的目的。write(*, *) string结果: 2+ 3= 5还可以经过 read 命令从字符串读入数据:integer : acharacter (len=20) : string=“123“read(string, *) awrite(*, *) a在某些情况下需要使用内部文件来设置数据:使用 read 命令从键盘输入数据时,如果用户输入错误的数据,会导致死机。如需要输入整数时却输入英文字母,就可能会死机。比较好的处理办法是,程序先暂时把数据当作字符串读入,检查字符串中是否含有不合理的字符,如果字符串中都是 09 的数字字符,就把字符串转

16、成整数,不然就请用户在输入一次。内部文件还可应用在动态改变输出格式,输出格式可以事先存放在字符串中,程序进行时,动态改变字符串内容就可以改变输出格式。 (见书 P263)NAMELIST:NAMELIST 是很特殊的输入输出方法,收录在 f90 标准当中,f90中有统一 NAMELIST 的格式。NAMELIST 可以把一组相关变量封装在一起,输入出这一组变量时,只要在 write/read 中的 NML 字段赋值使用哪一个 NAMELIST 就行了。example:program ex0918implicit noneinteger : a = 1, b = 2, c= 3namelist

17、/na/ a,b,cwrite(*,nml=na)stopend program ex0918&NAA = 1,B = 2,C = 3,/程序中把 a,b,c 这三个变量放在名字叫做 na 的 namelist 中。namelist也算是声明的一部分,必须编写在程序执行命令前面。NAMELIST 的语法很类似 COMMON,不过使用 namelist 时一定要取名字:namelist /nl_name/ var1, var2, . !后面的变量会放在 nl_name这个 namelist 中。封装好 namelist 后,在 write 的 NML 字段中指名要输出哪一个namelist,就可

18、以把 namelist 中的变量全部输出。write(*,nml=na) !输出 na 这个 namelist输出 namelist 时候不能赋值输出格式, f90 标准中规定输出 namelist时首先会输出符号&,后面紧接着这个 namelist 的名字。接着会根据顺序输出变量的名称,等号以及内容,变量之间用空格或逗号来做分隔,最后使用除号来作结束。至于每个数值内容会使用何种格式输出由编译器自行决定。NAMELIST 也可以用来输入数据,不过通常都会用来读取文件,不会用在键盘输入。输入格式需要按照前面的格式。&na / 不需要按照变量顺序输入,程序会自动按照变量名称来设置数值。变量甚至可以

19、重复输入,不过变量会得到最后一次设置的数值。namelist 通常使用在文本文件的输入输出中,使用 read 从文件中读取数据时,会自动从目前的位置向下寻找存放 namelist 的地方。example:program ex0920implicit noneinteger : a(3)namelist /na/ aopen(10, file=“ex0920.txt“)read(10, nml=na)write(*, “(3I2)“) astopend program输入文件的内容如下:happy birthday&na a = 1,2,3/程序打开时,读写位置在文件的开头,read 命令会自动向下寻找 na这个 namelist 的存放位置来读取数据,这边可以看到 namelist 处理数组的方法,它会在等号后面根据顺序显示数组内容。

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

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报