Pascal - Xử lý tệp

Pascal coi một tập tin như một chuỗi các thành phần, các thành phần này phải có kiểu đồng nhất. Loại tệp được xác định bởi loại của các thành phần. Kiểu dữ liệu tệp được định nghĩa là -

type
file-name = file of base-type;

Trong đó, kiểu cơ sở cho biết kiểu của các thành phần của tệp. Kiểu cơ sở có thể là bất kỳ thứ gì như, số nguyên, thực, Boolean, liệt kê, dãy con, bản ghi, mảng và bộ ngoại trừ một loại tệp khác. Các biến của một loại tệp được tạo bằng cách sử dụng khai báo var -

var
f1, f2,...: file-name;

Sau đây là một số ví dụ về việc xác định một số loại tệp và biến tệp:

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;

Tạo và ghi vào tệp

Hãy để chúng tôi viết một chương trình sẽ tạo một tệp dữ liệu cho hồ sơ của học sinh. Nó sẽ tạo một tệp có tên là Students.dat và ghi dữ liệu của sinh viên vào đó -

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.

Khi được biên dịch và chạy, chương trình sẽ tạo một tệp có tên là student.dat vào thư mục làm việc. Bạn có thể mở tệp bằng trình soạn thảo văn bản, như notepad, để xem dữ liệu của John Smith.

Đọc từ một tệp

Chúng tôi vừa tạo và ghi vào một tệp có tên là student.dat. Bây giờ, chúng ta hãy viết một chương trình có thể đọc dữ liệu của học sinh từ tệp -

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.

Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:

Name: John Smith
Address: United States of America
Batch Code: Computer Science

Tệp dưới dạng Tham số chương trình con

Pascal cho phép các biến tệp được sử dụng làm tham số trong các chương trình con chuẩn và do người dùng định nghĩa. Ví dụ sau minh họa khái niệm này. Chương trình tạo một tệp có tên là rain.txt và lưu trữ một số dữ liệu về lượng mưa. Tiếp theo, nó mở tệp, đọc dữ liệu và tính toán lượng mưa trung bình.

Xin lưu ý rằng, 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.

Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:

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

Tệp văn bản

Một tệp văn bản, trong Pascal, bao gồm các dòng ký tự mà mỗi dòng được kết thúc bằng một dấu cuối dòng. Bạn có thể khai báo và xác định các tệp như:

type
file-name = text;

Sự khác biệt giữa tệp ký tự thông thường và tệp văn bản là tệp văn bản được chia thành các dòng, mỗi dòng được kết thúc bằng một điểm đánh dấu cuối dòng đặc biệt, được hệ thống tự động chèn vào. Ví dụ sau tạo và ghi vào tệp văn bản có tên 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.

Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:

Enter the file name:
contact.txt 
Completed writing

Thêm vào một tệp

Thêm vào tệp có nghĩa là ghi vào tệp hiện có đã có một số dữ liệu mà không ghi đè tệp. Chương trình sau đây minh họa điều này -

program exAppendfile;
var
   myfile: text;
   info: string;

begin
   assign(myfile, 'contact.txt');
   append(myfile);
   
   writeln('Contact Details');
   writeln('[email protected]');
   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.

Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:

Contact Details
[email protected]
Note to Students:
For details information on Pascal Programming
Contact: Tutorials Point

Chức năng xử lý tệp

Free Pascal cung cấp các hàm / thủ tục sau để xử lý tệp:

Sr.No. Tên & Mô tả chức năng
1

procedure Append(var t: Text);

Mở tệp ở chế độ nối thêm

2

procedure Assign(out f: file; const Name:);

Gán tên cho một tệp

3

procedure Assign(out f: file; p: PChar);

Gán tên cho một tệp

4

procedure Assign(out f: file; c: Char);

Gán tên cho một tệp

5

procedure Assign(out f: TypedFile; const Name:);

Gán tên cho một tệp

6

procedure Assign(out f: TypedFile; p: PChar);

Gán tên cho một tệp

7

procedure Assign(out f: TypedFile; c: Char);

Gán tên cho một tệp

số 8

procedure Assign(out t: Text; const s:);

Gán tên cho một tệp

9

procedure Assign(out t: Text; p: PChar);

Gán tên cho một tệp

10

procedure Assign(out t: Text; c: Char);

Gán tên cho một tệp

11

procedure BlockRead(var f: file; var Buf; count: Int64; var Result: Int64);

Đọc dữ liệu từ tệp vào bộ nhớ

12

procedure BlockRead(var f: file; var Buf; count: LongInt; var Result: LongInt);

Đọc dữ liệu từ tệp vào bộ nhớ

13

procedure BlockRead(var f: file; var Buf; count: Cardinal; var Result: Cardinal);

Đọc dữ liệu từ tệp vào bộ nhớ

