文件处理( File Handling)
Pascal将文件视为一系列组件,它们必须是统一类型。 文件的类型由组件的类型决定。 文件数据类型定义为 -
type
file-name = file of base-type;
其中,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的数据。
从文件中读取 (Reading from a File)
我们刚刚创建并写入名为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的文件并存储一些降雨数据。 接下来,它打开文件,读取数据并计算平均降雨量。
请注意, if you use a file parameter with subprograms, it must be declared as a var parameter.
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: IOWIKI');
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('webmaster@iowiki.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.
编译并执行上述代码时,会产生以下结果 -
Contact Details
webmaster@iowiki.com
Note to Students:
For details information on Pascal Programming
Contact: IOWIKI
文件处理函数 (File Handling Functions)
Free Pascal提供以下文件处理功能/程序 -
Sr.No. | 功能名称和描述 |
---|---|
1 | procedure Append(var t: Text); 以附加模式打开文件 |
2 | procedure Assign(out f: file; const Name:); 为文件指定名称 |
3 | procedure Assign(out f: file; p: PChar); 为文件指定名称 |
4 | procedure Assign(out f: file; c: Char); 为文件指定名称 |
5 | procedure Assign(out f: TypedFile; const Name:); 为文件指定名称 |
6 | procedure Assign(out f: TypedFile; p: PChar); 为文件指定名称 |
7 | procedure Assign(out f: TypedFile; c: Char); 为文件指定名称 |
8 | procedure Assign(out t: Text; const s:); 为文件指定名称 |
9 | procedure Assign(out t: Text; p: PChar); 为文件指定名称 |
10 | procedure Assign(out t: Text; c: Char); 为文件指定名称 |
11 | procedure BlockRead(var f: file; var Buf; count: Int64; var Result: Int64); 将文件中的数据读入内存 |
12 | procedure BlockRead(var f: file; var Buf; count: LongInt; var Result: LongInt); 将文件中的数据读入内存 |
13 | procedure BlockRead(var f: file; var Buf; count: Cardinal; var Result: Cardinal); 将文件中的数据读入内存 |
14 | procedure BlockRead(var f: file; var Buf; count: Word; var Result: Word); 将文件中的数据读入内存 |
15 | procedure BlockRead(var f: file; var Buf; count: Word; var Result: Integer); 将文件中的数据读入内存 |
16 | procedure BlockRead(var f: file; var Buf; count: Int64); 将文件中的数据读入内存 |
17 | procedure BlockWrite(var f: file; const Buf; Count: Int64; var Result: Int64); 将数据从内存写入文件 |
18 | procedure BlockWrite(var f: file; const Buf; Count: LongInt; var Result: LongInt); 将数据从内存写入文件 |
19 | procedure BlockWrite(var f: file; const Buf; Count: Cardinal; var Result: Cardinal); 将数据从内存写入文件 |
20 | procedure BlockWrite(var f: file; const Buf; Count: Word; var Result: Word); 将数据从内存写入文件 |
21 | procedure BlockWrite(var f: file; const Buf; Count: Word; var Result: Integer); 将数据从内存写入文件 |
22 | procedure BlockWrite(var f: file; const Buf; Count: LongInt); 将数据从内存写入文件 |
23 | procedure Close(var f: file); 关闭文件 |
24 | procedure Close(var t: Text); 关闭文件 |
25 | function EOF(var f: file):Boolean; 检查文件结尾 |
26 | function EOF(var t: Text):Boolean; 检查文件结尾 |
27 | function EOF: Boolean; 检查文件结尾 |
28 | function EOLn(var t: Text):Boolean; 检查行尾 |
29 | function EOLn: Boolean; 检查行尾 |
30 | procedure Erase(var f: file); 从磁盘删除文件 |
31 | procedure Erase(var t: Text); 从磁盘删除文件 |
32 | function FilePos( var f: file):Int64; 在文件中的位置 |
33 | function FileSize(var f: file):Int64; 文件大小 |
34 | procedure Flush(var t: Text); 将文件缓冲区写入磁盘 |
35 | function IOResult: Word; 返回上一个文件IO操作的结果 |
36 | procedure Read(var F: Text; Args: Arguments); 从文件读入变量 |
37 | procedure Read(Args: Arguments); 从文件读入变量 |
38 | procedure ReadLn(var F: Text; Args: Arguments); 从文件读入变量并转到下一行 |
39 | procedure ReadLn(Args: Arguments); 从文件读入变量并转到下一行 |
40 | procedure Rename(var f: file; const s:); 重命名磁盘上的文件 |
41 | procedure Rename(var f: file; p: PChar); 重命名磁盘上的文件 |
42 | procedure Rename(var f: file; c: Char); 重命名磁盘上的文件 |
43 | procedure Rename(var t: Text; const s); 重命名磁盘上的文件 |
44 | procedure Rename(var t: Text; p: PChar); 重命名磁盘上的文件 |
45 | procedure Rename( var t: Text; c: Char); 重命名磁盘上的文件 |
46 | procedure Reset(var f: file; l: LongInt); 打开文件进行阅读 |
47 | procedure Reset(var f: file); 打开文件进行阅读 |
48 | procedure Reset(var f: TypedFile); 打开文件进行阅读 |
49 | procedure Reset(var t: Text); 打开文件进行阅读 |
50 | procedure Rewrite(var f: file; l: LongInt); 打开文件进行写入 |
51 | procedure Rewrite(var f: file); 打开文件进行写入 |
52 | procedure Rewrite(var f: TypedFile); 打开文件进行写入 |
53 | procedure Rewrite(var t: Text); 打开文件进行写入 |
54 | procedure Seek(var f: file; Pos: Int64); 设置文件位置 |
55 | function SeekEOF(var t: Text):Boolean; 将文件位置设置为文件末尾 |
56 | function SeekEOF: Boolean; 将文件位置设置为文件末尾 |
57 | function SeekEOLn(var t: Text):Boolean; 将文件位置设置为行尾 |
58 | function SeekEOLn: Boolean; 将文件位置设置为行尾 |
59 | procedure SetTextBuf(var f: Text; var Buf); 设置文件缓冲区的大小 |
60 | procedure SetTextBuf(var f: Text; var Buf; Size: SizeInt); 设置文件缓冲区的大小 |
61 | procedure Truncate(var F: file); 在位置截断文件 |
62 | procedure Write(Args: Arguments); 将变量写入文件 |
63 | procedure Write(var F: Text; Args: Arguments); 将变量写入文件 |
64 | procedure Writeln(Args: Arguments); 将变量写入文件并附加换行符 |
65 | procedure WriteLn(var F: Text; Args: Arguments); 将变量写入文件并附加换行符 |