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 |