fortran文件操作-open_第1页
fortran文件操作-open_第2页
fortran文件操作-open_第3页
fortran文件操作-open_第4页
fortran文件操作-open_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

2、p end program ex0901open中有很多参数可以使用,详细如下:OPEN(UNIT 二 number,FILE= "filename',FORM =STATUS='.', ACCESS =RECL : length, ERR=labeLIOSTAT=iostat, BLANK:POSITION=ACnON=action, PAD=DELIM='.*)UNIT='number': number必须是一个正整数,它可以使用变量或是 常量来赋值。number最好避开1,2,5,6。因为2,6是默认的输出位置, 也就是屏幕。1,

3、 5则是默认的输入位置,键盘。FILE=*filename':指定要打开的文件名称,文件名要符合系统规定。 windows下不区分大小写,unix下则会区分大小写,最好不要使用中 文文件名。FORM='FORMATTED' OR 'UNFORMATTED1FORM字段只有两个值可以设置:FORM=* FORMATTED,”文本文件“格式来保存FORM=1 UNFORMATTED' ”二进制文件“格式保存这一栏不给定时候的默认值是:FORM='FORMATTED'STATUS:'NEW' or 'OLD' o

4、r 'SCRATCH' or , UNKNOWN,用来说明打开一个新的文件或已经存在的旧文件。STATUS:'NEW'打开一个原本不存在的新文件STATUS: 'OLD'打开一个原来已经存在的文件STATUS='REPLACE'若文件已经存在则重新创建一次,原来的内 容消失;若不存在则会创建新文件。STATUS='SCRATCH' 表示要打开一个暂存文盘,这个时候可以不 需要指定文件名称,也就是F工LE这个一栏可以忽略。因为程序本身会 自动取一个文件名,至于文件名是啥也不重要,因为暂存盘会在程序结 束后自动删除。S

5、TATUS='UNKNOWN,由各编译器自定义。通常会同REPLACE的 效果。!这一栏不给定时,默认为6TATU5='UNKNOWN'。ACCESS= 'SEQUENTIAL' or DIRECT' 设置读写文件的方法:ACCESS='SEQUENTIAL'读写文件的操作会以“顺序”的方法来做读写,“顺序读取文件”。ACCESS='DIRET'读写文件的操作可以任意指定位置,“直接读取文件”。 !不赋值时候,默认为:ACCESS= SEQUENTIAL* oRECL=length在顺序读取文件中,RECL字段值用

6、来设置一次可以读取多大容量的数据。打开“直接读取文件“,RECL=length的length值是用来设置文件中每 一个模块单元的分区长度。length的单位在文本根式下为1个字符,也就是1 byte。在二进制格 式下则由编译器自行决定,一般可能为1 byte (G77)或4 byte (Visual Fortran)oERR:LABEL这个字段用来设置当文件打开发生错误时,程序会跳跃到 LABEL所指定的行代码处来继续执行程序。IOSTAT=var这个字段会设置一个整数值给后面的整型变量,这是用来说明文件打开的状态,数值会有下面三种情况:var>0表示读取操作错误var=O表示读取操作正

7、常var<0表示文件终了BLANK:'NULL' or ,ZERO,用来设置输入数字时,当所设置的格式 字段中有空格存在时所代表的意义。BLANK='NULL时,空格代表没有东西。BLANK='ZER。'时,空格部 分会自动以0代入。以下是Fortran 90添加的功能:POSrriON='ASIS' or REWIND* or 'APPEND, 设置文件打开时候的读写位置:POSmONASIS1表示文件打开时的读取的位置不特别指定,通常就是在文件的开头。是默认值。POSITION=IREWIND,表示文件打开时的读取位置移

8、到文件的开头。POSITION=IAPPEND,表示文件打开时的读取位置移到文件的结尾。ACTION=IREADI or 1 WRITE1 or 1 RE AD WRITE1 设置打开文件的读写权限:ACnON=lREADWRITE,表示所打开的文件可以用来读取及写入,这是默认值。ACTION=,READ,表示所打开的文件只能用来读取数据。AEON='WRITE'表示所打开的文件只能用来写入数据。PAD=,YESI or NO1PAD='yES 在格式化输入时,最前面的不足字段会自动以空格填满,默认值是PAD='yES。PAD二'N。'在格式化输

9、入时,不足的字段不会自动以空格填满。DELIM=,APOSTEROPHE, or 'QUOTE1 or 'NONE'DEL工M='NONE'纯粹输出字符串内容DEL工M='QUOTE'输出字符串内容会在前后加上双引号DELIM=' APOSTEROPHE1 输出字符串内容会在前后加上单引号WRITE & READ的使用(详细):WRITE/READ(UNIT=number, FMT=format, NML=namelist/REC=record, IOSTAT=stat, ERR=errlabel, END=endlabe

10、l,ADVANCE=advance, SIZE=size)UNIT=number指定read/write所使用的输入输出的位置。FMT=format指定输入输出格式的使用。NML=namelist指定读写某个NAMEL工5T的内容(后续介绍)。REC=record在直接读取文件中,设置所要读写的文件的模块位置。IOSTAT=stat会设置一个数值给在它后面的变量,用来说明文件的读写状态。stat>0表示读取操作发生错误。stat=O表示读取操作正常。stat<0表示文件终了。ERR=errlabel指定在读写过程中发生错误时,会转移到某个行代码来继续执行程序。END=endlabe

11、l指定在读写到文件末尾时,要转移到某个行代码来继续执行程序。以下是fortran 90添加功能:ADVANCEYES' or 'NO'设置在文本格式下的顺序文件中,每一次的READ, WRITE命令完成后,读写位置会不会自动想下移动一行。ADVANCE: ,YES, 是默认的状态,每读写一次会向下移动一 行。ADVANCE: 'NO'会暂停自动换行的操作。!使用这个字段时候一定要设置输出入格式,在屏幕输出时可以 使用这个设置来控制write命令是否会自动换行。SIZE=count 在ADVANCE:'N。'时,才可以使用这个字段。它会 把

12、这一次输出入的字符数目设置给后面的整型变量。查询文件的状态工NQU1IRE:在使用叩en打开文件的前后,都可以通过inquire命令来查询文件目 前的情况,inquire命令中的各个字段和第一小节中open的字段很类 似。example: !检查某个程序是否存在program ex0903implicit nonecharacter(len=20) : filename = "ex0903.f90"logical aliveinquire(file=filename/ exist=alive)if (alive) thenwrite (*, *) filename, &qu

13、ot; exist."elsewrite (*, *) filename, "doesn't exist."end ifstopedn program ex0903详细介绍inquire的使用方法:INQUIRE(UNIT=number, FILE=filename, IOST AT ;stat, ERR=label, EX工5T:exist, OPENED=opened/ NUMBER=number, NAMEb=named, ACCESS=access, SEQUENTIAL=sequential, DIRECT=direct, FORM=form,

14、FORM ATTED=formatted, UNFORMATTED=unformatted, RECL=recl)UNIT=number 文件代号FILE=filename 文件名IOSTAT=stat 查询文件读取情况,会设置一个整数给后面的变量:stat>0文件读取操作错误stat=O文件读取操作正常stat<0文件终了ERR=errlabel发生错误时会转移到复制的代码行继续执行程序。EXIST=exist检查文件是否存在,返回布尔变量,真表示存在,假值表示不存在。OPEND=opened检查文件是否用已经用叩en打开,返回布尔变量, 真表示已经打开,假表示尚未打开。NUMB

