版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、fortran 文件操作from: fortran 95 程序设计 彭国伦1.文件读取的概念:读取:“顺序读取”和“直接读取”。 保存:“文本文件”和“二进制文件”。二进制文件:读取快,因为保存格式和数据在内存中的保存方法一样,同时也节省空间。2. 文件的操作: open 的使用:使用 open 命令打开文件之后,就可以对文件来做输入输出。example:program ex0901 impicit noneopen(unit=10, file=hello.txt)! 打开 hello.txt 文件, unit 指定文件代码,file指定文件名称。write(10, *) hello!在代码为
2、 10 的文件中写入 hello stopend program ex0901open 中有很多参数可以使用,详细如下: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
3、 则是默认的输入位置, 键盘。file=filename:指定要打开的文件名称,文件名要符合系统规定。windows 下不区分大小写,unix 下则会区分大小写,最好不要使用中文文件名。form=formatted or unformattedform 字 段 只 有 两 个 值 可 以 设 置 : form=formatted“文本文件”格式来保存form=unformatted“二进制文件”格式保存这一栏不给定时候的默认值是: form=formattedstatus=new or old or scratch or unknown 用来说明打开一个新的文件或已经存在的旧文件。status
4、=new打开一个原本不存在的新文件status=old打开一个原来已经存在的文件status=replace若文件已经存在则重新创建一次,原来的内容消失;若不存在则会创建新文件。status=scratch表示要打开一个暂存文盘,这个时候可以不需要指定文件名称,也就是 file 这个一栏可以忽略。因为程序本身会自动取一个文件名,至于文件名是啥也不重要, 因为暂存盘会在程序结束后自动删除。status=unknown 由各编译器自定义。通常会同 replace 的效果。!这一栏不给定时,默认为 status=unknown。access=sequential or direct设置读写文件的方法
5、:access=sequential读写文件的操作会以“顺序”的方法来做读写,“顺序读取文件”。access=diret读写文件的操作可以任意指定位置,“直接读取文件”。!不赋值时候,默认为: access=sequential。recl=length 在顺序读取文件中,recl 字段值用来设置一次可以读取多大容量的数据。打开“直接读取文件”,recllength 的 length 值是用来设置文件中每一个模块单元的分区长度。length 的单位在文本根式下为 1 个字符,也就是 1 byte。在二进制格式下则由编译器自行决定,一般可能为 1 byte (g77) 或 4 byte (visu
6、al fortran)。err=label 这个字段用来设置当文件打开发生错误时,程序会跳跃到 label 所指定的行代码处来继续执行程序。iostat=var 这个字段会设置一个整数值给后面的整型变量,这是用来说明文件打开的状态, 数值会有下面三种情况:var0 表示读取操作错误var=0 表示读取操作正常var0表示读取操作发生错误。stat=0表示读取操作正常。stat0 文件读取操作错误stat=0 文件读取操作正常stat0 文件终了err=errlabel发生错误时会转移到复制的代码行继续执行程序。exist=exist检查文件是否存在,返回布尔变量,真表示存在,假值表示不存在。o
7、pend=opened 检查文件是否用已经用 open 打开,返回布尔变量,真表示已经打开,假表示尚未打开。number=number用文件名来查询这个文件所给定的代码。named=named查询文件是否取了名字,也就是检查文件是否为临时保存盘,返回值为逻辑数。access=access检查文件的读取格式,返回一个字符串,可以是:sequential代表文件使用顺序读取格式direct代表文件使用直接读取格式undefined代表没有定义sequential=sequential查看文件是否使用顺序格式,会返回一个字符串,可以是:yes代表文件是顺序读取文件no代表文件不是顺序读取文件unkn
8、own 代表不知道directdirect 查看文件是否使用直接格式,会返回一个字符串,可以是:yes文件是直接读取文件no文件是非直接读取文件unknown代表不知道form=form 查看文件的保存方法,返回字符串,可以是: formatted打开的是文本文件unformatted打开的是二进制文件undefined没有定义formatted=fmt 查看文件是否是文本文件,返回字符串,可以是:yes 本文件是文本文件no 本文件非文本文件undefined 无法判断unformatted=fmt 查看文件是否是二进制文件,返回字符串,可以是:yes 本文件是二进制文件no 本文件非二进制
9、文件unknown 无法判断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 程序设计9395。internal file(内部文件)使用写入文件的方法,把数据写到一个字符串变量中。example:a=2 b=3character (len=20) : stringwrite (unit=string, fmt=(i2,+,i2,=,i
15、2) a, b, a+b !把字符串变量当作输出的目的。write(*, *) string结果: 2+ 3= 5还可以经过 read 命令从字符串读入数据: integer : acharacter (len=20) : string=123read(string, *) a write(*, *) a在某些情况下需要使用内部文件来设置数据:使用 read 命令从键盘输入数据时,如果用户输入错误的数据,会导致死机。如需要输入整数时却输入英文字母,就可能会死机。比较好的处理办法是,程序先暂时把数据当作字符串读入,检查字符串中是否含有不合理的字符,如果字符串中都是 09 的数字字符,就把字符串转
16、成整数,不然就请用户在输入一次。内部文件还可应用在动态改变输出格式,输出格式可以事先存放在字符串中,程序进行时, 动态改变字符串内容就可以改变输出格式。(见书 p263)namelist:namelist 是很特殊的输入输出方法,收录在 f90 标准当中,f90 中有统一 namelist 的格式。namelist 可以把一组相关变量封装在一起,输入出这一组变量时,只要在 write/read中的 nml 字段赋值使用哪一个 namelist 就行了。example:program ex0918implicit noneinteger : a = 1, b = 2, c= 3 namelist
17、 /na/ a,b,c write(*,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,就可以把n
18、amelist 中的变量全部输出。write(*,nml=na) !输出 na 这个 namelist输出 namelist 时候不能赋值输出格式,f90 标准中规定输出 namelist 时首先会输出符号&,后面紧接着这个 namelist 的名字。接着会根据顺序输出变量的名称,等号以及内容, 变量之间用空格或逗号来做分隔,最后使用除号来作结束。至于每个数值内容会使用何种格式输出由编译器自行决定。namelist 也可以用来输入数据,不过通常都会用来读取文件,不会用在键盘输入。输入格式需要按照前面的格式。&na ./ 不需要按照变量顺序输入,程序会自动按照变量名称来设置数值。变量甚至可以重复
19、输入,不过变量会得到最后一次设置的数值。namelist 通常使用在文本文件的输入输出中,使用 read 从文件中读取数据时,会自动从目前的位置向下寻找存放 namelist 的地方。example:program ex0920 implicit none integer : a(3) namelist /na/ aopen(10, file=ex0920.txt) read(10, nml=na)write(*, (3i2) a stopend program输入文件的内容如下:happy birthday &na a = 1,2,3/程序打开时,读写位置在文件的开头,read 命令会自动向下寻找 na 这个 namelist 的存放位置来读取数据,这边可以看到 namelist 处理数组的方法,它会在等号后面根据顺序显示数组内容。“”“”at the end, xiao bian gives you a passage. minand once s
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 关于临时签订合同报告
- 国企劳动派遣合同
- 合同法案例精解
- 钟点工聘用合同范本
- 大班课件《谁是采蜜冠军》
- 2024正规的自然人借款合同样本
- 2024合同信息化管理系统【信息系统合同】
- 2024个人租房协议书合同租房协议书(详细版)
- 2024标准销售业务员合同范本
- 2024个体借款合同协议模板
- 4.2.1指数函数的概念 课件(共21张PPT)
- 婴幼儿盥洗照料(婴幼儿回应性照护课件)
- 银杏树介绍-课件
- 《化学与生活》课程标准
- 浙江台州三门县委政法委员会下属事业单位选聘工作人员笔试题库含答案解析
- 社区老年食堂运营方案策划
- 荧光光纤测温监测系统-高压柜 环网柜
- 国家卫生健康委临床检验中心室间质量评价标准2023年
- 《微生物与健康》课件PPT【科学六年级上册教科版】
- 2023年基层卫生岗位练兵和技能竞赛试题及答案全科医疗组
- 窃电与违约用电
评论
0/150
提交评论