- Khai báo trực tiếp trong khai báo biến
2. 3 Khai báo tệp ựịnh kiểu
Khai báo tệp ựịnh kiểu dùng cụm từ sau: File of kiểu_phần_tử;
Ớ Khai báo kiểu tệp:
Type tên_kiểu = File of kiểu_phần_tử; Ớ Khai báo biến têp:
Var tên_biến : File of kiểu_phần_tử;
Vắ dụ 1 type t= file of integer; var f1,f2 : t;
Vắ dụ 2: type bang= record ten: string[25]; Ns: string[10]; Que: string[30]; luong,bhxh:real; end;
var f1,f2,f3: file of bang;
2.4 - Tạo tệp ựể ghi dữ liệu
* Mở tệp ựể ghi dữ liệu
Dùng 2 thủ tục ựi liền nhau theo thứ tự như sau: - Thủ tục Assign
Thủ tục này gán tên_tệp cho biến_tệp. Tên_tệp theo ựúng qui tắc ựặt tên trong DOS mà
ta ựã học ở phần trên. - Thủ tục Rewrite Rewrite(biến_tệp);
Thủ tục này thực hiện việc mở tệp ựể ghi.
Vắ dụ: Mở tệp có tên là Ổsonguyen.datỖ gán cho biến tệp f ựể ghi dữ liệu ta viết như sau: Assign(f,Ỗsonguyen.datỖ);
Rewrite(f);
Sau khi mở tệp xong thì tệp chưa có phần tử nào, tệp rỗng. Con trỏ tệp ( cửa sổ tệp ) trỏ vào cuối tệp (eof) . Nếu tên_tệp trùng với tệp ựã có thì tệp ựó sẽ bị xoá.
* Ghi dữ liệu vào tệp dùng thủ tục Write
Write(biến_tệp, biểu_thức1, biểu_thức2, . . ., biểu_thức n);
Các biểu_thức phải có giá trị cùng kiểu với kiểu của tệp. Giá trị của các biểu thức sẽ ựược ghi vào tệp theo như thứ tự ựã viết.
Write(f, 2, 4, 6, i*j+3);
* đóng tệp bằng thủ tục Close
Close(biến _tệp);
* Các vắ dụ chương trình tạo tệp ựể ghi dữ liệu
Bài toán 1: Tạo tệp có tên là Ổsonguyen.datỖ ghi các số nguyên dương <200 mà chia hết cho 3.
Chương trình
Program Tao_tep_so_nguyen; uses crt;
var i : integer; f : file of integer ; Begin
assign(f, Ổsonguyen.datỖ); rewrite(f);
for i:=3 to 199 do
if (i mod 3) = 0 then write(f, i); close(f);
readln; end.
Bài toán 2: Tạo tệp Ổsach.datỖ ựể ghi các thông tin cho các cuốn sách bao gồm các dữ liệu như tên sách, năm xuất bản, số trang, tác giả.
Chương trình
Program Tao_tep_sach; uses crt;
Type tin = record ten: string[25]; nam: integer;
trang: longint; tacgia: string[25]; end;
Var i,n : integer; f: file of tin; nhap: tin; Begin
clrscr;
assign(f, Ổsach.datỖ); rewrite(f);
write(Ổ Nhap so sach n : Ổ); readln(n); for i:= 1 to n do
begin
with nhap do begin
write(ỔTen sach : Ổ); readln(ten); write(ỔNam xuat ban : Ổ); readln(nam); write(ỔSo trang : Ổ); readln(trang); write(ỔTen tac gia : Ổ); readln(tacgia); end; write(f, nhap); end; close(f); end. 2.5 - đọc dữ liệu từ tệp ựã có * Mở tệp ựể ựọc
Mở tệp ựể ựọc dùng 2 thủ tục ựi liền nhau theo thứ tự sau: - Thủ tục Assign assign(biến_tệp, tên_tệp); - Thủ tục Reset Reset(biến_tệp) ; Thủ tục này thực hiện mở tệp ựể ựọc. Vắ dụ1: Mở tệp Ổsonguyen.datỖ gắn với biến tệp f ựể ựọc dữ liệu. assign(f, Ổsonguyen.datỖ); reset(f); Vắ dụ 2: Mở tệp Ổsach.datỖ gắn với biến tệp f1 ựể ựọc dữ liệu. assign(f1, Ổsach.datỖ); reset(f1); * đọc dữ liệu từ tệp
đọc dữ liệu từ tệp ựược thực hiện bằng thủ tục Read như sau: Read(biên_tệp, biến1, biến2, . . . , biến n);
Thủ tục này thực hiện ựọc giá trị ở vị trắ con trỏ gán cho các biến tương ứng như thứ tự ựã
viết, khi ựọc xong con trỏ tệp lại chuyển sang phần tử tiếp theo ựọc và gán cho biến khác, cứ
thế ựọc cho ựến biến n .
Việc ựọc chỉ ựược thực hiện khi tệp vẫn còn phần tử, tức là con trỏ chưa tới eof ( cuối tệp). do vậy trước khi ựọc phải kiểm tra xem ựã kết thúc tệp chưa, dùng hàm chuẩn eof như sau: eof(biến_têp); hàm này cho giá trị True nếu con trỏ ở cuối tệp, ngược lại hàm cho giá trị
Có thể dùng 2 cấu trúc sau:
- Kiểm tra nếu tệp chưa kết thúc thì ựọc
if not eof(biến_têp) then read(biến_têp, biến); - đọc tất cả các phần tử của tệp
While not eof(biến_têp) do Begin
read(biến_tệp, biến); . . .
end;
Nếu con trỏ ở cuối tệp mà vẫn ựọc thì máy sẽ báo lỗi, sau ựó chương trình dừng lại. Do vậy
phải kiểm tra trước khi ựọc.
Vắ dụ while not eof(f) do begin read(f,x); writeln(x); end; * đóng tệp Close(biến_tệp); * Các vắ dụ chương trình ựọc dữ liệu từ tệp
Bài toán 1:đọc dữ liệu từ tệp Ổsonguyen.datỖ ựã tạo ở trên và hiện kết quả trên màn hình. Chương trình
program Doc_tep_songuyen; uses crt;
var i: integer; f: file of integer; begin
clrscr;
assign(f, Ổsonguyen.datỖ); reset(f);
while not eof(f) do begin read(f, i); writeln(i); end; close(f); readln; end.
Bài toán 2: Viết chương trình thực hiện tạo tệp Ổdiem.datỖ ghắ lại ựiểm thi của thắ sinh, dữ
liệu bao gồm: họ và tên thắ sinh, ựiểm toán, ựiểm lý, ựiểm hoá. đồng thời thực hiện ựọc tệp và
in ra thắ sinh trúng tuyển, ựiểm chuẩn ựỗ ựược nhập vào từ bàn phắm. Chương trình program Tao_doc_tep_diemts; uses crt; type hs = record ten: string[25]; toan,ly,hoa : real; end;
var i,n: integer; f: file of hs; nhap: hs; diemc: real; {**************}
procedure tao; { thu tuc tao } begin
clrscr;
assign(f, Ổdiem.datỖ); rewrite(f);
write(Ổ So thi sinh: Ổ); readln(n); for i:=1 to n do
begin
with hs do begin
write(Ổ Ho va ten: Ổ); readln(ten); write(Ổ Diem toan: Ổ); readln(toan); write(Ổ Diem ly : Ổ); readln(ly); write(Ổ Diem hoa : Ổ); readln(hoa); end;
write(f, hs); end;
close(f);
end; { ket thuc thu tuc tao} { ***************}
Procedure doc; { thu tuc doc } begin
clrscr;
Assign(f, 'Diem.dat' ); reset(f);
write(Ổ Diem chuan : Ổ); readln(diemc);
writeln(Ổ Danh sach thi sinh trung tuyen dai hoc Ổ); while not eof(f) do
begin read(f,hs); with hs do
if toan+ly+hoa >= diemc then writeln(ten:25,toan:10:1,ly:10:1,hoa:10:1); end;
close(f);
end; { ket thuc thu tuc doc} {******************}
{ than chuong trinh chinh} repeat
clrscr;
writeln(Ổ 1- Tao tepỖ); writeln(Ổ 2- Doc tepỖ); writeln(Ổ 3- Ket thucỖ);
write(Ổ Hay chon mot viec ? Ổ); readln(i); case i of
1: tao; 2: doc;
end; until i=3; readln; end.