14

procedure BlockRead(var f: file; var Buf; count: Word; var Result: Word);

Đọc dữ liệu từ tệp vào bộ nhớ

15

procedure BlockRead(var f: file; var Buf; count: Word; var Result: Integer);

Đọc dữ liệu từ tệp vào bộ nhớ

16

procedure BlockRead(var f: file; var Buf; count: Int64);

Đọc dữ liệu từ tệp vào bộ nhớ

17

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

Ghi dữ liệu từ bộ nhớ vào một tệp

18

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

Ghi dữ liệu từ bộ nhớ vào một tệp

19

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

Ghi dữ liệu từ bộ nhớ vào một tệp

20

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

Ghi dữ liệu từ bộ nhớ vào một tệp

21

procedure BlockWrite(var f: file; const Buf; Count: Word; var Result: Integer);

Ghi dữ liệu từ bộ nhớ vào một tệp

22

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

Ghi dữ liệu từ bộ nhớ vào một tệp

23

procedure Close(var f: file);

Đóng một tệp

24

procedure Close(var t: Text);

Đóng một tệp

25

function EOF(var f: file):Boolean;

Kiểm tra phần cuối của tệp

26

function EOF(var t: Text):Boolean;

Kiểm tra phần cuối của tệp

27

function EOF: Boolean;

Kiểm tra phần cuối của tệp

28

function EOLn(var t: Text):Boolean;

Kiểm tra cuối dòng

29

function EOLn: Boolean;

Kiểm tra cuối dòng

30

procedure Erase(var f: file);

Xóa tệp khỏi đĩa

31

procedure Erase(var t: Text);

Xóa tệp khỏi đĩa

32

function FilePos( var f: file):Int64;

Vị trí trong hồ sơ

33

function FileSize(var f: file):Int64;

Kích thước của tệp

34

procedure Flush(var t: Text);

Ghi bộ đệm tệp vào đĩa

35

function IOResult: Word;

Trả về kết quả của thao tác IO tệp cuối cùng

36

procedure Read(var F: Text; Args: Arguments);

Đọc từ tệp thành biến

37

procedure Read(Args: Arguments);

Đọc từ tệp thành biến

38

procedure ReadLn(var F: Text; Args: Arguments);

Đọc từ tệp thành biến và chuyển sang dòng tiếp theo

39

procedure ReadLn(Args: Arguments);

Đọc từ tệp thành biến và chuyển sang dòng tiếp theo

40

procedure Rename(var f: file; const s:);

Đổi tên tệp trên đĩa

41

procedure Rename(var f: file; p: PChar);

Đổi tên tệp trên đĩa

42

procedure Rename(var f: file; c: Char);

Đổi tên tệp trên đĩa

43

procedure Rename(var t: Text; const s);

Đổi tên tệp trên đĩa

44

procedure Rename(var t: Text; p: PChar);

Đổi tên tệp trên đĩa

45

procedure Rename( var t: Text; c: Char);

Đổi tên tệp trên đĩa

46

procedure Reset(var f: file; l: LongInt);

Mở tệp để đọc

47

procedure Reset(var f: file);

Mở tệp để đọc

48

procedure Reset(var f: TypedFile);

Mở tệp để đọc

49

procedure Reset(var t: Text);

Mở tệp để đọc

50

procedure Rewrite(var f: file; l: LongInt);

Mở tệp để ghi

51

procedure Rewrite(var f: file);

Mở tệp để ghi

52

procedure Rewrite(var f: TypedFile);

Mở tệp để ghi

53

procedure Rewrite(var t: Text);

Mở tệp để ghi

54

procedure Seek(var f: file; Pos: Int64);

Đặt vị trí tệp

55

function SeekEOF(var t: Text):Boolean;

Đặt vị trí tệp thành cuối tệp

56

function SeekEOF: Boolean;

Đặt vị trí tệp thành cuối tệp

57

function SeekEOLn(var t: Text):Boolean;

Đặt vị trí tệp thành cuối dòng

58

function SeekEOLn: Boolean;

Đặt vị trí tệp thành cuối dòng

59

procedure SetTextBuf(var f: Text; var Buf);

Đặt kích thước của bộ đệm tệp

60

procedure SetTextBuf(var f: Text; var Buf; Size: SizeInt);

Đặt kích thước của bộ đệm tệp

61

procedure Truncate(var F: file);

Cắt ngắn tệp ở vị trí

62

procedure Write(Args: Arguments);

Ghi biến vào tệp

63

procedure Write(var F: Text; Args: Arguments);

Ghi biến vào tệp

64

procedure Writeln(Args: Arguments);

Ghi biến vào tệp và nối dòng mới

65

procedure WriteLn(var F: Text; Args: Arguments);

Ghi biến vào tệp và nối dòng mới