15、ER=number 用文件名来查询这个文件所给定的代码。NAMED5amed 查询文件是否取了名字,也就是检查文件是否为临 时保存盘,返回值为逻辑数。ACCESS二access 检查文件的读取格式,返回一个字符串,可以是:'SEQUENTIAL'代表文件使用顺序读取格式'DIRECT'代表文件使用直接读取格式'UNDEFINED'代表没有定义SEQUENTIAL=sequential查看文件是否使用顺序格式,会返回一 个字符串,可以是:'YES'代表文件是顺序读取文件'NO'代表文件不是顺序读取文件'UNK

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

17、TTED旺mt查看文件是否是二进制文件,返回字符串,可 以是:'YES1本文件是二进制文件,NO1本文件非二进制文件,UNKNOWN' 无法判断RECL=length返回叩en文件时reel栏的设置值。NEXTREC=nr返回下一次文件读写的位置。BLANK=blank返回值是字符串,用来查看open文件时的blank参数所给定的字符串值。以下是fortran 90的添加功能:POSITION=position返回打开文件时position字段所给定的字符串,可能是'REWIND',APPEND1, 'ASIS', 'UNDEFINED&

18、#39;ACTION=action返回打开文件时action字段所赋值的字符串,可能是READ', 'WRITE','READWRITE'。READ=read返回字符串,检查文件是否为只读文件:YES'文件是只读的,NO,文件不是只读的'UNKNOWN'无法判断WRITE:write返回一个字符串,检查文件是否可写入:YES' 文件可以写入,NO,文件不可以写入,UNKNOWN1无法判定READWRITE=readwrite返回一个字符串,检查文件是否可以同时读及写:,YES'文件可以同时读写,NO'文件不

