JSRUN 用代码说话

文件处理

编辑教程

文件处理

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); 将变量写入文件并追加换行符
JSRUN闪电教程系统是国内最先开创的教程维护系统, 所有工程师都可以参与共同维护的闪电教程,让知识的积累变得统一完整、自成体系。 大家可以一起参与进共编,让零散的知识点帮助更多的人。
X
支付宝
9.99
无法付款,请点击这里
金额: 0
备注:
转账时请填写正确的金额和备注信息,到账由人工处理,可能需要较长时间
如有疑问请联系QQ:565830900
正在生成二维码, 此过程可能需要15秒钟