版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第11章,文件打开和关闭的概念文件读写其他文件操作,11.1文件的概念,11.1.1文件和记录所有数据源和数据发送目标都被视为文件。文件可分为外部文件和内部文件。记录是一组相关的数据项(也称为字段),按顺序排列成逻辑单元,这是文件的基本单元。文件系统是负责访问和管理文件的公共信息管理组织。11.1.2文件访问方法,FORTRAN数据文件访问方法分为两种:顺序访问和直接访问。顺序存取意味着文件的记录按照建立的时间顺序存储在存储介质中。直接访问,也称为随机访问。它是指从程序指定的某个位置直接访问文件记录。顺序访问的文件中所有记录的长度可以完全不同,而直接访问的文件中记录的长度由OPEN语句中的描述
2、项“RECL=”指定,并且每个记录具有相同的长度。在示例11.1中,字符数据和数字数据分别以顺序和直接的方式写入文件。OPEN(10,FILE=A.TXT,FORM=格式化,ACCESS=顺序)WRITE(10,100)911 WRITE(10,200)WELCULATE OPEN(11,FILE=B.TXT,FORM=格式化,ACCESS=直接,Rec=10)WRITE(11,100,rec=1) 911 write (11,200,rec=2)WELCULATE 100 FORMAT(1x,i5) 200 format (1x,a15) end,11.1.3数据可以以三种结构形式存储在文件
3、中,即格式化文件、非格式化文件和二进制文件。格式化文件中的记录以字符(或ASCII码)的形式出现,文件的数据流由字符组成,每个字符占用一个字节。未格式化文件是由物理数据块和未格式化记录组成的记录序列,其记录是数字序列。未格式化的直接文件只包含数据本身。二进制文件是微软的一种扩展模式。数据按其在内存中的存储形式存储在文件中,其数据流由二进制代码形式的字节组成,结构最紧凑,适合存储大容量数据。在示例11.2中,200000000的整数和一个“DIR”字符串分别存储在具有三种结构的文件中。OPEN(10,FILE=A.TXT,form=格式化,Access=顺序)WRITE(10,(I10)2000
4、00000 WRITE(10,(A3) DIR OPEN(11,FILE=B.TXT,FORM=UNFORMATTED,access=顺序)WRITE(11)200000000 WRITE(11) dir open (12,file=c.txt,FORM=二进制,ACCESS=顺序)WRITE(12)2000000000写入(11)DIR OPEN(12,FILE=c . TXT,FORM=如果写入的记录短于字符变量或字符数组元素的记录长度,则剩余位置用空格填充。内部文件只能以某种格式顺序访问。11.1.4文件定位,在文件访问过程中,有一个文件指针来控制读写位置,它总是指向当前记录进行输入和输
5、出。文件位置是指数据在文件中的具体位置,主要包括起始位置、结束位置、当前位置、当前记录、前一记录和下一记录。一般来说,为了在写入后读取顺序文件,有必要使用文件定位语句来重置文件指针位置。11.2文件打开和关闭,11.2.1 OPEN语句OPEN语句将设备单元号与文件或物理设备相关联。一旦建立联系,相应的文件将由程序中的设备单元号表示。示例:OPEN (UNIT=10,FILE=undamp.dat,access=direct) write (10,(a18,)undamped motion :OPEN语句格式,OPEN (UNIT=unit,FILE=file,STATUS=status,AC
6、CESS=access,FORM=form,RECL=rec,ERR=err,IOSTAT=iostat,SHARE=share,ACTION=action,BLANK=blanks,BLOCKSIZE=blocksize,Iofocus=iofocus,arriagecontrol=carriage,delim=delim,position=position,pad=(2)指定文件名:FILE=文件。文件是字符串表达式、常量或变量,其值可以是空格(不包括尾随空格)、任何有效的数据文件名、设备名或指向内部文件的变量。在同一个OPEN语句中,文件名与单元号连接在一起。文件名可以包括文件的完整路径
7、。如果未指定保存文件的路径,文件将保存在工作目录中,即源程序文件所在的文件夹中。状态=状态.状态是一个字符串表达式,其值由用户给出,可以是以下五个字符串之一:OLD:表示指定的文件是现有的旧文件。新:表示指定的文件尚不存在。SCRATCH:表示与单元号连接的文件是一个临时文件,当文件关闭或程序中断时,该文件将被自动删除。此状态不能与描述项FILE=file共存。它只能用于系统指定的文件名,因此该文件可以在程序运行过程中作为临时文件使用。REPLACE:表示替换磁盘上与指定文件名相同的文件。如果此类文件不存在,请创建一个新文件。未知:表示计算机指定了文件的状态。(3)文档状态描述:(4)访问方法
8、描述:ACCESS=access。Access是一个字符串表达式,该表达式的值可以是以下三种类型之一:DIRECT:表示访问模式是直接的。SEQUENTIAL:表示访问方法是顺序的。APPEND:它意味着在打开文件的最后一条记录后添加一条新记录。当省略此帮助项目时,它表示顺序访问方法。(5)记录格式描述:FORM=form。Form是一个字符串表达式,该表达式的值可以是以下三种类型之一:FORMATED:表示记录以格式化的形式存储。未格式化:表示记录以未格式化的形式存储。二进制:表示记录以二进制形式存储。对于顺序访问模式,此描述项的默认值为FORMATTED。对于直接访问模式,该描述项的默认值
9、为“UNFORMATTED”。如果既没有设置访问方法也没有设置格式,则默认情况下会按顺序访问格式文件。(6)记录长度描述:RECL=隐士。rec是一个具有正整数值的表达式,用于指定顺序访问文件的最大记录长度和直接访问文件的每个记录的长度。记录的长度以字节为单位。必须为直接访问文件指定记录长度。(7)错误处理描述:ERR=err。Err是该程序单元中可执行语句的标签,由用户指定。当OPEN语句的操作中出现错误时(例如指定的新文件已经存在等。),它并不终止程序运行,而是在用户指定的标签后开始执行语句。如果省略该描述项,则不存在这样的功能。如果同时没有 IOSTAT=项,系统将给出错误信息并终止程序
10、。(8)错误状态描述:IOSTAT=iostat。Iostat是一个整数变量。当这个OPEN语句被执行时,系统将自动为这个变量分配一个整数值。当输入输出操作没有错误时,其值为0;如果已检索到文件结尾,则为负数;如果出现错误,这是一个错误消息代码。如果打开了一个现有的顺序文件,在输出操作之前,文件指针不会位于文件的末尾,新写入的内容将覆盖原始文件。在上述所有选项中,没有指定每个选项的顺序。11.2.2 CLOSE语句,它释放单元号和文件之间的连接,也称为关闭文件。该语句的格式如下:关闭(unit=unit,STATUS=status,err=errlabel,iostat=iostat) (1)
11、单元号描述(2)文件关闭后的状态描述:status=status。状态是用户给出的字符串表达式。它的值可以是以下两种类型中的一种:KEEP:它意味着在关闭操作之后,与单元号连接的文件将保留,并且不会被删除。DELETE:表示关闭操作后,与单元号关联的文件将不会被保留,而是被删除。11.3文件读取和写入,11.3.1格式化顺序访问文件读取(unit=unit,fmt=fmt | nml=nml,advance=advance,err=err,iostat=iostat,end=end,EOR=EOR,SIZE=size)输入项表写入(unit=unit,fmt=fmt | nml=nml,adv
12、ance=advance,err=err,iostat=iostat)输出项表。输入/输出项表中的项可以是变量名、数组元素名和数组名。用“,”分隔项目。如果READ语句中没有条目,则每次执行READ语句时都会跳过一条记录。WRITE语句中可能没有输出项,在这种情况下,执行该语句将产生一个空记录。描述项包括以下项目:(1)单元号描述:UNIT=单元。(2)格式描述或名称列表描述:FMT=fmt | NML=nml。Fmt可以是“*”、FORMAT语句标签、字符表达式或字符常量。“*”代表表控制格式的输出。Nml是name list,FORTRAN90规定名称列表由NAMELIST语句定义,即一个
13、名称代表一组变量。由名称列表控制的读/写只能用于顺序访问模式,例如:namelist/na/a,bopen (2,file=example.txt,access=sequential)a=1b=2 write(2,na) end,(3)解释它是否是高级格式顺序访问模式,ADVANCE=Advance。前进是一个字符表达式,有两个选项:“是”或“否”,默认值是“是”。推送模式在每次读/写操作后将指针定位在记录的末尾。非推送模式允许读取/写入记录的一部分,然后将指针定位在该读取/写入的最后一个字符之后。例如,执行以下程序段:open (2,file=example。这是写(2,(a)的一个例子。(
14、6)文件结束描述:结束=结束。End是该程序单元中可执行语句的标签。当读取文件结束符号时,在用户指定的符号后开始执行语句。(7)记录结束描述:EOR=eor。Eor是该程序单元中可执行语句的标签。此帮助项目只能用于非推送格式的顺序访问。当读取记录结束符号时,在用户指定的符号后开始执行语句。示例11.3通过顺序访问将三种不同类型的数据写入格式文件。CHARACTER * 20 STRING NUMBER=123 VALUE=987.65 STRING=范例OPEN(8,FILE=) WRITE(8,100)number WRITE(8,200)value WRITE(8,300)String 1
15、00 Format(I6)200 Format(F8.3)300 Format(A10)Close(8)END,输入和输出顺序文件的基本规则:(1)在read语句中读取数据时,为了正确输入,READ语句中的每个输入项必须对应于READ语句中的输出项(2)如果READ语句中的输入项少于记录中的数据项,则记录中的冗余数据项被忽略,并且从新记录中读取下一个READ语句。如果READ语句中的条目比记录中的数据项多,如果没有解释项PAD=否,则在记录中填充一个空格(如果条目是数字,则空格被转换为相应的数值0),直到所有条目都获得数据。输入文件中的数据并显示在屏幕上。CHARACTER*20 string
16、 OPEN(8,FILE=) READ(8,100)number,value READ(8,300)string WRITE(*,*) number,value,string 100 FORMAT(I6,F8.3) 300 FORMAT (a10) close (8) end,(3)WRITE语句总是开始一个新记录,但是新记录的形成也与FORMAT中的格式和斜杠“/”描述符的多次使用有关。例如:实值(4)数据值/1.2,2.3,3.4,4.5/打开(9,文件=)写(9,100)值100格式(2f10.3)关闭(9)结束,(4)当按顺序操作文件时,读操作后立即写,然后当前写(5)对于顺序访问模式,可以指定读/写记录的一部分。例11.5分析下列程序的输出结果。IMPLICENT NONE CHARACTER ch * 10 INTEGER I,num OPEN(2,FILE=example.txt,ACCESS=SESSIONAL)WRITE(2,(26A1) (CHAR(i),i=ICHAR(a),ICHAR(z) REWIND(2)!回到文件头做
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 长沙市开福区2025年四年级数学下学期期中教学质量检测模拟试题含解析
- 2026年江西景德镇浮梁县社区工作者(专职网格员)招聘考试面试试题-含参考答案
- (2026年)家校协同育人工作总结
- 阀门公司总会计师述职报告
- 会诊制度医院会诊制度
- 精准数字化税收审计对提高民营上市公司财务信息真实透明度的外部合规约束机制研究-基于金税四期系统上线前后企业财税修正率与盈余管理分值的量化断点回归设计
- 刘禹锡《秋词》课件
- 建筑装饰行业2026年中期策略:乘景气开支之势寻海外成长之机
- 2025年重庆市武隆区数学中考冲刺卷
- 嵌入基础系统及其应用 10
- 小学二年级下册体育期末复习计划
- 教学课件-环境工程CAD制图
- 2024年全国乡村振兴职业技能大赛(餐厅服务)考试题库(含各题型)
- T-WZSSTI 002-2024 电动汽车充电电缆
- 体检中心管理工作制度流程
- 精神病工娱治疗
- 《中国太平介绍》课件
- 2014年高考真题-理科数学(山东卷)解析版
- AQ/T 2057-2016 金属非金属矿山在用货运架空索道安全检验规范(正式版)
- ISO9001内审员培训教程
- 中医全科(副高)高级职称考试题库及答案
评论
0/150
提交评论