Thao tác với tệp pascal

Tệp là một dãy các phần tử cùng kiểu được sắp xếp một cách tuần tự. Tệp dữ liệu được lưu trữ ở bộ nhớ ngoài dưới một tên nào đó.

Tệp tập hợp trong nó một số phần tử dữ liệu có cùng cấu trúc giống như mảng nhưng khác mảng là số phần tử của tệp chưa được xác định.

[qads]

Trong Pascal có 3 loại tệp được sử dụng là:

1. Tệp văn bản:Dùng để lưu trữ dữ liệu dưới dạng các ký tự của bảng mã ASCII, các ký tự này được lưu thành từng dòng, độ dài các dòng có thể khác nhau. Ví dụ 2008 (kiểu word) khi ghi vào tệp văn bản cần 4 Byte (không phải 2 Byte).

2. Tệp có kiểu: Tệp có kiểu là tệp mà các phần tử của nó có cùng độ dài và cùng kiểu dữ liệu.

3. Tệp không kiểu: Tệp không kiểu là một loại tệp không cần quan tâm đến kiểu dữ liệu ghi trên tệp. Dữ liệu ghi vào tệp không cần chuyển đổi.

 Tác dụng lớn nhất của kiểu dữ liệu tệp là ta có thể lưu trữ các dữ liệu nhập vào từ bàn phím và các kết quả xử lý trong bộ nhớ RAM ra tệp để dùng nhiều lần.

* Khai báo:

– Định nghĩa kiểu tệp với từ khóa FILE OF trong phần mô tả kiểu sau từ TYPE, tiếp theo là khai báo biến tệp trong phần khai báo biến.

Ví dụ:

Type
	Arr = array[1..100] of integer; {dinh nghia mang Arr}
	TArr = FILE of Arr; {dinh nghia tep TArr co cac phan tu la mang Arr}
	TStr = FILE of String[50]; {tep TStr co cac phan tu la chuoi co do dai 50 ky tu}
	SinhVien = Record
		Msv, Hoten : String[50];
		Diem : real;
	end;
	TSv = FILE of SinhVien; {tep TSv gom cac phan tu la kieu SinhVien}
Var
	T1 : TArr;
	T2 : TStr;
	T3 : TSv;
  • Định nghĩa trực tiếp biến kiểu tệp trong phần khai báo biến
Var
	T4 : FILE of array[1..100] of real;
	T5 : FILE of SinhVien;

1. Nhập xuất với tệp văn bản
Truy nhập vào tệp được hiểu là nhập dữ liệu vào tệp, ghi lại dữ liệu trên thiết bị nhớ ngoài, đọc dữ liệu đó ra màn hình hoặc máy in và xử lý nó.

Trước khi thao tác với tệp chúng ta cần sử dụng thủ tục assign(bientep, tentep). Thủ tục này nhằm mục đích gán một tập tin trên đĩa (tentep) cho Tên biến tệp trong RAM (bientep).

  • Mở tệp mới để ghi:
Assign(bientep, tentep);
Rewrite(bientep);

Thủ tục Rewrite tạo một tập tin trên đĩa có tên đã gán cho Tên biến File bằng lệnh gán Assign đồng thời mở tập tin đó ra để truy xuất dữ liệu.Khi mở tập tin bằng lệnh Rewrite nếu trên đĩa đã có tập tin trùng với tên bạn đặt thì tập tin trên đĩa sẽ bị xoá thay vào đó là một tập tin trống mà bạn đã gán tên cho Tên biến File. Nên bạn cần cẩn thận khi mở tập tin bằng lệnh Rewrite.

  • Mở tệp đã có để ghi thêm:
Assign(bientep, tentep);
Append(bientep);
  • Mở tệp để đọc dữ liệu:
Assign(bientep, tentep);
Reset(bientep);

Chú ý: Khi mở một tập tin bằng lệnh Reset nếu tập tin không có trên đĩa sẽ gây lỗi.

Cuối cùng, ta phải đóng tệp bằng thủ tục:

CLOSE(bientep);

