永发信息网

如何用pascal产生文件?

答案:2  悬赏:40  手机版
解决时间 2021-04-23 16:16

网上有好多测试数据,里面的In文件和out文件以及exe文件都是怎么回事?

怎么用呀?

最佳答案
文件的概念

文件是一种构造型的数据类型。在程序中都需要产生一些输出,也需要接受若干个输入。这些输入、输出实际上是用文件的方法来实现的,在Pascal中用标准文件“input”和“output”来实现,它们分别对应标准输入设备和标准输出设备。这也就是一些程序的程序书写如下的原因了:
   program exp(input,output);(可省略不写)
   ...


但有时大量数据的读入和输出都是来自磁盘文件,这就要求必须熟练掌握对磁盘文件的操作。
  Pascal中的文件主要用于存放大量的数据。如:成绩管理,原始数据很多,使用文件先将其存入磁盘,通过程序读出文件中的数据再进行处理,比不使用文件要来得方便、有效。它的名字就是文件名。使用文件有以下几点好处:
  (1)文件可以永久保存,其中的数据不会因为应用程序的结束或关机而消失。
  (2)文件中的数据可以为多个应用程序所共享。
  (3)文件中的数据可以多次重复使用。
  (4)文件中的存放数据的数量在理论上没有限制。


Pascal中所谈及的文件,称之为内部文件。内部文件的特点是文件的实体(实际文件)也是存储在外存储器上,成为外部文件的一分子,但在使用时必须在程序内部以一定的语句与实际文件联系起来,建立一一对应的关系,用内部文件的逻辑名对实际文件进行操作。内部文件的逻辑名必须符合Pascal语言标识符的取名规则。
  在Pascal语言中,文件是由一系列基本数据元素排列而成的,这些数据元素的数据类型是相同的,但通常有不同的取值。文件的基本数据元素的数据类型称为文件的基类型。文件中所含的数据元素的个数称为文件的长度。文件的长度和文件所占有的字节数可能不同。文件中元素的个数即文件的长度不是固定不变的。用于暂时存放文件中的数据的内存区称为文件缓冲区。对于文件的操作至少要由以下5个过程:
  (1)说明文件类型,定义文件标识符;
  (2)建立内部文件与外部文件的联系;
  (3)打开文件;
  (4)对文件进行操作;
  (5)关闭文件。
  按照对文件的读写方式,可以把文件分为顺序文件和随机文件。顺序文件的特点是对文件的读或写操作都只能按文件中元素的顺序,所以顺序文件的读和写不能交叉进行。随机文件的特点是可以直接对文件中某个元素进行读或写,而不需要先对它前面的元素作相同的操作。对于随机文件的读和写可以交叉进行。
  Pascal语言中,按照文件的存储方式可以把文件分为文本文件和类型文件。若文件中的数据都是以ASCII码形式存储的,则这种文件称为文本文件。若文件中的数据都是以非ASCII码形式存储的,则这种文件称为类型文件。Pascal中文本文件都是顺序文件,类型文件都是随机文件。




文本文件
  文本文件又称为正文文件或行文文件,可以直接阅读,是人机通信的基本数据形式之一。文本文件的内容由ASCII字符集中的字符组成,因此文本文件也称ASCII码文件。文本文件具体是由一系列行组成,每一行可以包括0个或多个字符型成分,并以行结束符结尾。文本文件可用文字编辑程序(如Free Pascal的编辑窗口中或记事本中)直接建立、阅读和修改, 也可以由Pascal程序在运行过程中建立。


一、文本文件的定义
  文本文件的类型为text,它是由ASCII字符组成的,是Pascal提供的标准文件之一。标准文件text已由Pascal说明如下:type text=file of char;因此,同标准类型integer、real等一样可以直接用于变量说明之中,无需再由用户说明。 例如:
  var f1,f2:text;
  这里定义了两个文本文件变量f1和f2。


二、文本文件的建立
  文本文件的建立有两种方法:一是直接用Free Pascal的Edit建立原始数据文件;二是用程序的方式建立中间数据或结果数据文件。