19、可以同时读写DELIM=delim返回值可以是:,UNKNOWN' 无法判定返回打开文件时,DELIM字段所设置的字符串,'APOSTROPHE','QUOTE', 'NONE',UNDEFINED'PAD=pad可以是:YES', 'N。'。返回打开文件时PAD字段所设置的字符串,返回值其他文件运行命令:BACKSPACE(UNIT=number/ ERR=errlobeL IOSTAT=iostat)把 文件读写位置退回一步。ENDFILE(UNNIT=number, ERR=errlabeL lOST

20、AT:iostat)使用 这个命令会把目前文件的读写位置变成文件的结尾。REWIND(UNIT=number, ERR=errlabel, 工OSTAT=iostat)把文件 的读写位置倒回到文件开头。CLOSE(UNIT=number, STATUS=string, ERR=errlabel,IOSTAT=)把文件关闭,不要进行读写操作。STAT='KEEP'会在文件关闭后,保留这个文件。是默认状态。STAT='DELETE'在文件关闭后,消除这个文件。!程序结束时候会自动关闭文件,不过最好要养成自己关闭文件的习惯。!在读文件的时候要懂得略掉一些没有必要的数据

21、,如文件中的注释行。!自由格式的数据文件读取(可以先读入前面的判断字符,结合select case或其他方法判断读入的数据)!在。pen,read,write时使用不同的unit值,就可以打开多个文件。最好不要同时打开很多个文件。顺序文件(SEQUENTIAL):在读写时,不能任意赋值到文件的某个 位置读写数据,只能从开头开始一步步向下进行。在改变文件读写位置 时,只能一步步地退,或是直接移回到文件开头。直接访问文件:把文件的空间,内容,事先分区成好几个同样大小的小 模块,这些模块会自动安顺序编号。读写文件时,要先赋值文件读写位 置在第几个模块,再进行读写的工作。直接访问文件可以任意到文件的

22、任何一个地方来读写。在使用直接访问文件时,要小心使用endfile命 令,使用这个命令会把目前所在的文件位置之后的数据都清除掉。二进制文件的操作:使用二进制文件来做直接读取时,。pen命令中的 reel字段所设置的整数n值所代表的大小会随编译器不同而改变。每个 编译器应该都可以经过设置来改变reel字段的单位大小。二进制文件 没有必要在数据之间用区分符号来增加文件的可读性,因为二进制文件 本身就没有可读性。二进制文件是直接把内存的二进制数据写入文件, 就没有所谓的格式化输入/出存在。存放”精确“及“大量”的数据时,使 用二进制文件是比较好的选择。二进制文件也可以使用顺序格式来操 作,顺序格式下

23、显示来的二进制文件,每个数据的前后都会被编译器补 上一些额外的信息,所生成的文件不太容易被其他程序读取。关于以上文件操作详细见fortran 95程序设计939一5。Internal File (内部文件)使用写入文件的方法,把数据写到一个字符串变量中。example:a=2b=3character (len=20) : stringwrite (unit=string, fmt="(I2,1 +1,12/ = * ,12)'*) a, b, a+b !把字符串变量当作输出的目的。write(*, *) string结果:2+ 3= 5还可以经过read命令从字符串读入数据:

24、integer : acharacter (len=20) : string="123"read(string, *) awrite(*, *) a在某些情况下需要使用内部文件来设置数据:使用read命令从键盘输入数据时,如果用户输入错误的数据,会导致 死机。如需要输入整数时却输入英文字母,就可能会死机。比较好的处 理办法是,程序先暂时把数据当作字符串读入,检查字符串中是否含有 不合理的字符,如果字符串中都是。9的数字字符,就把字符串转成 整数,不然就请用户在输入一次。内部文件还可应用在动态改变输出格式,输出格式可以事先存放在字符 串中,程序进行时,动态改变字符串内容就可以

25、改变输出格式。(见书 P263)NAMELIST:NAMEL工ST是很特殊的输入/输出方法,收录在f90标准当中,f90 中有统一 NAMELIST的格式。NAMEL工ST可以把一组相关变量封装在一起,输入/出这一组变量时, 只要在write/read中的NML字段赋值使用哪一个NAMELIST就行 了。example:program ex0918implicit noneinteger : a = 1, b = 2, c= 3namelist /na/ a,b,cwrite(*,nml=na)stopend program ex0918&NAA=1,B=2,C=3,/程序中把a,b,c这三个变量放在名字叫做na的namelist中。namelist 也算是声明的一部分,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论