pascal中,文件的读入和读出问题
发布网友
发布时间:2023-09-06 21:51
我来回答
共1个回答
热心网友
时间:2023-09-26 11:22
分类: 电脑/网络 >> 程序设计 >> 其他编程语言
问题描述:
pascal中,文件的读入和读出问题(例如给你一组数据存在1.txt中,要求在2.txt中输出),怎样编程来实现?
解析:
一、文件的概念
文件是按照其内在的逻辑联系分别组织在一起,构成不同的数据 *** 。它的名字就是文件名。使用文件有以下几点好处:
(1)文件可以永久保存,其中的数据不会因为应用程序的结束或关机而消失。
(2)文件中的数据可以为多个应用程序所共享。
(3)文件中的数据可以多次重复使用。
(4)文件中的存放数据的数量在理论上没有*。
在Turbo Pascal语言中,文件是由一系列基本数据元素排列而成的,这些数据元素的数据类型是相同的,但通常有不同的取值。文件的基本数据元素的数据类型称为文件的基类型。文件中所含的数据元素的个数称为文件的长度。文件的长度和文件所占有的字节数可能不同。文件中元素的个数即文件的长度不是固定不变的。
用于暂时存放文件中的数据的内存区称为文件缓冲区。对于文件的操作至少要由以下三个过程:
(1)打开一个文件
(2)对文件进行操作(读或写)
(3)关闭文件
按照对文件的读写方式,可以把文件分为顺序文件和随机文件。顺序文件的特点是对文件的读或写操作都只能按文件中元素的顺序,所以顺序文件的读和写不能交叉进行。随机文件的特点是可以直接对文件中某个元素进行读或写,而不需要先对它前面的元素作相同的操作。对于随机文件的读和写可以交叉进行。
Turbo Pascal语言中,按照文件的存储方式可以把文件分为文本文件和类型文件。若文件中的数据都是以ASCII码形式存储的,则这种文件称为文本文件。若文件中的数据都是以非ASCII码形式存储的,则这种文件称为类型文件。Turbo Pascal中文本文件都是顺序文件,类型文件都是随机文件。
二、类型文件
按数据的二进制代码形式存放时的文件称为类型文件。如果再按照组成类型文件的元素数据结构分,又可以分为有类型文件和无类型文件。其定义为:
type 类型名=file of 基类型;{有类型文件}
类型名=file; {无类型文件}
例如:var f:file of integer;
说明f为名的变量对应文件将用于存放整数。
var g:file;
说明g为名的变量对应文件的数据无任何规定。
Turbo Pascal有关类型文件的函数和过程
(1)assign过程
形式:assign(f,str);
功能:将文件名字符串str赋给文件变量f,程序对文件变量f的操作代替对文件str的操作。
(2)rewrite过程
形式:rewrite(f);
功能:建立并打开一个新的允许写磁盘文件,其文件名必须先由assign过程赋给变量f。这时,指向文件元素的指针指向第一个元素,rewrite过程所建立的文件为空文件。
(3)reset过程
形式:reset(f);
功能:打开一个已经存在的磁盘文件,其文件名必须先由assign过程赋给变量f,该文件只能读,指向文件元素的指针指向第一个元素。
(4)read过程
形式:read(f,var表);
功能:从磁盘文件f中,将数据依次读到var表表示的各个变量中。
(5)write过程
形式:write(f,var表);
功能:将var表所表示的各个变量的值依次写到磁盘文件f上。
(6)close过程
形式:close(f);
功能:关闭和f关联的磁盘文件,在写操作时自动产生一个文件结束标志。
(7)seek过程
形式:seek(f,n);
功能:把文件指针移到f指明文件的第n个元素。
(8)eof函数
形式:eof(f);
功能:若文件指向文件尾,则返回true,否则返回false。
对有类型文件的写操作步骤为:
assign(f,str);
rewrite(f);
write(f,var表);
close(f);
对有类型文件的读操作步骤为:
assign(f,str);
reset(f);
read(f,var表);
close(f);
例:在磁盘上建立一个1~50的平方数的数据文件zhoufei.dat。要求以一个数,这个数的平方数的格式写入。
program zhoufei;
var f:file of integer;
i:integer;
begin
assign(f,'zhoufei.dat');
rewrite(f);
for i:=1 to 50 do write(f,i,sqr(i));
close(f)
end.
三、文本文件
文本文件的内容有ASCII字符集中的字符组成,因此文本文件也称ASCII码文件,它可以用DOS中的type命令列出内容。文本文件具体是由一系列行组成,每一行可以包括0个或多个字符型成分,并以也行结束符结尾,文本文件类型TXT和类型文件file of char区别在于后者不包含行结束符。
文本文件和类型文件在读写上的差别在于前者只能按次序顺序读写,而后者可以不按照次序读写。适用文本文件的函数和过程除了用于类型文件操作的过程和函数外主要还有:
(1)readln过程
形式:readln(f,var表);或readln(f);
功能:从磁盘文件f中,将数据依次读到var表表示的各变量中(其中readln(f)只读数据),并将文件指针移到行结束符后,就是下一行开头。
(2)writeln过程
形式:writeln(f,var表)或writeln(f);
功能:将var表所表示的各个变量的值依次写到磁盘文件f上去(writeln(f)不写值),然后再写一个行结束符。
(3)append过程
形式:append(f);
功能:打开一个已经存在的磁盘文件,其文件名必须和assign过程中的变量名f相对应,该文件只能写,此时文件指针指向文件尾。
(4)eoln函数
形式:eoln(f);
功能:若文件指针指向行结束符或文件结束符,则返回true,否则返回false。
对文本文件的写操作步骤:
assign(f,str);
rewrite(f); 或append(f);
write(f,var表);或writeln(f);
close(f);
对文本文件的读操作步骤:
assign(f,str);
reset(f);
readln(f,var表);或readln(f);
close(f);
例:随机产生30个随机整数存放于文本文件zhoufei.txt 中
program zhoufei;
const n=30;
var ra:text;
i:integer;
begin
randomize;
assign(ra,'zhoufei,txt');
rewrite(ra);
for i:=1 to n do writeln(ra,random(100));
close(ra)
end.
附陶陶摘苹果
program apple;
var a:array[1..10] of integer;
n,i,total:integer;
begin
assign(input,'apple.in');reset(input);
assign(output,'apple.out');rewrite(output);
for i:=1 to 10 do read(a[i]);
readln(n);
n:=n+30;
for I:=1 to 10 do
if n>=a[i] then inc(total);
writeln(total);
close(intput);
close(output);
End.