例如将下表中的数据存入名为A.dat的文件中。
  3 4
  29 30 50 60
  80 90 70 75
  60 50 70 45
  操作步骤:进入Free Pascal的编辑状态;输入数据;存盘,文件名取A.dat。
  此时,已将数据存入文本文件A.dat中。文本文件也可用记事本等文本编辑器在windows下建立。
  如果用程序的方式建立文件,操作步骤为:
  1、定义文本文件变量;
  2、把一外部文件名赋于文本文件变量,使该文本文件与相应外部文件相关联;
  命令格式:assign(f,name)
  f为定义的文本文件变量,name为实际文件文件名
  如:assign(f1,'filein.in') {相对路径}
  或:assign(f1,'d:\pas\fileout.out') {绝对路径}
  这样在程序中对文本文件变量f1的操作,也就是对外部实际文件'filein.in'或'fileout.out'的操作。上例中文件'filein.in'是存贮在当前目录中,而文件'fileout.out'则是存贮在d:\pas\子目录中。
  3、打开文本文件,写准备;
  命令格式:rewrite(f)
  功能:创建并打开新文件准备写,若已有同名文件则删除再创建。
  4、对文件进行写操作;
  命令格式:write(f,<项目名>)或:writeln(f,<项目名>)
  功能:将项目内容写入文件f中
  5、文件操作完毕后,关闭文件。
  命令格式:close(f)


例11.1 从键盘输入下列数据,然后用程序写入名为B.dat的文件中。


3 4
  29 30 50 60
  80 90 70 75
  60 50 70 45


program exp11_1;
var i,j,n,m,x:integer;
f:text;
begin
write('n,m=');
readln(n,m);
assign(f,'b.dat');
rewrite(f);
writeln(f,n,' ',m);
for i:=1 to n do
begin
for j:=1 to m do
begin
read(x);
write(f,x,' ');
end;
readln;writeln(f);
end;
close(f);
end.
三、读取文本文件
  文本文件内容读取操作步骤:
  1、定义文本文件变量;
  2、用assign(f,name)命令,将内部文件f与实际文件name联系起来;
  3、打开文本文件,读准备;
  命令格式:reset(f)
  功能:打开一个已经存在的磁盘文件,该文件只能读,指向文件元素的指针指向第一个元素。


4、对文件进行读操作;
  命令格式:read(f,<变量名表>) 或readln(f,<变量名表>)
  功能:读文件f中指针指向的数据于变量中。
  5、文件操作完毕,用close(f)命令关闭文件。
例11.2 读出例1生成的文本文件B.dat中的内容,并输出到屏幕。


program exp11_2;


var i,j,n,m,x:integer;


f:text;


begin


assign(f,'b.dat');


reset(f);


read(f,n,m);


writeln(n,' ',m);


for i:=1 to n do


begin


for j:=1 to m do


begin


read(f,x);


write(x,' ');


end;


writeln;


end;


close(f);


readln


end.


由于文本文件是以ASCII码的方式存储,故查看文本文件的内容是极为方便,在windows状态可使用记事本等软件进行查看,在Free Pascal中可以象取程序一样取出文件进行查看。


四、文本文件的特点
  1、行结构
  文本文件由若干行组成,行与行之间用行结束标记隔开,文件末尾有一个文件结束标记。由于各行长度可能不同,所以无法计算出给定行在文本文件中的确定位置,从而只能顺序地处理文本文件,而且不能对一文本文件同时进行输入和输出。
  2、自动转换功能
  文本文件的每一个元素均为字符型,但在将文件元素读入到一个变量(整型,实型或字符串型)中时,Pascal会自动将其转换为与变量相同的数据类型。与此相反在将一个变量写入文本文件时,也会自动转移为字符型。
五、例题分析

例11.3 某学习小组有10人,参加某次测验,考核6门功课, 统计每人的总分及各门的平均分,将原始数据及结果数据放入文本文件中。
  分析
  (1)利用Free Pascal的edit建立原始数据文件textin.txt存贮在磁盘中,其内容如下:
  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)建立结果数据文件,文件名为textout.txt。
program exp11_3;
var

f:text;

i,j,n,m,s:integer;

data:array[1..11,0..7] of integer;

p:array[1..6] of integer;

procedure data_in;

var i,j:integer;

begin

assign(f,'textin.txt');

reset(f);

read(f,n);readln(f,m);

for i:=1 to n do

for j:=0 to m do

read(f,data[i,j]);

close(f);

end;

procedure data_out;

var i,j:integer;

begin

assign(f,'textout.txt');

rewrite(f);

for i:=1 to n do

begin

for j:=0 to m+1 do

write(f,data[i,j]:4);

writeln(f);

end;

write(f,' ');

for j:=1 to m do

write(f,p[j]:4);

writeln(f);

close(f);

end;

begin

data_in;

fillchar(p,sizeof(p),0);

for i:=1 to n do

begin

s:=0;

