展开全部
一、有类型文件的定义
有类型文件中的元素可以是混合型的,并以二进制格式存贮,因此有类型文件(除了字符类型文件,因为它实质上是文本文件)不象文本文件那样可以用编辑软件等进行阅读和处理。
有类型文件的类型说明的格式为:
类型标识符=File
of
基类型;
其中基类型可以是除了文件类型外的任何类型。例如:
file1=file
of
integer;
file2=file
of
array[1..10]
of
string;
file3=file
of
set
of
char;
file4=file
of
real;
file5=file
of
record;
name:string;
course:array[1..10]
of
real;
sum:real;
end;
等等,其中file2,file3,file5中的数组、集合、记录等类型可以先说明再来定义文件变量。
例如:
var
f1:file1;
f2,f3:file3;
f4:file5;
与前面所有类型说明和变量定义一样,文件类型说明和变量定义也可以合并在一起,例如:
var
f1:file
of
integer;
f2,f3:file
of
set
of
char;
file4=file
of
record;
name:string;
course:array[1..10]
of
real;
sum:real;
end;
Free
Pascal对有类型文件的访问既可以顺序方式也可以用随机方式。
二、有类型文件的建立
有类型文件的建立只能通过程序的方式进行,其操作步骤与文本文件程序方式建立的步骤相仿,不同之处:(1)有类型文件的定义与文本文件的定义不同;(2)有类型文件可以利用seek命令指定指针随机写入。
三、有类型文件的访问
有类型文件访问的操作步骤与文本文件的程序访问操作步骤相仿,区别之处:(1)有类型文件的定义与文本文件的定义不同;(2)有类型文件可以利用seek命令访问文件记录中的任一记录与记录中的任一元素。
对有类型文件的写操作步骤为:
assign(f,str);
rewrite(f);
write(f,var表);
close(f);
对有类型文件的读操作步骤为:
assign(f,str);
reset(f);
read(f,var表);
close(f);
四、例题分析
例11.5
设有一个整数文件f,现要求将其中的偶数乘以2,奇数减1,形成一个偶数文件。
分析:有两种方法,一是另外生成一个偶数文件g,一是将生成的偶数文件仍然保存在原文件f中,下面分别给出这两种方法的程序。
program
exp11_5_1(input,output);
{
生成一个偶数文件g
}
var
f,g
:
file
of
integer;
x:integer;
begin
assign(f,’input.txt’);
assign(g,’output.txt’);
reset(f);
rewrite(g);
while
not
eof(f)
do
begin
read(f,x);
if
odd(x)
then
x:=x-1
else
x:=x+x;
write(g,x);
end;
close(f)
;close(g);
end.
program
exp11_5_2(input,output);
{
将生成的偶数文件仍然保存在原文件f中
}
var
f
:
file
of
integer;
x,i:integer;
begin
assign(f,’input.txt’);
reset(f);
i:=1;
{
人为设定一个写指针
}
while
not
eof(f)
do
begin
read(f,x);
{
系统指针作为读指针
}
if
odd(x)
then
x:=x-1
else
x:=x+x;
seek(f,i);
{
将写指针定位到目标位置
}
write(f,x);
i:=i+1;
end;
close(f);
end.
例11.6
设有两个已经排好序(从小到大)的整数文件t1和t2,请编程将t1和t2合并成一个文件t,使得合并后的文件也是有序的(从小到大)。
program
exp11_6(input,output);
type
intfile
=
file
of
integer;
var
t1,t2,t:intfile;
procedure
paixu(var
f,g,h:intfile);
var
m,x,y:integer;
begin
reset(f)
;reset(g)
;rewrite(h)
;
m:=0;
{
m为初始标志
}
while
(not
eof(f)
and
not
eof(g))
do
begin
if
m=0
then
begin
read(f,x)
;read(g,y)
;m:=1;
end;
if
x<y
then
begin
write(h,x);read(f,x);
end
else
begin
write(h,y);read(g,y);
end;
end;
while
not
eof(f)
do
begin
read(f,x);write(h,x);
end;
while
not
eof(g)
do
begin
read(g,y);write(h,y);
end;
close(f);close(g);close(h);
end;
begin
{
main
}
assign(t1,’input1.txt’);
assign(t2,’input2.txt’);
assign(t,
’output.txt’);
paixu(t1,t2,t);
end.
注意:类型文件用写字本或TYPE命令打开看,全是乱码(二进制代码)。
有类型文件中的元素可以是混合型的,并以二进制格式存贮,因此有类型文件(除了字符类型文件,因为它实质上是文本文件)不象文本文件那样可以用编辑软件等进行阅读和处理。
有类型文件的类型说明的格式为:
类型标识符=File
of
基类型;
其中基类型可以是除了文件类型外的任何类型。例如:
file1=file
of
integer;
file2=file
of
array[1..10]
of
string;
file3=file
of
set
of
char;
file4=file
of
real;
file5=file
of
record;
name:string;
course:array[1..10]
of
real;
sum:real;
end;
等等,其中file2,file3,file5中的数组、集合、记录等类型可以先说明再来定义文件变量。
例如:
var
f1:file1;
f2,f3:file3;
f4:file5;
与前面所有类型说明和变量定义一样,文件类型说明和变量定义也可以合并在一起,例如:
var
f1:file
of
integer;
f2,f3:file
of
set
of
char;
file4=file
of
record;
name:string;
course:array[1..10]
of
real;
sum:real;
end;
Free
Pascal对有类型文件的访问既可以顺序方式也可以用随机方式。
二、有类型文件的建立
有类型文件的建立只能通过程序的方式进行,其操作步骤与文本文件程序方式建立的步骤相仿,不同之处:(1)有类型文件的定义与文本文件的定义不同;(2)有类型文件可以利用seek命令指定指针随机写入。
三、有类型文件的访问
有类型文件访问的操作步骤与文本文件的程序访问操作步骤相仿,区别之处:(1)有类型文件的定义与文本文件的定义不同;(2)有类型文件可以利用seek命令访问文件记录中的任一记录与记录中的任一元素。
对有类型文件的写操作步骤为:
assign(f,str);
rewrite(f);
write(f,var表);
close(f);
对有类型文件的读操作步骤为:
assign(f,str);
reset(f);
read(f,var表);
close(f);
四、例题分析
例11.5
设有一个整数文件f,现要求将其中的偶数乘以2,奇数减1,形成一个偶数文件。
分析:有两种方法,一是另外生成一个偶数文件g,一是将生成的偶数文件仍然保存在原文件f中,下面分别给出这两种方法的程序。
program
exp11_5_1(input,output);
{
生成一个偶数文件g
}
var
f,g
:
file
of
integer;
x:integer;
begin
assign(f,’input.txt’);
assign(g,’output.txt’);
reset(f);
rewrite(g);
while
not
eof(f)
do
begin
read(f,x);
if
odd(x)
then
x:=x-1
else
x:=x+x;
write(g,x);
end;
close(f)
;close(g);
end.
program
exp11_5_2(input,output);
{
将生成的偶数文件仍然保存在原文件f中
}
var
f
:
file
of
integer;
x,i:integer;
begin
assign(f,’input.txt’);
reset(f);
i:=1;
{
人为设定一个写指针
}
while
not
eof(f)
do
begin
read(f,x);
{
系统指针作为读指针
}
if
odd(x)
then
x:=x-1
else
x:=x+x;
seek(f,i);
{
将写指针定位到目标位置
}
write(f,x);
i:=i+1;
end;
close(f);
end.
例11.6
设有两个已经排好序(从小到大)的整数文件t1和t2,请编程将t1和t2合并成一个文件t,使得合并后的文件也是有序的(从小到大)。
program
exp11_6(input,output);
type
intfile
=
file
of
integer;
var
t1,t2,t:intfile;
procedure
paixu(var
f,g,h:intfile);
var
m,x,y:integer;
begin
reset(f)
;reset(g)
;rewrite(h)
;
m:=0;
{
m为初始标志
}
while
(not
eof(f)
and
not
eof(g))
do
begin
if
m=0
then
begin
read(f,x)
;read(g,y)
;m:=1;
end;
if
x<y
then
begin
write(h,x);read(f,x);
end
else
begin
write(h,y);read(g,y);
end;
end;
while
not
eof(f)
do
begin
read(f,x);write(h,x);
end;
while
not
eof(g)
do
begin
read(g,y);write(h,y);
end;
close(f);close(g);close(h);
end;
begin
{
main
}
assign(t1,’input1.txt’);
assign(t2,’input2.txt’);
assign(t,
’output.txt’);
paixu(t1,t2,t);
end.
注意:类型文件用写字本或TYPE命令打开看,全是乱码(二进制代码)。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询