Thủ tục này chuyển nội dung trong bộ nhớ vào tập tin trên đĩa đồng thời đóng tập tin lại giải toả bộ nhớ dành cho biến tập tin. Các tập tin khi đã mở nếu không đóng lại sẽ mất các dữ liệu truy xuất trên Tên biến File.


Ở những bài tập thực hành,
các em quan sát, sau khi chạy
chương trình có lưu được dữ
liệu và kết quả cho lần chạy
tiếp theo hay không?
Ở những bài tập thực hành,
các em quan sát, sau khi chạy
chương trình có lưu được dữ
liệu và kết quả cho lần chạy
tiếp theo hay không?

Bµi 14. KiÓu d÷ liÖu tÖp
Bµi 14. KiÓu d÷ liÖu tÖp

Bµi 15. Thao t¸c víi tÖp
Bµi 15. Thao t¸c víi tÖp

Bµi 16. VÝ dô lµm viÖc víi tÖp
Bµi 16. VÝ dô lµm viÖc víi tÖp

§14. KIỂU DỮ LIỆU TỆP
§15. THAO TÁC VỚI TỆP

NỘI DUNG
1. Vai trò của kiểu tệp
2. Phân loại và thao tác với tệp


3. Khai báo
4. Thao tác với tệp

- Dữ liệu kiểu tệp được lưu trữ lâu dài ở bộ nhớ ngoài và
không bị mất khi tắt nguồn điện.
- Lượng thông tin lưu trữ trên tệp có thể rất lớn và chỉ
phụ thuộc vào dung lượng đĩa.
§14. KIỂU DỮ LIỆU TỆP & §15. CÁC THAO TÁC VỚI TỆP
1. Vai trò của kiểu tệp

§14. KIỂU DỮ LIỆU TỆP & §15. CÁC THAO TÁC VỚI TỆP
2. Phân loại và thao tác với tệp
Là tệp mà các phần tử có
cùng một kiểu dữ liệu. Số
lượng phần tử không xác
định trước.
Là tệp dữ liệu gồm các kí
tự theo mã ASCII, được
phân thành một hoặc
nhiều dòng.
- Có hai cách phân loại tệp:
Tệp có cấu trúc:Tệp văn bản:
 Truy cập trực tiếp
 Truy cập tuần tự
- Hai thao tác cơ bản đối với tệp là ghi dữ liệu vào tệp và
đọc dữ liệu từ tệp

§14. KIỂU DỮ LIỆU TỆP & §15. CÁC THAO TÁC VỚI TỆP
3. Khai báo
VAR: TEXT;

Ví dụ:
VAR
F1, F2 : Text;
Program vd1;
Uses crt;
Var
F1,F2: TEXT;

§14. KIỂU DỮ LIỆU TỆP & §15. CÁC THAO TÁC VỚI TỆP
Gắn tên tệp
Mở tệp để ghi
Mở tệp để đọc
Ghi dữ liệu vào tệp
Đọc dữ liệu từ tệp
Đóng tệp
Ghi dữ liệu vào tệp Đọc dữ liệu từ tệp

§14. KIỂU DỮ LIỆU TỆP & §15. CÁC THAO TÁC VỚI TỆP
a. Gắn tên tệp
4. Thao tác với tệp
ASSIGN(,);
ASSIGN ( F1 , ‘DULIEU.PAS’);
Ví dụ:
Biến F1 được gắn với tệp có tên
DULIEU.PAS
Biến F2 được gắn với tệp
BAITAP.INP đã có trong thư
mục TP ở ổ đĩa D.
ASSIGN( F2, ‘D:\TP\ BAITAP.INP’);

§14. KIỂU DỮ LIỆU TỆP & §15. CÁC THAO TÁC VỚI TỆP
b. Mở tệp
4. Các thao tác với tệp
REWRITE ();
* Thủ tục mở tệp để ghi:
VD:
REWRITE (F1);
* Thủ tục ghi dữ liệu vào tệp:
WRITE(,);
WRITELN (,);
Program vd1;
Var
F1: TEXT;
x, y: integer;
ASSIGN(F1, ‘D:\TP\DULIEU.PAS’);
REWRITE (F1);
WRITE (F1, x , y, x+y ) ;
x:=12; y:=8;
BEGIN
Close(F1);
Readln;
END.