for j:=1 to m do

begin

s:=s+data[i,j];

p[j]:=p[j]+data[i,j];

end;

data[i,m+1]:=s;

end;

for i:=1 to n do

begin

for j:=0 to m+1 do

write(data[i,j]:4);

writeln;

end;

write(' ');

for j:=1 to m do

begin

p[j]:=p[j] div n;

write(p[j]:4);

end;

writeln;

data_out;

end.
例11.4 读入一个行长不定的文本文件。排版,建立一个行长固定为60个字符的文件, 排版要求:(1)当行末不是一个完整单词时,行最后一个字符位用'-'代替, 表示与下一行行头组成完整的单词;(2)第一行行头为两个空格,其余各行行头均不含有空格。
  分析
  (1)建立原始数据文件。
  (2)程序边读入原始数据文件内容,边排版。因为行长和文件长度不固定,所以要使用下面函数:

eoln函数
  形式:eoln(f);
  功能:若文件指针指向行结束符或文件结束符,则返回true,否则返回false。


eof函数
  形式:eof(f);
  功能:若文件指向文件尾,则返回true,否则返回false。
  (3)每排完一行行长为60字符,并符合题中排版条件,写入目标文件中。
  设原始数据copy.in文件内容如下:
  Pavel was arrested.
  That dat Mother did not light the stove.
  Evening came and a cold wind was blowing.
  There was a knock at the window.
  Then another.
  Mother was used to such knocks,but this time she gave a little start of joy.
  Throwing a shawl over her shoulders,she opened the door.


program exp11_4;


const


maxlen=60;


var


f1,f2:text;


ch,ch1:char;


s:string[maxlen];


i,j:integer;


inname:string[20];


begin


write('enter textin filename');


readln(inname);


assign(f1,inname);


reset(f1);


assign(f2,'copy.out');


rewrite(f2);


j:=0;s:=' ';


while not eof(f1) do


begin


while not eoln(f1) do


begin


inc(j);


read(f1,ch);


if j=maxlen+1 then


case ch of


' ':begin writeln(f2,s);s:='';j:=0; end;


'.':begin writeln(f2,s);j:=1;s:=ch; end


else


begin


ch1:=s[60];


if s[59]=' ' then s[60]:=' ' else s[60]:='-';


writeln(f2,s);j:=2;s:=ch1+ch;


end;


end


else s:=s+ch;


end;


readln(f1);


end;


writeln(f2,s);


close(f1);


close(f2);


end.
对copy.in文本文件运行程序得到排版结果文件copy.out内容如下:
    Pavel was arrested.That dat Mother did not light the stov-
  evening came and a cold wind was blowing.There was a knock
  at the window.Then another.Mother was used to such knocks,b-
  ut this time she gave a little start of joy.Throwing a shawl
  over her shoulders,she opened the door.

全部回答

这就是测试数据,in 文件就是输入文件,out 文件自然就是输出文件了,用起来就是在运行时输入的是输入文件,输出的是输出文件,只要加上

assign(input,'文件名.in');

reset(input);

assign(output,'文件名.out');

rewrite(output);

最后别忘了在程序末尾加上

close(input);close (output);

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
脸干怎么办,
,一撇到汉阳,里面有个人,只有一寸长
怎么样才算人性管理?
和男朋友交往了两个月,跨年那晚上没和男友在
爱情经历美文,有关经历磨难才能成功的名言警
李开芳孙传芳梅兰芳何其芳朱芳雨,为什么这么
之前不知道他喜欢我,知道时他却走远了。我好
十八路弹腿 横着练 什么意思
从劳动路到西安团结南路高新医院的车有哪些
米修米修在什么地方啊,我要过去处理事情
乙酸的化学结构?
为什么我的电脑总是蓝屏?
qq行号到期时怎么交费啊?
女人为什么老是误会男人?
你们有没有遇到恐怖的事说来听听?
推荐资讯
什么服装比较受欢迎
我现在16岁第一次刮胡子,我想知道会不会有胡
叮当精品屋怎么去啊,有知道地址的么
谁有好看的言情小说?
新旧UC并存
宝贝不好好吃奶是为什么
最新的死神OP,ED的名字是什么?
汽车雨刮器进了好多小石头水泥块怎么办
寻仙60级金刚买什么样的神宠最好,,神宠应该
现在诺基亚的智能手机有什么机型最好用!最好
偶尔出来放松的句子,疯疯癫癫才自在下句
诺基亚6210S能挂几个QQ号
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?