1
2009-7-29
§ 1 文件概念
§ 2 对文件的基本操作
§ 3 关闭、重绕、回退语句第 13章 文件简介
2
2009-7-29
数据处理程序一般包括三个主要步骤:
输入数据,处理数据,输出数据存在问题,输入的数据由键盘输入,数据量大时,
程序不实用。
解决办法,把输入数据建成一个数据文件,存放于某种介质(例如硬盘)上。
3
2009-7-29
§ 1 文件概念文件,以连续的记录形式存放在介质(如硬盘)上的一组数据。
按文件记录是否有格式,可将文件分为:
有格式文件,按 ASCII代码形式存放的文件。
无格式文件,按二进制形式存放的文件。
按文件的存取方式,可将文件分为:
顺序存取文件,从头到尾按顺序进行读写的文件。
直接存取文件,可直接对任一个记录进行读写。
只介绍 有格式的顺序和直接存取文件 。
对文件格式的定义,体现在 OPEN语句中。
4
2009-7-29
§ 2 对文件的基本操作对文件的基本操作包括打开文件、关闭文件及读写文件等。
一,OPEN语句在向文件输出数据或者从文件中读取数据之前,必须把该文件与一个文件号连接起来。在源程序中,可以通过
OPEN语句来实现,通常也把这一操作称为 打开一个文件 。
OPEN语句的一般形式如下:
OPEN(连接信息表)
连接信息表中主要包括以下由逗号分隔的项,
5
2009-7-29
1.UNIT=ut。此处 ut是一个文件号,必须是无符号整数。当该说明符是连接信息表的第一项时,,UNIT=”
可省略。
2.FILE=fe。 fe是字符型数据,代表文件名(不包括尾部空格)。例如:
OPEN( 3,FILE=’WANG.DAT’)
表示把文件号 3与名为 WANG.DAT的文件连接起来。
3.STATUS=ss。 ss是由用户给出的字符串,表示文件的状态,可选以下 5种值之一,'OLD','NEW'、
'REPLACE','SCRATCH'和 'UNKNOWN'。
'NEW'表示所指定的文件名是一个以前不存在的新的文件名。
6
2009-7-29
例如:
OPEN( 3,FILE=‘WANG.DAT’,STATUS=‘NEW’)
使计算机在磁盘上建立一个名为 WANG.DAT的新文件。执行 OPEN语句后,文件即被新建,随后就是
,OLD文件”了。如果在该磁盘上原来已有一个同名的文件,执行该 OPEN语句时就会出错,需要将 ss的值改为 'OLD'。
7
2009-7-29
ss为 'SCRATCH',表示打开临时文件,将由系统为指定的文件号连接一个特殊的“无名”文件。当关闭该文件时,此文件将自动消除。 OPEN语句中不能同时指定文件名和 SCRATCH说明符。
ss为 'UNKNOWN'表示对文件存在状态不清楚,由系统按文件的实际情况处理。例如文件已有,就打开该文件;文件不存在,就建立新文件。
ss为 'REPLACE'表示指定的文件不存在时,由系统建立该文件;如已有同名文件,则用此名产生一个新文件(原文件被覆盖,数据丢失)。
STATUS项的缺省值为 'UNKNOWN'。
8
2009-7-29
4.ACCESS=as。 as表示文件存取方式,字符串。其值可为 'SEQUENTIAL'(顺序的 )或 'DIRECT'(直接的 )。它指定连接的文件是顺序文件还是直接文件。缺省值为
'SEQUENTIAL'。
5.FORM=fm。 fm是字符串,其值为 ‘FORMATTED’或
‘UNFORMATTED’,表明文件是否有格式。对顺序文件的缺省值是 'FORMATTEED'(有格式 ),对直接文件的缺省值是 'UNFORMATTED'(无格式 )。
6.RECL=rl。 rl是一个值为正整数的整型表达式,用来指定文件记录的长度,单位为字节数。直接文件中每个记录的长度必须相等,且必须选择 RECL项。 顺序文件不需要使用 RECL项 。
9
2009-7-29
7.ACTION=an。 an为一字符串,可取值为‘ READ’、
‘ WRITE’或‘ READWRITE’。 ’READ’表示文件只读禁写;‘ WRITE’表示该文件只写禁读; 'READWRITE'表示可读可写。缺省值为 'READWRITE'。
8.BLANK=bk。 bk为一字符串,取值可为 'NULL'或
'ZERO'。 'NULL'表示空格全部忽略不计,'ZERO'表示数据中的空格作零处理。其缺省值是 'NULL'。
9.IOSTAT=it。 it为整型变量,一执行 OPEN语句,it就有了值。执行 OPEN语句无错误时,其值为零;若有错误发生,它便被赋以一个正整数值。
10.ERR=label。若打开文件操作出错,转到标号为 label
的语句处。
10
2009-7-29
OPEN语句中各说明符的次序可以任意。
注意:
1? 文件与文件号在某一程序段中连接成功,则在所有程序段中保持这种连接关系,若以后没有用 CLOSE语句解除这种连接,也没有新的 OPEN语句修改其连接特性,
则此连接将一直保持到整个程序运行结束。
2? 一个文件不能同时与两个文件号连接,一个文件号也不能同时与两个文件连接。
open( unit=设备号,file=文件名,status=状态,
access=文件读取方式,form=文件存放形式,
recl=记录长度,err=S )
一个最简单的形式为,open(设备号,file=文件名 )
11
2009-7-29
二、有关读 /写语句与 OPEN语句相应的 I/O语句一般形式,
READ(控制信息表 )输入表
WRITE(控制信息表 )输出表
“控制信息表”包括的几种主要说明项如下,
1.UNIT=ut。 ut为输入或输出文件号 (由 open语句指定 )。
当它为第 1项时,可以省写,UNIT=”,只写 ut。若文件号为 *,表示在系统隐含设备上进行输入或输出。
2.FMT=ft。 ft为格式说明。格式说明可以是 *、格式语句的标号、格式说明字符串。
12
2009-7-29
例如,
READ(10,*)X,Y (表示表控格式)
READ(10,FMT=‘(2F5.2)’)X,Y (显式说明格式)
READ(10,FMT=11)X,Y
当 FMT=为第 2项时,可以省写,FMT=”。如:
READ(10,'(A3,F5.1)')C,X
3.REC=rc。 rc是整型表达式,用来指定直接文件中被读写的记录的记录号。
13
2009-7-29
4.IOSTAT=it。 it为整型变量,当执行 READ语句或
WRITE语句时,it便有了值。若其值为负值,表示遇见文件结束信息;若为正值,表示读或写操作出错;若为零,表示正常。 如无此项,读写不正常时程序停止执行 。
5.END=f,f代表本程序段一个语句标号,读至文件尾时,将转向到 f所标明的语句处。 WRITE语句的控制信息表中无此项。
6.ERR=f,f代表本程序段一个语句标号,操作文件出错时,将转向到 f所标明的语句处。
14
2009-7-29
§ 3 CLOSE,REWIND,BACKSPACE语句一,CLOSE语句一般形式,CLOSE(说明项)
功能:解除文件号与文件的关系,即关闭文件。
说明项中包括:
UNIT= ut
IOSTAT= it
ERR=er
STATUS= ss
其中前三项用法同 OPEN语句。
15
2009-7-29
STATUS=ss,ss是字符串,表示关闭文件后文件的状态。 STATUS=‘KEEP’时,表示存留关闭后的文件,
STATUS=‘DELETE’时,表示删除关闭后的文件。
当 OPEN语句中 STATUS=‘SCRATCH’时,KEEP不可使用。
例:若要关闭 2号文件,使用,close( 2)
注:当程序运行结束后未遇 close语句,则打开的所有文件全部自动关闭。
16
2009-7-29
二,REWIND语句 (重绕语句 )
重绕语句一般形式:
REWIND (说明项 )
功能:将 文件指针 定位到文件 初始点 。
文件指针:指示当前 文件读写位置的“指针”。
如已经读了 5个记录的数据,再读文件时文件指针指向 6。
说明项中包括,UNIT= ut
IOSTAT= it
ERR=er
其用法同 OPEN语句。
17
2009-7-29
三,BACKSPACE语句 (回退语句 )
回退语句一般形式:
BACKSPACE (说明项 )
功能:使文件指针回退一个记录。
如已经读了 5个记录后,使用回退语句,再读文件时仍然会读第 5个记录。
说明项内容同重绕语句。
18
2009-7-29
例:已知某中学生 6个学期的 3门课成绩数据为:
90,0,92,0,85,0
91,0,90,0,86,0
94,0,91,0,84,0
86,0,90,0,87,0
96,0,93,0,89,0
88,0,93,0,92,0
求该生各门课的平均成绩。
将上述数据建立为一个数据文件,CJ.TXT
19
2009-7-29
DIMENSION X(6,3),A(3)
OPEN(1,FILE='CJ.TXT')
DO 5 I=1,6
READ(1,*) (X(I,K),K=1,3)
5 CONTINUE
DO 15 I=1,3
A(I)=0.0
DO 10 J=1,6
A(I)=A(I)+X(J,I)
10 CONTINUE
A(I)=A(I)/6.0
15 CONTINUE
OPEN(2,FILE='JG.DAT')
WRITE(2,'(3F8.0)') A
END
20
2009-7-29
显示结果为:
90.83 91.50 87.17
通过程序,同时建立了一个保存结果的文件 JG.DAT
21
2009-7-29
闭卷考试题型一、判断(判断一个说法正误,10分)
二、选择题 (选择一个正确答案,30分)
三、补程序(针对计算任务,补全所缺程序,10分)
四、读程序 (写出程序执行结果或计算任务,20分)
五、编程序 (按要求编写 FORTRAN源程序,30分)
考试日期和时间待定
22
2009-7-292007 12-4-Tuesday