130 likes | 301 Views
13 、 3 文本文件. 文本文件也是一种文件,但是它是日常处理中经常要用到的文件,所以 PASCAL 专门把它专门列出来处理。. 一、 文本文件的特点: 1 、 它的内容全部由 ASCII 码组成,特别适合处理文字信息,不要经过任何转换 就可以直接在屏幕上显示和在打印机上打印,所以一些数据也以文本文件来存储;. 2 、 文本文件存储到硬盘上的时候要经过一个转换过程:存到文件时,系统先把 内存中以二进制形式存放的数据转换为 ASCII 码再存到文件中去 ;读文件中的数 据时就进行相反的过程,先把 ASCII 转换为二进制,再放到内存中去。
E N D
13、3 文本文件 文本文件也是一种文件,但是它是日常处理中经常要用到的文件,所以 PASCAL专门把它专门列出来处理。 一、 文本文件的特点: 1、它的内容全部由ASCII码组成,特别适合处理文字信息,不要经过任何转换 就可以直接在屏幕上显示和在打印机上打印,所以一些数据也以文本文件来存储; 2、文本文件存储到硬盘上的时候要经过一个转换过程:存到文件时,系统先把 内存中以二进制形式存放的数据转换为ASCII码再存到文件中去 ;读文件中的数 据时就进行相反的过程,先把ASCII转换为二进制,再放到内存中去。 ASCII码与二进制的区别,以数字0为例(虽然在计算机中都是0、1): 0的ASCII码是十进制48,存的就是110001。而二进制形式存的是00000。 这样一来对文本文件的操作比对二进制的操作要慢。
特点3、文本文件是顺序文件,那么对它的操作REWRITE、RESET是有差别的,特点3、文本文件是顺序文件,那么对它的操作REWRITE、RESET是有差别的, REWRITE只能是写,而且如果原文件有数据那么将先全部清除(当然这条命令对 于随机文件也是这样);RESET是读,而且只能读,随机文件RESET也可读可写。 顺序文件不能同时进行读写,所以文本文件不能同时进行读写。 同时进行读写具体是什么意思? 特点4、文本文件与类型文件相比,它是由一些称为记录的行组成,简单的说, 它是分行的,一行称为一个记录。但是类型文件不分行;而且文本文件每一行(记 录)的可由多个数据元素组成,且每个数据元素可以不同类型,但是类型文件所有 的数据元素必须是同一类型(这也是类型文件名称的由来)。
特点5、文本文件类型变量的定义: VAR 文件变量名:TEXT; {TEXT表示这个变量是文本文件类型} 而类型文件变量的定义是: 文件变量名: FILE OF 基类型 {基类型决定了文件只能存什么类型的数据} 同时注意:在磁盘中文本文件的后缀名是TXT,也就是说所有的文本文件 的写法都是:文件名。TXT。(而TEXT是PASCAL中文本文件类型变量的标识符) 那么与文本文件类型变量相联系的文件都必须是文本文件。 也就是说在ASSIGN过程中要注意这点,例如: ASSIGN(FV,’TABLE。TXT’) 那么TABLE。TXT可以直接显示,TABLE。DAT显示的就是乱码。
二、文本文件的操作: 前面学过操作步骤对于文本文件也是一样的,因为对文本文件的操作也是文 件操作,如REWRITE、RESET、READ、WRITE和函数EOF()都是一样的,但 要注意一点:文本文件是顺序文件,不能同时进行读写,所以用RESET打开文件时 只能进行读。 PASCAL的标准输入文件INPUT就是文本文件,我们平时写的那些输入语句 如:READ(A,B,C),其实就是READ(INPUT,A,B,C)。只是因为我们 经常要用到这些语句所以系统就简化了,预先为你定义了这个文件变量。 在这里A、B、C三个变量可以不同类型,这就是对文本文件一行的各数据项 可以是不同类型这句话的理解。
三、READ、READLN、WRITE、WRITELN的具体操作过程:三、READ、READLN、WRITE、WRITELN的具体操作过程: 因为文本文件是以行为记录来存储的,所以READ、READLN、WRITE、 WRITELN这4个命令的操作会不一样,而类型文件存放的时候不分行, READLN、WRITELN这两个命令不能使用。 在文本文件中除了有文件结束符外,还比类型多了一个行结束符,也就是 说每一行都有一个行结束符号,行结束符就是你在键盘上输入的时候按回车产生 的符号。
那么READ、READLN、WRITE、WRITELN的具体过程是什么呢?那么READ、READLN、WRITE、WRITELN的具体过程是什么呢? 1、 READ/READLN:从文件中读数给变量,使用方法: READ/READLN(文本文件类型变量,变量1,变量2……); 如:READ(F,A,B,C); 2、 WRITE/WRITELN:把变量中的数据存到文件中去,使用方法: WRITE/WRITELN (文本文件类型变量,变量1,变量2……); 如:WRITE(F,A,B,C); 详细过程见书P310。
四、文本文件专有的操作过程与函数: 1、添加过程:APPEND的使用方法: APPEND(文本文件类型变量); 功能:APPEND过程是以写的方式打开一个已经存在的文件,并且使文 件指针指向文件末尾,那么下次的WRITE(文件类型变量,变量1,变量2……) 这样的操作就是直接在文件末尾添加了,因为此时的文件指针已经指向文件末尾。 以这个过程打开一个文件后就不要再用RESET去打开文件了,因为文件已 经被打开。这样在文件后面添加数据也不用SEEK过程和FILESIZE函数相配合了, 因为文件指针已经指向最后了。 注意:这个过程只能对文本文件操作,而且这是TURBO PASCAL的命令。 并且这个命令同RESET命令一样,指定的文件必须先存在,否则会出错。
2、函数:EOLN的用法: EOLN(文本文件类型变量); 功能:判断文件指针是否已经指向某一行的结尾,是就返回真,否则就 返回假。 因为文本文件是分行的形式存放数据的,每一行称为一个记录,所以多 了一个这样的函数来判断是否文件指针已经到了一行的结尾。而类型文件不是以 行来存放而是连续存放,所以就没有这个函数。 注意:以上讲的APPEND过程和EOLN函数是文本文件专有的命令。
五、程序举例: (1)、 例题13、1(P305),将自然数1——10以及他们的平方根写到磁盘文件 里,以文本文件的形式存放。 PROGRAM WFILE; VAR FV:TEXT; I:INTEGER; BEGIN ASSIGN(FV,’TABLE。TXT’); REWRITE(FV); FOR I:=1 TO 10 DO WRITELN(FV,I:2,SQRT9I):8:3); CLOSE(FV) END。 在文本文件的操作里请注意,WRITE各输出项可以有不同类型,也可以是 表达式,就跟我们平时写WRITE语句一样。这与类型文件的WRITE语句不一样。
程序举例: (2)、 逐行输入文本文件中的数据到屏幕上。(假设文件是10行1列) 分析:数据显示到屏幕上就跟我们把数据显示到屏幕上是一样的,只是这次 数据的来源不是键盘,而是文本文件里的数据。 PROGRRAM WFILE; VAR FV:TEXT; I,J,K:INTEGER; BEGIN ASSIGN(FV,’TABLE。TXT’); RESET(FV); FOR I:=1 TO 10 DO BEGIN READ(FV,J,K);{从键盘接受数据给变量J、K,并把J、K的值送给FV} WRITELN(J:5,K:5) END; CLOSE(FV) END。 因为文本文件存放的是ASCII码,而ASCII码可以直接显示在屏幕上,所以TABLE。TXT文件你 可以直接打开看。
(3)、 由键盘输入若干行文本,并存到文件F1。TXT中。 分析:此程序的关键在于如何把键盘上输入的一行存到文件里时也是一行,另外因为要求是 若干行,所以什么时候结束也是一个要考虑的问题。 首先讲解一下系统的规定,当从键盘上输入一行时会按回车,那么这个时候EOLN函数就为真, 也就是说一行没有输完(即没有按回车)EOLN都为假。另外规定键入CTRL+Z时EOF为真,这个时候 就可以结束文件输入了,利用这两个特性就可以编写如下程序:。
PROGRAM WTEXT; VAR FV:TEXT; CH:CHAR; BEGIN ASSIGN(FV,’F1。TXT’); REWRITE(FV); WHILE NOT EOF DO {从键盘上输入CRTL+Z则EOF就为真,也就是输入结束} BEGIN WHILE NOT EOLN DO {按回车则EOLN就为真,表示一行结束,如果不结束就执行} BEGIN READ(CH);{从键盘读数据到变量} WRITE(FV,CH); {把变量的数据存到与FV相联系的文件里} END; READLN; {表示从下一行开始读,也就是把读的指针指向下一行} WRITELN(FV);{输出一个行结束符到文件里,因为文件里每行都有结束符,同时把 文件指针指向下一行} END; CLOSE(FV) END。
程序举例1:把数据写到文件中 将自然数1——10以及它们的平方根写到磁盘文件TABLE.txt中。 程序举例2:读文件中的数据。 把上例中TABLE。TXT中的数据读入,显示到屏幕上。 程序举例3:增加数据 通过第一个程序,在文件TABLE。DAT中已经有了自然数1——10以及他们的平 方根,排列的方式是:1、1的平方根、2、2的平方根……。 现在下面的程序实现的功能是:从键盘输入1——10中的任意Y一数,在 文件TABLE。TXT中找到它的平方根,并显示在屏幕上。