帕斯卡 - 文件处理


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 的数据。

从文件中读取

我们刚刚创建并写入名为 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 允许将文件变量用作标准和用户定义的子程序中的参数。下面的例子说明了这个概念。该程序创建一个名为 rainrain.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

程序追加(var t:文本);

以附加模式打开文件

2

程序分配(out f: 文件; const 名称:);

为文件指定名称

3

程序分配(输出f:文件;p:PChar);

为文件指定名称

4

程序分配(输出f:文件;c:字符);

为文件指定名称

5

过程分配(out f: TypedFile; const Name:);

为文件指定名称

6

过程Assign(out f: TypedFile; p: PChar);

为文件指定名称

7

过程分配(out f:TypedFile;c:Char);

为文件指定名称

8

程序分配(out t: Text; const s:);

为文件指定名称

9

过程Assign(out t: Text; p: PChar);

为文件指定名称

10

程序分配(输出t:文本;c:字符);

为文件指定名称

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; 计数: Int64; var 结果: 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: 文件; const Buf; 计数: Word; var 结果: Word);

将数据从内存写入文件

21

procedure BlockWrite(var f: 文件; const Buf; 计数: 字; var 结果: 整数);

将数据从内存写入文件

22

procedure BlockWrite(var f: file; const Buf; Count: LongInt);

将数据从内存写入文件

23

过程关闭(var f:文件);

关闭文件

24

过程关闭(var t:文本);

关闭文件

25

函数 EOF(var f: 文件):布尔值;

检查文件结尾

26

函数 EOF(var t: Text):Boolean;

检查文件结尾

27

函数 EOF:布尔值;

检查文件结尾

28

函数 EOLn(var t: Text):Boolean;

检查行尾

29

函数 EOLn:布尔值;

检查行尾

30

程序擦除(var f:文件);

从磁盘删除文件

31

过程擦除(var t:文本);

从磁盘删除文件

32

函数 FilePos( var f: 文件):Int64;

在文件中的位置

33

函数 FileSize(var f: 文件):Int64;

文件大小

34

过程 Flush(var t: Text);

将文件缓冲区写入磁盘

35

函数 IOResult:字;

返回上次文件 IO 操作的结果

36

procedure Read(var F: 文本; Args: 参数);

从文件读入变量

37

过程读取(参数:参数);

从文件读入变量

38

procedure ReadLn(var F: 文本; Args: 参数);

从文件读入变量并转到下一行

39

过程 ReadLn(Args: 参数);

从文件读入变量并转到下一行

40

过程重命名(var f: 文件; const s:);

重命名磁盘上的文件

41

过程重命名(var f:文件;p:PChar);

重命名磁盘上的文件

42

过程重命名(var f:文件;c:字符);

重命名磁盘上的文件

43

过程重命名(var t: Text; const s);

重命名磁盘上的文件

44

过程重命名(var t: Text; p: PChar);

重命名磁盘上的文件

45

过程重命名(var t:文本;c:字符);

重命名磁盘上的文件

46

procedure Reset(var f: 文件; l: LongInt);

打开文件进行读取

47

过程重置(var f:文件);

打开文件进行读取

48

过程 Reset(var f: TypedFile);

打开文件进行读取

49

程序重置(var t:文本);

打开文件进行读取

50

procedure Rewrite(var f: 文件; l: LongInt);

打开文件进行写入

51

过程重写(var f:文件);

打开文件进行写入

52

过程重写(var f:TypedFile);

打开文件进行写入

53

过程重写(var t:文本);

打开文件进行写入

54

procedure Seek(var f: 文件; 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

过程截断(var F:文件);

截断文件的位置

62

过程 Write(Args: 参数);

将变量写入文件

63

procedure Write(var F: 文本; Args: 参数);

将变量写入文件

64

过程 Writeln(Args: 参数);

将变量写入文件并附加换行符

65

procedure WriteLn(var F: 文本; Args: 参数);

将变量写入文件并附加换行符