文件处理
Pascal将文件视为分段组件,它们必须是统一类型。文件的类型由组件的类型决定。文件数据类型定义为:
type
file-name = file of base-type;
其中,基础类型表示文件组件的类型除了另一种文件类型之外,基类型可以是整数,实数,布尔,枚举,子范围,记录,数组和集合使用。VAR声明:
var
f1, f2,...: file-name;
以下是定义一些文件类型和文件变量的一些示例:
type
rfile = file of real;
ifile = file of integer;
bfile = file of boolean;
datafile = file of record
arrfile = file of array[1..4] of integer;
var
marks: arrfile;
studentdata: datafile;
rainfalldata: rfile;
tempdata: ifile;
choices: bfile;
创建和写入文件
让我们编写一个程序,为学生的记录创建数据文件。并创建一个称为students.dat的文件,转化为学生的数据写入其中:
program DataFiles;
type
StudentRecord = Record
s_name: String;
s_addr: String;
s_batchcode: String;
end;
var
Student: StudentRecord;
f: file of StudentRecord;
begin
Assign(f,'students.dat');
Rewrite(f);
Student.s_name := 'John Smith';
Student.s_addr := 'United States of America';
Student.s_batchcode := 'Computer Science';
Write(f,Student);
Close(f);
end.
编译运行时,程序会在工作目录中创建一个名为students.dat的文件。您可以使用文本编辑器(如记事本)打开文件,查看John Smith的数据。
从文件中读取
我们刚创建并编写称为students.dat的文件中。现在,让我们编写一个程序,从文件中读取学生的数据:
program DataFiles;
type
StudentRecord = Record
s_name: String;
s_addr: String;
s_batchcode: String;
end;
var
Student: StudentRecord;
f: file of StudentRecord;
begin
assign(f, 'students.dat');
reset(f);
while not eof(f) do
begin
read(f,Student);
writeln('Name: ',Student.s_name);
writeln('Address: ',Student.s_addr);
writeln('Batch Code: ', Student.s_batchcode);
end;
close(f);
end.
编译并执行上述代码时,会产生以下结果:
Name: John Smith
Address: United States of America
Batch Code: Computer Science
档案作为子程序参数
Pascal允许文件变量使用标准和用户定义子程序的参数。以下示例说明了此概念。该程序创建了一个称为rainfall.txt的文件,并存储了一些降雨数据。然后,它打开文件,读取数据并计算平均收缩。
请注意,如果对子程序使用文件参数,则必须将其声明为var参数。
program addFiledata;
const
MAX = 4;
type
raindata = file of real;
var
rainfile: raindata;
filename: string;
procedure writedata(var f: raindata);
var
data: real;
i: integer;
begin
rewrite(f, sizeof(data));
for i:=1 to MAX do
begin
writeln('Enter rainfall data: ');
readln(data);
write(f, data);
end;
close(f);
end;
procedure computeAverage(var x: raindata);
var
d, sum: real;
average: real;
begin
reset(x);
sum:= 0.0;
while not eof(x) do
begin
read(x, d);
sum := sum + d;
end;
average := sum/MAX;
close(x);
writeln('Average Rainfall: ', average:7:2);
end;
begin
writeln('Enter the File Name: ');
readln(filename);
assign(rainfile, filename);
writedata(rainfile);
computeAverage(rainfile);
end.
编译并执行上述代码时,会产生以下结果:
Enter the File Name:
rainfall.txt
Enter rainfall data:
34
Enter rainfall data:
45
Enter rainfall data:
56
Enter rainfall data:
78
Average Rainfall: 53.25
文件档案
Pascal中的文本文件由字符行组成,其中每行以行尾标记结束。您可以将这些文件声明并定义为:
type
file-name = text;
普通文件和文本文件之间的区别在于文本文件被分成行,每行以特殊的行尾标记结束,由系统自动插入。以下示例创建并写入称为contact.txt:的文本文件;
program exText;
var
filename, data: string;
myfile: text;
begin
writeln('Enter the file name: ');
readln(filename);
assign(myfile, filename);
rewrite(myfile);
writeln(myfile, 'Note to Students: ');
writeln(myfile, 'For details information on Pascal Programming');
writeln(myfile, 'Contact: Tutorials Point');
writeln('Completed writing');
close(myfile);
end.
编译并执行上述代码时,会产生以下结果:
Enter the file name:
contact.txt
Completed writing
附加到文件
附加到文件意味着写入已经包含某些数据的现有文件而不覆盖该文件。以下程序说明了这个:
program exAppendfile;
var
myfile: text;
info: string;
begin
assign(myfile, 'contact.txt');
append(myfile);
writeln('Contact Details');
writeln('admin@it1352.com');
close(myfile);
(* let us read from this file *)
assign(myfile, 'contact.txt');
reset(myfile);
while not eof(myfile) do
begin
readln(myfile, info);
writeln(info);
end;
close(myfile);
end.
文件处理函数
免费Pascal为文件处理提供以下函数/过程:
序号 |
函数名称 |
说明 |
1个 |
过程Append(var t:Text); |
以追加模式打开文件 |
2 |
过程Assign(out f:文件; const名称:); |
为文件分配名称 |
3 |
程序Assign(out f:文件; p:PChar); |
为文件分配名称 |
4 |
程序Assign(out f:文件; c:字符); |
为文件分配名称 |
5 |
过程Assign(out f:TypedFile; const Name :); |
为文件分配名称 |
6 |
过程Assign(out f:TypedFile; p:PChar); |
为文件分配名称 |
7 |
过程Assign(out f:TypedFile; c:Char); |
为文件分配名称 |
8 |
过程Assign(out t:Text; const s :); |
为文件分配名称 |
9 |
程序Assign(out t:文本; p:PChar); |
为文件分配名称 |
10 |
过程Assign(out t:文本; c:字符); |
为文件分配名称 |
11 |
程序BlockRead(var f:file; var Buf; count:Int64; var结果:Int64); |
从文件读取数据到内存 |
12 |
程序BlockRead(var f:file; var Buf; count:LongInt; var结果:LongInt); |
从文件读取数据到内存 |
13 |
程序BlockRead(var f:file; var Buf; count:Cardinal; var结果:Cardinal); |
从文件读取数据到内存 |
14 |
程序BlockRead(var f:file; var Buf; count:Word; var结果:Word); |
从文件读取数据到内存 |
15 |
程序BlockRead(var f:file; var Buf; count:Word; var结果:Integer); |
从文件读取数据到内存 |
16 |
程序BlockRead(var f:file; var Buf; count:Int64); |
从文件读取数据到内存 |
17 |
程序BlockWrite(var f:file; const Buf; Count:Int64; var结果:Int64); |
将数据从内存写入文件 |
18 |
程序BlockWrite(var f:file; const Buf; Count:LongInt; var结果:LongInt); |
将数据从内存写入文件 |
19 |
程序BlockWrite(var f:file; const Buf; Count:Cardinal; var结果:Cardinal); |
将数据从内存写入文件 |
20 |
程序BlockWrite(var f:file; const Buf; Count:Word; var Result:Word); |
将数据从内存写入文件 |
21 |
程序BlockWrite(var f:file; const Buf; Count:Word; var结果:Integer); |
将数据从内存写入文件 |
22 |
程序BlockWrite(var f:file; const Buf; Count:LongInt); |
将数据从内存写入文件 |
23 |
程序Close(var f:file); |
关闭文件 |
24 |
程序Close(var t:Text); |
关闭文件 |
25 |
函数EOF(var f:file):Boolean; |
检查文件结尾 |
26 |
函数EOF(var t:Text):Boolean; |
检查文件结尾 |
27 |
功能EOF:布尔值; |
检查文件结尾 |
28 |
函数EOLn(var t:Text):Boolean; |
检查行尾 |
29 |
函数EOLn:布尔值; |
检查行尾 |
30 |
程序Erase(var f:file); |
从磁盘删除文件 |
31 |
程序Erase(var t:Text); |
从磁盘删除文件 |
32 |
函数FilePos(var f:file):Int64; |
在文件中的位置 |
33 |
函数FileSize(var f:file):Int64; |
文件大小 |
34 |
程序Flush(var t:Text); |
将文件缓冲区写入磁盘 |
35 |
IOResult函数:Word; |
返回上一次文件IO操作的结果 |
36 |
过程Read(var F:Text; Args:Arguments); |
从文件读取到变量 |
37 |
过程Read(Args:Arguments); |
从文件读取到变量 |
38 |
程序ReadLn(var F:Text; Args:Arguments); |
从文件读取到变量并转到下一行 |
39 |
过程ReadLn(Args:Arguments); |
从文件读取到变量并转到下一行 |
40 |
过程重命名(var f:file; const s :); |
重命名磁盘上的文件 |
41 |
程序重命名(var f:file; p:PChar); |
重命名磁盘上的文件 |
42 |
程序重命名(var f:file; c:Char); |
重命名磁盘上的文件 |
43 |
过程重命名(var t:Text; const s); |
重命名磁盘上的文件 |
44 |
过程重命名(var t:Text; p:PChar); |
重命名磁盘上的文件 |
45 |
过程重命名(var t:文本; c:Char); |
重命名磁盘上的文件 |
46 |
程序Reset(var f:file; l:LongInt); |
打开文件进行读取 |
47 |
程序Reset(var f:file); |
打开文件进行读取 |
48 |
程序Reset(var f:TypedFile); |
打开文件进行读取 |
49 |
程序Reset(var t:Text); |
打开文件进行读取 |
50 |
程序重写(var f:file; l:LongInt); |
打开文件进行写入 |
51 |
程序重写(var f:文件); |
打开文件进行写入 |
52 |
过程Rewrite(var f:TypedFile); |
打开文件进行写入 |
53 |
过程Rewrite(var t:Text); |
打开文件进行写入 |
54 |
程序搜索(var f:file; Pos:Int64); |
设置文件位置 |
55 |
函数SeekEOF(var t:Text):Boolean; |
将文件位置设置为文件末尾 |
56 |
函数SeekEOF:布尔值; |
将文件位置设置为文件末尾 |
57 |
函数SeekEOLn(var t:Text):Boolean; |
将文件位置设置为行尾 |
58 |
函数SeekEOLn:布尔值; |
将文件位置设置为行尾 |
59 |
过程SetTextBuf(var f:Text; var Buf); |
设置文件缓冲区的大小 |
60 |
过程SetTextBuf(var f:Text; var Buf; Size:SizeInt); |
设置文件缓冲区的大小 |
61 |
程序Truncate(var F:file); |
在位置截断文件 |
62 |
程序Write(Args:Arguments); |
将变量写入文件 |
63 |
程序Write(var F:Text; Args:Arguments); |
将变量写入文件 |
64 |
程序Writeln(Args:Arguments); |
将变量写入文件并追加换行符 |
65 |
程序WriteLn(var F:Text; Args:Arguments); |
将变量写入文件并追加换行符 |