Danh sách kết quả gồm một hay nhiều
phần tử. Phần tử có thể là biến, hằng
xâu hoặc biểu thức.
Trong Pascal, lệnh
nào dùng để ghi dữ
liệu?
Trong Pascal, lệnh

nào dùng để ghi dữ
liệu?
Lệnh ghi là write
hoặc writeln
Lệnh ghi là write
hoặc writeln

§14. KIỂU DỮ LIỆU TỆP & §15. CÁC THAO TÁC VỚI TỆP
RESET ();
* Thủ tục mở tệp để đọc dữ liệu:

Danh sách biến là một hoặc nhiều
biến.
Program vd2;
Var
F1: TEXT;
x, y: integer;
ASSIGN(F1, ‘D:\TP\BAITAP.PAS’);
RESET (F1);
READ(F1, x , y);
BEGIN
Close(F1);
Readln;
END.
WRITE (‘Hai so do la’ , x , y);
VD: RESET (F1);
VD: READ(F1, x , y);
* Thủ tục đọc dữ liệu từ tệp:
READ(,);
READLN (,);

b. Mở tệp
4. Các thao tác với tệp
Trong Pascal, lệnh
nào dùng để đọc
dữ liệu?
Trong Pascal, lệnh
nào dùng để đọc
dữ liệu?
Lệnh đọc là read
hoặc readln
Lệnh đọc là read
hoặc readln

D:\TP\BAITAP.INP
12
8
3 9 2
READ( F1 , x , y );
RESET (F1);
x = 12
12 8
y= 8

§14. KIỂU DỮ LIỆU TỆP & §15. CÁC THAO TÁC VỚI TỆP
* Một số hàm chuẩn thường dùng trong xử lí tệp văn bản
EOF();
Cho giá trị đúng nếu con trỏ đang chỉ tới cuối tệp.
EOLN();
Cho giá trị đúng nếu con trỏ đang chỉ tới cuối dòng.
b. Mở tệp

4. Các thao tác với tệp

Close(F1);
Program vd1;
Var
F1: TEXT;
x, y: integer;
BEGIN
ASSIGN(F1, ‘D:\TP\DULIEU.PAS’);
REWRITE (F1);
WRITE (F1, x, y ,x+y);
x:=3; y:=5;
Readln;
END.
Close(F1);
BEGIN

ASSIGN(F1, ‘D:\TP\BAITAP.INP’);
READ(F1, x , y);
WRITE (‘Hai so do la’ , x , y);
Readln;
END.
Program vd2;
Var
F1: TEXT;
x, y: integer;
RESET (F1);
Ghi dữ liệu vào tệpĐọc dữ liệu từ tệp
CLOSE(< tên biến tệp>);
§14. KIỂU DỮ LIỆU TỆP & §15. CÁC THAO TÁC VỚI TỆP

b. Đóng tệp
4. Các thao tác với tệp

CỦNG CỐ
Var:Text;
ASSIGN(,);
Reset();
Rewrite();
Read(,);
Write(,);
CLOSE(< tên biến tệp>);
eof();
Hàm/ thủ tục/ câu lệnh. Ý nghĩa
Khai báo biến tệp
Thủ tục gán tên tệp cho tên biến tệp
Thủ tục mở tên để đọc dữ liệu
Thủ tục mở tệp để ghi dữ liệu
Thủ tục đọc dữ liệu từ tệp
Thủ tục ghi dữ liệu vào tệp
Thủ tục đóng tệp
Hàm cho biết con trỏ có ở cuối tệp không

BTVN
Tìm hiểu trước ví dụ 1 & ví dụ 2 bài tiếp theo.
BTVN:
Viết chương trình ghi vào tệp văn bản có tên là
vanban.txt dữ liệu sau đây:
Lop 11a3
Nam hoc 2009-2010
Sau đó đọc dữ liệu vanban.txt ghi ra màn hình.