1、文件操作文件操作 不存储程序的计算机还不如一个强有力的不存储程序的计算机还不如一个强有力的计算器,最早购买不带磁盘驱动器的用户计算器,最早购买不带磁盘驱动器的用户很快就明白了这一点很快就明白了这一点当他们关掉计算当他们关掉计算机的电源时,其工作成果也很就随之消失机的电源时,其工作成果也很就随之消失了。因而,当你的计算机具备了一个软盘了。因而,当你的计算机具备了一个软盘驱动器或者还有一个硬盘时,学习使用磁驱动器或者还有一个硬盘时,学习使用磁盘文件对编写有用的程序来说就是很重要盘文件对编写有用的程序来说就是很重要的了。下面就来介绍的了。下面就来介绍Pascal文件的有关知文件的有关知识。识。文件的
2、概念文件的概念 文件是指由一系列相同类型数据组成的一个数据文件是指由一系列相同类型数据组成的一个数据序列,是一种由用户定义的构造型的数据类型。序列,是一种由用户定义的构造型的数据类型。作为系统提供的一种手段,是计算机与各类设备作为系统提供的一种手段,是计算机与各类设备进行通讯的媒介,从而用以实现信息在程序内外进行通讯的媒介,从而用以实现信息在程序内外的交换。对于文件我们实际上早已在使用,前面的交换。对于文件我们实际上早已在使用,前面出现的出现的Pascal程序中的输入、输出就是应用文件程序中的输入、输出就是应用文件的方法来实现的,这些文件的名字是的方法来实现的,这些文件的名字是Pascal的标
3、的标准文件准文件“INPUT”和和“OUTPUT”,它们分别对应,它们分别对应于标准输入设备和标准输出设备,在于标准输入设备和标准输出设备,在Free Pascal中可省略不写。中可省略不写。文件的分类文件的分类 在在Pascal的数据文件中,按文件结构形式划的数据文件中,按文件结构形式划分,以分,以ASCII代码形式(字符形式)存放的称代码形式(字符形式)存放的称为为TEXT类型文件,也称为文本文件,这是我类型文件,也称为文本文件,这是我们经常要用到的文件类型。还有一种以二进们经常要用到的文件类型。还有一种以二进制代码形式存放的文件,称为制代码形式存放的文件,称为File类型文件,类型文件,
4、它又称为类型文件。我们平时用到的是第一它又称为类型文件。我们平时用到的是第一种文件类型:文本文件。种文件类型:文本文件。文本文件特征(1)当程序开始把数据写(输出)到文件中去时,)当程序开始把数据写(输出)到文件中去时,总是从文件的起始位置开始。也就是不能从文件的中总是从文件的起始位置开始。也就是不能从文件的中间位置开始存放数据。间位置开始存放数据。(2)输出的数据是一个接一个地存放在文件中的。)输出的数据是一个接一个地存放在文件中的。(3)当程序从文件中读(输入)数据到内存中时,)当程序从文件中读(输入)数据到内存中时,总是从文件的起始位置开始。也就是不可能从文件的总是从文件的起始位置开始。
5、也就是不可能从文件的中间的某个位置开始读入数据。中间的某个位置开始读入数据。(4)读数据时,必须按存入文件时的顺序一个接一)读数据时,必须按存入文件时的顺序一个接一个的读入内存中去。个的读入内存中去。(5)对同一个文件的读写操作不能交叉进行。)对同一个文件的读写操作不能交叉进行。文本文件的定义 文本文件不是简单地由某类型的元素序列文本文件不是简单地由某类型的元素序列所组成,它的基本元素是字符,由它们构所组成,它的基本元素是字符,由它们构成行,若干行组成一份原文。由于各行的成行,若干行组成一份原文。由于各行的长度可以不同,所以文本文件只能顺序地长度可以不同,所以文本文件只能顺序地处理。处理。文本
6、文件的定义如下:文本文件的定义如下:var fp1,fp2:text;文件类型的常用命令(1)assign 语法:语法:assign(filevar,filename);Filename是合法的文件名的字符串表达式,这个名字是合法的文件名的字符串表达式,这个名字赋给文件变量赋给文件变量filevar,在程序中对文件变量的操作即,在程序中对文件变量的操作即为对磁盘文件为对磁盘文件Filename的操作。的操作。如:如:assign(fp1,abc.in);assign(fp2,abc.out);这时这时fp1,fp2是文件类型变量,是文件类型变量,abc.in、abc.out是实际是实际文件名字
7、,这样文件变量文件名字,这样文件变量fp1与与abc.in、fp2与与abc.out、就建立起联系了,在程序中就建立起联系了,在程序中fp1就可以代表就可以代表abc.in文件、文件、fp2就可以代表就可以代表abc.out文件使用了。文件使用了。(2)rewrite 语法:语法:rewrite(filevar)功能:创建一个新的磁盘文件,并以写的方式打功能:创建一个新的磁盘文件,并以写的方式打开该文件,初始化文件为空,文件指针指向开始开该文件,初始化文件为空,文件指针指向开始位置。在使用此命令前需先用位置。在使用此命令前需先用assign过程,给文过程,给文件变量一个实在的文件名。件变量一个
8、实在的文件名。如:如:rewrite(fp2);这时将在磁盘上工作目录下新这时将在磁盘上工作目录下新建一个空文件建一个空文件abc.out,并打开该开件。若以前,并打开该开件。若以前工作目录下存在工作目录下存在abc.out,则会将原来的文件清,则会将原来的文件清空,并将文件指针指向开始位置。空,并将文件指针指向开始位置。(3)reset 语法:语法:reset(filevar);功能:打开一个已存在的文件,并将文件指针指功能:打开一个已存在的文件,并将文件指针指向开始位置,表示可开始读入文件,但不能向文向开始位置,表示可开始读入文件,但不能向文件写数据,同样件写数据,同样filevar文件名
9、必须存在。文件名必须存在。如:如:reset(fp1);打开打开fp1所代表的文件所代表的文件abc.in,并将文件指针指向开始位置。如果工作目录下不并将文件指针指向开始位置。如果工作目录下不存在存在abc.in,将会出现错误信息,将会出现错误信息2。(4)close 语法:语法:close(filevar)功能:关闭一个文件,无论是向磁盘写文件,还功能:关闭一个文件,无论是向磁盘写文件,还是从磁盘上读取文件的内容,当读、写完毕时都是从磁盘上读取文件的内容,当读、写完毕时都必须用必须用close命令关闭已打开的文件,以保证文件命令关闭已打开的文件,以保证文件的完整性和可靠性,否则将引起文件处理
10、错误。的完整性和可靠性,否则将引起文件处理错误。如:如:close(fp2);这时将关闭文件这时将关闭文件fp2,对于被读,对于被读的文件,可以关闭也可以不关闭,但对于被写的的文件,可以关闭也可以不关闭,但对于被写的文件,程序结束时,必须关闭,否则,所有写入文件,程序结束时,必须关闭,否则,所有写入的信息将不会被写入文件。的信息将不会被写入文件。(5)read或或readln 语法:语法:read(filevar,var1,var2,varm)功能:从文件功能:从文件filevar中读出若干个数中读出若干个数,赋给赋给变量变量var1,,varm,这里使用规则和,这里使用规则和read原来的使
11、用方法相同,只不过在原来原来的使用方法相同,只不过在原来变量前加一个文件类型变量变量前加一个文件类型变量filevar而已。而已。如:如:read(fp1,a,b);这时将从这时将从abc.in文件读文件读出两个量分别赋值给出两个量分别赋值给a和和b两个变量。两个变量。(6)write或或writeln 语法:语法:write(filevar,var1,var2,varm);功能:向文件功能:向文件filevar中写入若干个数。这中写入若干个数。这里使用规则和里使用规则和write原来的使用方法相同,原来的使用方法相同,只不过在原来变量前加一个文件类型变量只不过在原来变量前加一个文件类型变量f
12、ilevar而已。而已。如:如:write(fp2,a,b);这时将向这时将向abc.out文件文件写入写入a和和b两个变量的值。两个变量的值。(7)eoln函数函数 语法:语法:eoln(filevar);功能:行结束函数,其中文件功能:行结束函数,其中文件filevar一定一定为为text类型,函数值为布尔型。当文件指类型,函数值为布尔型。当文件指针向回车换行符时,函数值为针向回车换行符时,函数值为true(真),(真),否则为否则为false(假假)。(8)eof函数(相当于函数(相当于seekeof())语法:语法:eof(filevar)功能:文件结束函数,其中文件功能:文件结束函数
13、,其中文件filevar是是文件类型变量,函数值是布尔值。当文件文件类型变量,函数值是布尔值。当文件指针指向文件结束标志时,函数值为指针指向文件结束标志时,函数值为true(真真),否则为,否则为false(假假)。它通常写作。它通常写作seekeof。该函数一般用以判断文件是否。该函数一般用以判断文件是否结束。结束。文件类型输入输出一般用法 在我们使用文件类型输入输出时,通常用标准输入文件在我们使用文件类型输入输出时,通常用标准输入文件input和标准的输出和标准的输出文件文件output来表示文件类型变量,这样在程序中的输入输出操作就和不用来表示文件类型变量,这样在程序中的输入输出操作就和
14、不用文件类型输入输出格式一样了。具体形式如下:文件类型输入输出格式一样了。具体形式如下:文件输入输出一般格式文件输入输出一般格式:程序体的开始处加上程序体的开始处加上:assign(input,输入文件名输入文件名);将输入文件和标准输入文件将输入文件和标准输入文件input建立起联系建立起联系reset(input);打开输入文件打开输入文件 assign(output,输出文件名输出文件名);将输出文件和标准输出文件将输出文件和标准输出文件output建立起联系建立起联系rewrite(output);建立输出文件建立输出文件 程序体的结尾处加上程序体的结尾处加上:close(input)
15、;关闭输入文件关闭输入文件close(output);关闭输出文件关闭输出文件注意注意:在运行程序前在运行程序前,一定要在一定要在FP的工作目录中建立一个输入文件。否则将的工作目录中建立一个输入文件。否则将出错。出错。例:读入两个整数,输出两个数的和。用文件类型输入输出。例:读入两个整数,输出两个数的和。用文件类型输入输出。文件名为:文件名为:abc.pas测试数据:测试数据:输入文件:输入文件:abc.in152 908输出文件:输出文件:abc.out1060程序程序1:program abc;var fp1,fp2:text;a,b,c:longint;begin assign(fp1,
16、abc.in);reset(fp1);assign(fp2,abc.out);rewrite(fp2);read(fp1,a,b);c:=a+b;write(fp2,c);close(fp1);close(fp2);end.程序程序2:program abc;var a,b,c:longint;begin assign(input,abc.in);reset(input);assign(output,abc.out);rewrite(output);read(a,b);c:=a+b;write(c);close(input);close(output);end.我们运行一下,发现这两个程序的功
17、能是一样的,因此,我们用我们运行一下,发现这两个程序的功能是一样的,因此,我们用文件类型输入输出时,一般用程序文件类型输入输出时,一般用程序2的形式。的形式。例:读入长方形的长和宽,求它的周长和面积。用文件类例:读入长方形的长和宽,求它的周长和面积。用文件类型输入输出。文件名为:型输入输出。文件名为:cfx.pas保留两位小数,两个数字隔一空格。保留两位小数,两个数字隔一空格。测试数据:测试数据:输入文件输入文件cfx.in:2.5 3.6输出文件输出文件cfx.out:12.20 9.00程序如下:程序如下:program changfx;var a,b,c,s:real;begin ass
18、ign(input,cfx.in);reset(input);assign(output,cfx.out);rewrite(output);read(a,b);c:=2*(a+b);s:=a*b;writeln(c:0:2,s:0:2);close(input);close(output);end.练习题1(程序名:(程序名:ga07.pas)已知三角形的底)已知三角形的底a和高和高h的值,输出面积的值,输出面积S。保留二位小数,用文件类型输入输出。保留二位小数,用文件类型输入输出。测试数据:测试数据:输入输入ga07.in:10.5 2.0输出输出ga07.out:10.502(程序名:(程序名:ga08.pas)已知梯形的面积是)已知梯形的面积是S,高是,高是H,上底是,上底是A,输出梯形的下底输出梯形的下底B,保留二位小数,用文件类型输入输出。,保留二位小数,用文件类型输入输出。测试数据测试数据输入文件输入文件ga08.in:分别为面积:分别为面积S、高、高H和上底和上底A78 20 5.2输出文件输出文件ga08.out:下底:下底B2.60