- Pascal 教程
- Pascal - 首页
- Pascal - 概述
- Pascal - 环境设置
- Pascal - 程序结构
- Pascal - 基本语法
- Pascal - 数据类型
- Pascal - 变量类型
- Pascal - 常量
- Pascal - 运算符
- Pascal - 决策制定
- Pascal - 循环
- Pascal - 函数
- Pascal - 过程
- Pascal - 变量作用域
- Pascal - 字符串
- Pascal - 布尔值
- Pascal - 数组
- Pascal - 指针
- Pascal - 记录
- Pascal - 变体
- Pascal - 集合
- Pascal - 文件处理
- Pascal - 内存
- Pascal - 单元
- Pascal - 日期和时间
- Pascal - 对象
- Pascal - 类
- Pascal 有用资源
- Pascal - 快速指南
- Pascal - 有用资源
- Pascal - 讨论
Pascal - 文件处理
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('webmaster@tutorialspoint.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@tutorialspoint.com Note to Students: For details information on Pascal Programming Contact: Tutorials Point
文件处理函数
Free Pascal 提供以下文件处理函数/过程:
| 序号 | 函数名称和描述 |
|---|---|
| 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); 将变量写入文件并追加换行符 |