纸质数据结构
帕斯卡所说的文件被称为内部文件。内部文件的特点是文件的实体(实际文件)也存储在外部存储器中,成为外部文件的一部分。但在使用时,必须用程序中的某些语句与实际文件链接起来,建立一一对应关系,实际文件必须用内部文件的逻辑名进行操作。内部文件的逻辑名称必须符合PASCAL语言标识符的命名规则。
Pascal中的文件主要用于存储大量数据。比如:成绩管理,有大量的原始数据,先用文件存储在磁盘,然后通过程序读取文件中的数据进行处理,比不使用文件更方便有效。
Pascal中的文件被定义为相同类型元素的线性序列。文件中的元素按照一定的顺序排列,每个元素都可以从头到尾访问。从定义上看,文件类似于数组,但它们之间有明显的区别,主要如下:
(1)文件的每个元素按顺序存储在外部文件设备(如磁盘)上。因此,文件可以由Pascal程序或文本编辑软件生成,如edit、ws、Turbo Pascal的edit命令等。在程序执行之前,或在运行过程中由程序生成,运行后仍存储在外部设备上。
(2)在系统内,通过文件指针管理对文件的访问。文件指针是一个计算器,它记录程序在文件中的位置。在固定的时刻,程序只能读取或写入文件中的一个元素。在将元素写入文件或从文件中读取元素后,相应的文件指针会移动到下一个元素位置。而数组由下标访问。
(3)在文件类型的定义中,不需要指定文件的长度,也就是元素的个数,这意味着元素的数据是可以动态变化的。文件可以非常大,包含许多元素,也可以是没有任何元素的空文件。数组中元素的数量是固定的。
使用文件大致有以下步骤;
(1)解释文件类型,定义文件标识符;
(2)建立内部文件和外部文件之间的联系;
(3)打开文件;
(4)操作文件;
(5)关闭文件。
Turbo Pascal将文件分为三类:文本文件(顺序)、类型化文件(顺序或随机)和非类型化文件(顺序或随机)。这些文件及其操作将在下面描述。
首先,文本文件
文本文件,又称文本文件或文本文件,可以被人直接阅读,是人机交流的基本数据形式之一。文本文件可以由文本编辑程序(如DOS edit或Turbo PASCAL edit命令)直接创建、读取和修改,也可以由PASCAL程序在运行过程中创建。
1,文本文件的定义:
文本文件就是文本,由ASCII字符组成,是Pascal提供的标准文件之一。Pascal对标准文件文本的描述如下:
TYPE TEXT =文件的字符;
因此,文本像标准类型INTEGER、READ等一样。,可直接用于变量描述,无需用户解释。例如:
VAR F1,F2:TEXT;
这里定义了两个文本文件变量F1和F2。
2、文本文件的建立
创建文本文件有两种方法:
(1)用Turbo Pascal编辑直接创建原始数据文件。
示例1将下表中的数据存储在名为A.dat的文件中
3 4
29 30 50 60
80 90 70 75
60 50 70 45
操作步骤:
①进入Turbo Pascal的编辑状态;
②输入数据;
③保存,文件名为A.dat
此时,数据已经存储在文本文件A.dat中,文本文件也可以通过DOS中的Edit等软件建立。
(2)通过程序建立中间数据或结果数据文件。
程序创建文件的步骤如下:
(1)定义文本文件变量;
(2)将外部文件名分配给文本文件变量,以将文本文件与相应外部文件相关联;
命令格式:ASSIGN(f,name)
f是定义的文本文件变量。
Name是实际的文件名。
例如:assign (f1,' file in.dat `)
或者:赋值(f1,' pas \ file in.res `)
这样,程序中文本文件变量F1的操作也是外部实际文件FILEIN的操作。在上面的例子中,文件FILEIN。“DAT”存储在当前目录中,而文件。“RES”存储在PAS子目录中。
③打开文本文件,准备写;
命令格式1:重写(f)
功能:创建并打开一个新文件进行写入。如果存在同名的现有文件,请将其删除并重新创建。
命令格式2:追加(f)
功能:打开现有文件并追加它。
④写文件;
命令格式:WRITE(f,)
Or: WRITELN(f,)
函数:将项目内容写入f文件。
(5)文件操作结束后,关闭文件。
命令格式:关闭(f)
例2从键盘读取表12.1的数据,用程序写入一个名为B.dat的文件。
3.读取文本文件
读取文本文件内容的操作步骤:
(1)定义文本文件变量;
②使用ASSIGN(f,name)命令将内部文件f与实际文件名链接起来;
③打开文本文件进行阅读;
命令格式:READ(f,;)READLN(f,& lt变量列表>;)
函数:将F文件中指针指向的数据读入变量。
文本文件提供了另外两个命令,在文本操作中非常有用。它们是:
永别了终结者
EOF(f):回显文件结束符
⑤文件操作完成后,使用关闭(f)命令关闭文件。
例3读出例12.1中创建的文本文件并输出。
因为文本文件是以ASCII码存储的,所以查看文本文件的内容非常方便。在DOS状态下,可以在DOS中使用TYPE等命令,在Turbo Pascal中,可以把文件作为程序拿出来查看。
4.文本文件的特征
(1)行结构
文本文件由几行组成,由行结束标记分隔,在文件的末尾有一个结束标记。由于每行的长度可能不同,无法计算出给定行在文本文件中的确切位置,所以只能对文本文件进行顺序处理,不能同时输入和输出一个文本文件。
(2)自动转换功能
文本文件的每个元素都是字符类型,但是当文件元素读入变量(整数、实数或字符串类型)时,Pascal会自动将其转换为与变量相同的数据类型。相反,当一个变量被写入文本文件时,它也会被自动转换成字符类型。
例4在一个研究组中有65,438+00人。他们参加一次考试,评定六个科目,统计每个人的总分和每个科目的平均分,将原始数据和结果数据放入一个文本文件中。
分析
(1)原始数据文件TESTIN。使用Turbo Pascal编辑建立DAT并存储在磁盘中。其内容如下:
10 6
1 78 89 67 90 98 67
2 90 93 86 84 86 93
3 93 85 78 89 78 98
4 67 89 76 67 98 74
5 83 75 92 78 89 74
6 76 57 89 84 73 71
7 81 93 74 76 78 86
8 68 83 91 83 78 89
9 63 71 83 94 78 95
10 78 99 90 80 86 70
(2)程序读入原始数据文件,求出每个人的总分和每门的平均分;
(3)建立文件名为TEXTIN的结果数据文件。决议.
程序:
例5读入一个可变长度的文本文件。排版:建立一个固定长度为60个字符的文件。排版要求:(1)当一行的末尾不是一个完整的单词时,将该行的最后一个字符位置替换为'-',即与下一行的头形成一个完整的单词;(2)第一行的表头是两个空格,其他行的表头不含空格。
分析
(1)创建原始数据文件。
(2)程序在排版的同时读取原始数据文件的内容。
(3)每行60个字符,满足题目中的排版条件,写入目标文件。
设置原始数据文本副本。DAT文件如下:
帕维尔被捕了。
那个母亲没有生火。
夜晚来了,冷风吹着。
有人敲窗户。
然后另一个。
母亲已经习惯了这样的敲打,但这一次她开始有点高兴了。
她披上围巾,打开了门。
程序:
在文本副本上运行程序。DAT文本文件来获取排版结果文件TEXTCOPY。RES内容如下:
帕维尔被捕了。那个母亲没有点燃炉子-
夜晚来了,冷风吹着。有人敲门
在窗口。然后另一个。母亲习惯了这样的敲门,b-
但是这一次她开始有点高兴了。扔披肩
她回头打开了门。
第二,文件有多种类型
文本文件中的所有元素都是字体字符。要在文件中存储混合数据,必须使用类型化文件。
1.类型化文件的定义
类型化文件中的元素可以混合存储为二进制格式,所以类型化文件(字符型文件除外,因为本质上是文本文件)不能像文本文件一样被编辑软件读取和处理。
类型化文件的类型描述格式为:
类型标识符= =基本类型的文件;
其中基本类型可以是除文件类型以外的任何类型。例如:
FILE 1 =整数文件;
FILE2 =字符串数组[1 - 10]的文件;
FILE3 =字符集文件;
FILE4 =真实的文件;
文件5 =记录文件;
名称:字符串;
课程:READ的数组[1-10];
孙:读书;
结束;
以此类推,其中文件2、文件3和文件5中的数组、集合和记录的类型可以在定义文件变量之前进行描述。
例如:
增值转销公司
f 1:FILE;
F2,F3:file 3;
F4:档案5;
像所有前面的类型描述和变量定义一样,文件类型描述和变量定义也可以合并,例如:
增值转销公司
F1:整数文件;
F2,F3:字符集文件;
F4:记录档案
名称:字符串;
课程:实数的数组[1-10];
和:读;
结束;
Turbo Pascal可以以顺序和随机方式访问类型化文件。
为了随机访问键入的文件,Turbo Pascal提供了以下命令:
命令格式1: seek (f,n)
函数:将当前指针移动到指定F文件的第N个组件,其中F为非文本文件,N为长整数。
命令格式2: filepos (f)
函数:返回当前文件指针,当前文件指针在文件头时返回。函数值是长整数。
命令格式3:文件大小(f)
函数:返回文件的长度。如果文件为空,则返回零,函数值是长整数。
2.建立打字文件
类型化文件只能由程序创建,操作步骤与文本文件类似,但区别在于:(1)类型化文件的定义与文本文件不同;(2)使用SEEK命令指定指针,可以随机写入类型化文件。
3.访问键入的文件
访问类型化文件的操作步骤与访问文本文件类似,但区别在于:(1)类型化文件的定义与文本文件不同;(2)类型化文件可以使用SEEK命令访问任何记录和记录中的任何元素。
例6:建立几个学生的姓名顺序、座位号、六门课程总成绩的打字档案。
分析:为了简单起见,假设有一个文本文件FILEDATA。TXT,其内容如下:
10
李红
1 89 67 56 98 76 45
王明
2 99 87 98 96 95 84
张艺宏
3 78 69 68 69 91 81
常洪
4 81 93 82 93 75 76
林星
5 78 65 90 79 89 90
罗泽
6 96 85 76 68 69 91
林金金
7 86 81 72 74 95 96
王政
8 92 84 78 89 75 97
毛凌
9 84 86 92 86 69 89
程颐
10 86 94 81 94 86 87
第一个数字10表示有10个学生,后面是第一个学生的名字,座位号,六个年级,然后是第二个学生,以此类推。
从文本文件中读取数据,找出每个人的总分,建立一个类型化的文件,文件名为filedata.fil,文件类型为record studreco,如下例所示。
程序:
在示例7中,生成的数字1-16的平方、立方和四次表存储在一个类型化文件中,以顺序方式访问一次,以随机方式访问两个数字11和15及其在文件中对应的平方、立方和四次值。
分析:打出来的文件的文件名是BIAO。FIL,并且文件的类型是实数。
(1)生成数字1-16及其平方、立方和四次值,并将它们写入表中。FIL,并顺序读出输出;
(2)用SEEK指针指向编号为11和15的文件的位置,位置分别为10×4和14×4(注意文件的第一个位置为0),读出值和对应的平方、立方、四次值进行输出。
程序:
程序运行结果如下:
此外,Turbo Pascal还提供了第三种形式的文件,即无类型文件。无类型文件是低级I/O通道。如果不考虑类型化文件、文本文件等磁盘上字节序列的逻辑解释,数据的物理存储也不过是一些字节序列。这样就和内存的物理单元一一对应了。无类型文件使用128个连续字节作为输入输出操作的记录(或组件),数据直接在磁盘文件和变量之间传输,节省了文件缓解区,因此比其他文件占用内存少,主要用于直接访问任何固定长度元素的磁盘文件。
这里不介绍非类型化文件的具体操作,请参考相关书籍。
第三,综合实例分析
例8为城市飞机建立一个往返邻接表。文本文件CITY。DAT包含以下内容:
第一行中的两个数字n和v;
n代表可以游览的城市数量,n为正数< 100;
V代表下面要列出的直飞航班数,V为正数< 100;
接下来的n行是城市名称,可以坐飞机去;
下一条V线每条线有两个城市,中间用空格隔开,表示两个城市有直航。
例如,CITY1 CITY2表示从CITY1飞往CITY2或从CITY2飞往CITY1。
生成文件城市。RES,由0和1组成的N×N邻接表。
邻接表被定义为:
分析
(1)从文本文件city.dat中读取的N个城市名存储在某数组CT中;
(2)读入V线换乘航班的城市名称,为每条线找到两个城市在CT中的位置L和K,建立邻接关系,其中lj[l,k]=1,LJ [K,J]= 1;
(3)将生成的邻接表写入文本文件CITY.RES。
让城市的内容。数据如下:
10 20
福州
北京
强迫…做…;(Shanghai)上海
武汉
香港
天金
沈燕
南禅寺
昌萨
广州
福州北津
福州上海
福州广州
北京上海
广州北金
武汉福州
上海广州
香港北京
福州香港
南川北津
南禅天金
天金北金
上海chansa
广州武汉
chansa beijin
武汉北金
沈燕北津
沈燕天金
上海沈燕
广州沈燕
程序:
获取的城市的内容。RES文件如下:
10
1福州
2北京
3上海
4武汉
5香港
6天金
7沈燕
8南禅
9 chansa
10广州
0 1 1 1 1 0 0 0 0 1
1 0 1 1 1 1 1 1 1 1
1 1 0 0 0 0 1 0 1 1
1 1 0 0 0 0 0 0 0 1
1 1 0 0 0 0 0 0 0 0
0 1 0 0 0 0 1 1 0 0
0 1 1 0 0 1 0 0 0 1
0 1 0 0 0 1 0 0 0 0
0 1 1 0 0 0 0 0 0 0
1 1 1 1 0 0 1 0 0 0
例9文件日期的内容。例12.3的FIL文件按总分排序。
分析:
文件排序是将文本文件的组成部分按照一定的要求进行排列,使文件有序。文件排序有两种:内部排序和外部排序。内部排序是指将文件的组成部分存储在一个数组中,然后排列该数组,最后将该数组存储在原始文件中。外部排列不同于内部排列。它不是将文件组件存储在数组中,而是直接对文件进行排序。内部排序比外部排序快,但是当文件很大时,它不能被转移到内存中。这时候用外排序比较合适。
这个程序使用SEEK进程来实现外部排序。
程序:
练习题
1.编写一个程序来计算文本文件中行尾标记的数量。
2.计算文本文件的平均、最大和最小行长度。
3.文本文件、文件。DAT,存储n个学生在某一科目的成绩,并将成绩转换成直方图存储在FILE.RES中。
例如,文件的内容。日期是:
五
78 90 87 73 84
直方图文件file的内容。RES如下:
五
********
*********
*********
*******
********
4.银行账户档案包含每个账户的账户细节:账号、名称、地址和收支平衡。写个程序,读入每个账户的账目,生成银行账户文件。
5.通讯录文件中每条记录的内容为:姓名、地址、公司、邮编、电话号码。一个程序被编程为按照姓名的顺序建立地址簿文件,这要求首先建立文件,然后按照姓名的顺序在外部排序。