Bài 15. Thao tác với tệp
Chia sẻ bởi Thiều Thị Thủy Ngân |
Ngày 10/05/2019 |
172
Chia sẻ tài liệu: Bài 15. Thao tác với tệp thuộc Tin học 11
Nội dung tài liệu:
Tất cả các kiểu dữ liệu đã xét :
Lưu trữ ở đâu và tồn tại đến khi nào ?
Ở bộ nhớ trong (RAM)
và sẽ bị mất khi tắt máy
Với những bài toán trong đó dữ liệu cần được lưu trữ để xử lý nhiều lần và với khối lượng lớn thì sao ?
Ta cần có kiểu dữ liệu khác.
Trong TP đó là kiểu tệp (file)
Đặc điểm dữ liệu kiểu tệp
Được lưu trữ lâu dài ở ngoài (đĩa từ, CD, …) và không bị mất khi tắt nguồn điện vào máy.
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.
Khái niệm và phân loại
Khái niệm
Tệp (file) là tập hợp dữ liệu được lưu trữ trên bộ nhớ ngoài (đĩa mềm, đĩa cứng...).
Phân loại
Tệp định kiểu
Tệp văn bản
Có 2 loại tệp trong Pascal
là tệp mà các phần tử có cùng một kiểu.
gồm các kí tự được phân chia thành một hoặc nhiều dòng.
Cấu trúc
1. Khai báo biến tệp
Ví dụ:
F1 : FILE OF CHAR;
F2 : FILE OF INTEGER;
F3 : FILE OF REAL;
F4 : TEXT;
VAR : FILE OF ;
Để làm việc với kiểu dữ liệu tệp ta phải khai báo biến tệp
Tệp định kiểu
Tệp văn bản
VAR : TEXT;
Các kiểu phần tử tệp: integer (kiểu số nguyên), real (kiểu số thực), char (kiểu kí tự), array (kiểu mảng), text (kiểu văn bản) …
2. Xử lý tệp
Sơ đồ làm việc với tệp
2. Xử lý tệp
Gán tên
ASSIGN (, );
Ví dụ 1:
Giả thiết có biến xâu MYFILE và cần gán biến tệp F2 với tệp có tên DULIEU.DAT. Việc gán tên tệp được thực hiện như sau :
MYFILE := ‘DULIEU.DAT ’;
ASSIGN (F2, MYFILE);
hoặc ASSIGN (F2, ‘DULIEU.DAT ’);
Ví dụ 2:
Để chuẩn bị thao tác với tệp có tên là INP.DAT trên thư mục gốc đĩa C: , ta gắn nó với biếp tệp F3 như sau :
MYFILE : = ‘C:INP.DAT’ ;
ASSIGN (F3, MYFILE);
back
Sử dụng thủ tục Assign để gán tên của một tệp cho biến tệp
Cú pháp :
2. Xử lý tệp
Mở tệp
REWRITE ();
Ví dụ 1:
TF : = ‘C: KQ.DAT ’ ;
ASSIGN (F3, TF);
REWRITE (F3);
back
Sử dụng thủ tục Rewrite để ghi kết quả
Cú pháp :
RESET ();
Ví dụ 2:
TF : = ‘DL.INP ’ ;
ASSIGN (F1, TF);
RESET (F1);
hoặc ASSIGN (F1, ‘DL.INP’);
RESET (F1);
Sử dụng thủ tục Reset để mở đọc 1 file đã tồn tại
Cú pháp :
2. Xử lý tệp
Đọc/ghi tệp định kiểu
READ (, Ví dụ 1:
Thủ tục đọc giá trị từ tệp gắn với biến tệp F1 và gán cho biến C :
READ (F1 , C)
back
Thủ tục Read đọc một (hay nhiều) phần tử của tệp tương ứng gán vào một (hay nhiều) biến cùng kiểu với phần tử tệp
Cú pháp :
Cú pháp :
Thủ tục Write ghi giá trị một (hay nhiều) biến vào một (hay nhiều) phần tử tệp. Các biến phải cùng kiểu với phần tử tệp.
WRITE (, Ví dụ 2:
Thủ tục ghi giá trị biến A vào tệp gắn với biến tệp F3 :
WRITE (F3 , A)
2. Xử lý tệp
Đóng tệp
CLOSE ();
Ví dụ 1:
Thủ tục đọc giá trị từ tệp gắn với biến tệp F1 và gán cho biến C :
CLOSE (F1)
CLOSE (F3)
back
Thủ tục Close đóng một tệp đang mở
Cú pháp :
Lưu ý: Một tệp, sau khi đóng có thể mở lại. Khi mở lại tệp, nếu vẫn dùng biến tệp cũ thì không cần thiết phải dùng thủ tục ASSIGN gán lại tên tệp.
2. Xử lý tệp
Một số hàm và thủ tục chuẩn thường dùng trong thao tác tệp
back
Hàm logic
EOF();
cho giá trị TRUE nếu con trỏ tệp đang chỉ tới cuối tệp.
Thủ tục
SEEK(,);
đưa con trỏ tệp về vị trí phần tử có số thứ tự xác định bởi giá trị Biến nguyên (Các phần tử của tệp được đánh số thứ tự bắt đầu từ 0).
2. Xử lý tệp
Ví dụ áp dụng
back
Ví dụ 1: (Sach Giao Khoa trang 92)
PROGRAM KQ_TIN;
USES CRT;
TYPE BANGHI = RECORD
HOTEN : STRING[28];
DIEM : BYTE;
END;
VAR N : INTEGER;
BG : BANGHI;
F : FILE OF BANGHI;
TENTEP : STRING[10];
I : INTEGER;
BEGIN
CLRSCR;
WRITE( ‘So hoc sinh :’);
READLN(N);
TENTEP := ‘KQ.DAT’;
ASSIGN(F,TENTEP);
REWRITE(F);
FOR I:= 1 TO N DO
BEGIN
WRITE(‘Ho va Ten :’);
READLN(BG.HOTEN);
WRITE(‘DIEM :’);
READLN(BG.DIEM);
WRITE(F,BG);
END;
CLOSE(F);
END.
2. Xử lý tệp
Ví dụ áp dụng
back
Ví dụ 2 (Sach Giao Khoa trang 94)
PROGRAM VIDU_2;
USES CRT;
TYPE BANGHI = RECORD
HOTEN : STRING[28];
DIEM : BYTE;
END;
VAR F : FILE OF BANGHI;
N, TG : INTEGER;
BG : BANGHI;
TENTEP : STRING[10];
DIEM_TB : REAL;
BEGIN
CLRSCR;
N := 0; TG := 0;
TENTEP := ‘KQ.DAT’;
ASSIGN(F,TENTEP);
RESET(F);
WHILE NOT EOF(F) DO
BEGIN
READ(F,BG);
TG := TG + BG.DIEM;
N := N + 1;
END;
DIEM_TB := TG/N;
WRITELN(‘Diem trung binh cua lop: ‘, DIEM_TB:4:1);
CLOSE(F)
END.
2. Xử lý tệp
Đọc/ghi tệp văn bản
READ (, );
back
Thủ tục đọc Read
Cú pháp :
Thủ tục ghi Write
hoặc READLN (, );
WRITE (, );
Cú pháp :
hoặc WRITELN (, );
Trong đó : Danh sách biến là một hoặc nhiều tên biến. Trong trường hợp nhiều biến thì các tên cách nhau bởi dấu phẩy.
Trong đó : Danh sách kết quả gồm một hoặc nhiều phần tử. Trường hợp có nhiều phần tử thì các phần tử này cách nhau một dấu phẩy. Phần tử có thể là tên biến, biểu thức (số học, quan hệ hoặc logic) hoặc hằng xâu.
2. Xử lý tệp
Đọc/ghi tệp văn bản
back
Ví dụ 1:
Giả thiết trong chương trình có khai báo:
VAR FA, FB : TEXT;
và tệp FA được mở để đọc, còn tệp FB để ghi. Khi đó:
– Có thể có các thủ tục đọc tệp FA như sau:
READ (FA,A,B,C);
hoặc READLN(FA,A,B,C);
– Có thể có các thủ tục ghi ra tệp FB như sau:
WRITE(FB, ‘A= ’, A, ‘B= ‘, B, ‘C= ‘, C);
WRITELN(FB, ‘X1=’, (–B – SQRT(B*B – 4*A*C))/(2*A):8:3);
Ví dụ 2:
Xét đường gấp khúc khép kín không tự cắt N đỉnh trong mặt phẳng, có các cạnh song song với trục tọa độ và các đỉnh có tọa độ nguyên
Đường gấp khúc 16 đỉnh
Chương trình sau thực hiện :
Nhập từ bàn phím số N, tọa độ các đỉnh liên tiếp của đường gấp khúc và ghi tọa độ các đỉnh ra tệp văn bản GAPKHUC.INP, mỗi dòng chứa 2 số nguyên là tọa độ một đỉnh. Các số trên một dòng cách nhau một dấu cách.
Chương trinh
Ví dụ 2:
PROGRAM GAPKHUC;
USES CRT;
VAR F : TEXT
I, N, X, Y : INTEGER;
TF : STRING[80];
BEGIN
CLRSCR;
WRITE(‘ N = ‘); READLN(N);
TF := ‘GAPKHUC.INP’;
ASSIGN(F,TF);
REWRITE(F);
FOR I:= 1 TO N DO
BEGIN
WRITE(‘ X, Y : ’); READLN(X,Y);
WRITELN(F, X, ‘ ’, Y);
END;
CLOSE(F);
END.
Ví dụ 3:
Chương trình sau đọc dữ liệu của ví dụ 2 chứa ở tệp GAPKHUC.INP, tính chu vi hình giới hạn bởi đường gấp khúc và đưa kết quả ra tệp văn bản GAPKHUC.OUT.
PROGRAM VI_DU3;
USES CRT;
VAR FA, FB : TEXT;
L : LONGINT;
X0, Y0, X1, Y1, X, Y : INTEGER;
BEGIN
ASSIGN (FA, ‘GAPKHUC.INP’);
RESET(FA);
READLN(FA, X, Y);
X0 := X; Y0 := Y; L := 0;
WHILE NOT EOF(FA) DO
BEGIN
X1 := X; Y1:= Y; READLN(FA,X,Y);
L:= L + ABS(X – X1) + ABS(Y – Y1);
END;
L := L + ABS (X – X0) + ABS(Y – Y0);
CLOSE(FA);
ASSIGN(FB, ‘GAPKHUC.OUT’);
REWRITE(FB);
WRITELN(FB, ‘Chu vi : ‘, L);
CLOSE(FB)
END.
Lưu trữ ở đâu và tồn tại đến khi nào ?
Ở bộ nhớ trong (RAM)
và sẽ bị mất khi tắt máy
Với những bài toán trong đó dữ liệu cần được lưu trữ để xử lý nhiều lần và với khối lượng lớn thì sao ?
Ta cần có kiểu dữ liệu khác.
Trong TP đó là kiểu tệp (file)
Đặc điểm dữ liệu kiểu tệp
Được lưu trữ lâu dài ở ngoài (đĩa từ, CD, …) và không bị mất khi tắt nguồn điện vào máy.
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.
Khái niệm và phân loại
Khái niệm
Tệp (file) là tập hợp dữ liệu được lưu trữ trên bộ nhớ ngoài (đĩa mềm, đĩa cứng...).
Phân loại
Tệp định kiểu
Tệp văn bản
Có 2 loại tệp trong Pascal
là tệp mà các phần tử có cùng một kiểu.
gồm các kí tự được phân chia thành một hoặc nhiều dòng.
Cấu trúc
1. Khai báo biến tệp
Ví dụ:
F1 : FILE OF CHAR;
F2 : FILE OF INTEGER;
F3 : FILE OF REAL;
F4 : TEXT;
VAR
Để làm việc với kiểu dữ liệu tệp ta phải khai báo biến tệp
Tệp định kiểu
Tệp văn bản
VAR
Các kiểu phần tử tệp: integer (kiểu số nguyên), real (kiểu số thực), char (kiểu kí tự), array (kiểu mảng), text (kiểu văn bản) …
2. Xử lý tệp
Sơ đồ làm việc với tệp
2. Xử lý tệp
Gán tên
ASSIGN (
Ví dụ 1:
Giả thiết có biến xâu MYFILE và cần gán biến tệp F2 với tệp có tên DULIEU.DAT. Việc gán tên tệp được thực hiện như sau :
MYFILE := ‘DULIEU.DAT ’;
ASSIGN (F2, MYFILE);
hoặc ASSIGN (F2, ‘DULIEU.DAT ’);
Ví dụ 2:
Để chuẩn bị thao tác với tệp có tên là INP.DAT trên thư mục gốc đĩa C: , ta gắn nó với biếp tệp F3 như sau :
MYFILE : = ‘C:INP.DAT’ ;
ASSIGN (F3, MYFILE);
back
Sử dụng thủ tục Assign để gán tên của một tệp cho biến tệp
Cú pháp :
2. Xử lý tệp
Mở tệp
REWRITE (
Ví dụ 1:
TF : = ‘C: KQ.DAT ’ ;
ASSIGN (F3, TF);
REWRITE (F3);
back
Sử dụng thủ tục Rewrite để ghi kết quả
Cú pháp :
RESET (
Ví dụ 2:
TF : = ‘DL.INP ’ ;
ASSIGN (F1, TF);
RESET (F1);
hoặc ASSIGN (F1, ‘DL.INP’);
RESET (F1);
Sử dụng thủ tục Reset để mở đọc 1 file đã tồn tại
Cú pháp :
2. Xử lý tệp
Đọc/ghi tệp định kiểu
READ (
Thủ tục đọc giá trị từ tệp gắn với biến tệp F1 và gán cho biến C :
READ (F1 , C)
back
Thủ tục Read đọc một (hay nhiều) phần tử của tệp tương ứng gán vào một (hay nhiều) biến cùng kiểu với phần tử tệp
Cú pháp :
Cú pháp :
Thủ tục Write ghi giá trị một (hay nhiều) biến vào một (hay nhiều) phần tử tệp. Các biến phải cùng kiểu với phần tử tệp.
WRITE (
Thủ tục ghi giá trị biến A vào tệp gắn với biến tệp F3 :
WRITE (F3 , A)
2. Xử lý tệp
Đóng tệp
CLOSE (
Ví dụ 1:
Thủ tục đọc giá trị từ tệp gắn với biến tệp F1 và gán cho biến C :
CLOSE (F1)
CLOSE (F3)
back
Thủ tục Close đóng một tệp đang mở
Cú pháp :
Lưu ý: Một tệp, sau khi đóng có thể mở lại. Khi mở lại tệp, nếu vẫn dùng biến tệp cũ thì không cần thiết phải dùng thủ tục ASSIGN gán lại tên tệp.
2. Xử lý tệp
Một số hàm và thủ tục chuẩn thường dùng trong thao tác tệp
back
Hàm logic
EOF(
cho giá trị TRUE nếu con trỏ tệp đang chỉ tới cuối tệp.
Thủ tục
SEEK(
đưa con trỏ tệp về vị trí phần tử có số thứ tự xác định bởi giá trị Biến nguyên (Các phần tử của tệp được đánh số thứ tự bắt đầu từ 0).
2. Xử lý tệp
Ví dụ áp dụng
back
Ví dụ 1: (Sach Giao Khoa trang 92)
PROGRAM KQ_TIN;
USES CRT;
TYPE BANGHI = RECORD
HOTEN : STRING[28];
DIEM : BYTE;
END;
VAR N : INTEGER;
BG : BANGHI;
F : FILE OF BANGHI;
TENTEP : STRING[10];
I : INTEGER;
BEGIN
CLRSCR;
WRITE( ‘So hoc sinh :’);
READLN(N);
TENTEP := ‘KQ.DAT’;
ASSIGN(F,TENTEP);
REWRITE(F);
FOR I:= 1 TO N DO
BEGIN
WRITE(‘Ho va Ten :’);
READLN(BG.HOTEN);
WRITE(‘DIEM :’);
READLN(BG.DIEM);
WRITE(F,BG);
END;
CLOSE(F);
END.
2. Xử lý tệp
Ví dụ áp dụng
back
Ví dụ 2 (Sach Giao Khoa trang 94)
PROGRAM VIDU_2;
USES CRT;
TYPE BANGHI = RECORD
HOTEN : STRING[28];
DIEM : BYTE;
END;
VAR F : FILE OF BANGHI;
N, TG : INTEGER;
BG : BANGHI;
TENTEP : STRING[10];
DIEM_TB : REAL;
BEGIN
CLRSCR;
N := 0; TG := 0;
TENTEP := ‘KQ.DAT’;
ASSIGN(F,TENTEP);
RESET(F);
WHILE NOT EOF(F) DO
BEGIN
READ(F,BG);
TG := TG + BG.DIEM;
N := N + 1;
END;
DIEM_TB := TG/N;
WRITELN(‘Diem trung binh cua lop: ‘, DIEM_TB:4:1);
CLOSE(F)
END.
2. Xử lý tệp
Đọc/ghi tệp văn bản
READ (
back
Thủ tục đọc Read
Cú pháp :
Thủ tục ghi Write
hoặc READLN (
WRITE (
Cú pháp :
hoặc WRITELN (
Trong đó : Danh sách biến là một hoặc nhiều tên biến. Trong trường hợp nhiều biến thì các tên cách nhau bởi dấu phẩy.
Trong đó : Danh sách kết quả gồm một hoặc nhiều phần tử. Trường hợp có nhiều phần tử thì các phần tử này cách nhau một dấu phẩy. Phần tử có thể là tên biến, biểu thức (số học, quan hệ hoặc logic) hoặc hằng xâu.
2. Xử lý tệp
Đọc/ghi tệp văn bản
back
Ví dụ 1:
Giả thiết trong chương trình có khai báo:
VAR FA, FB : TEXT;
và tệp FA được mở để đọc, còn tệp FB để ghi. Khi đó:
– Có thể có các thủ tục đọc tệp FA như sau:
READ (FA,A,B,C);
hoặc READLN(FA,A,B,C);
– Có thể có các thủ tục ghi ra tệp FB như sau:
WRITE(FB, ‘A= ’, A, ‘B= ‘, B, ‘C= ‘, C);
WRITELN(FB, ‘X1=’, (–B – SQRT(B*B – 4*A*C))/(2*A):8:3);
Ví dụ 2:
Xét đường gấp khúc khép kín không tự cắt N đỉnh trong mặt phẳng, có các cạnh song song với trục tọa độ và các đỉnh có tọa độ nguyên
Đường gấp khúc 16 đỉnh
Chương trình sau thực hiện :
Nhập từ bàn phím số N, tọa độ các đỉnh liên tiếp của đường gấp khúc và ghi tọa độ các đỉnh ra tệp văn bản GAPKHUC.INP, mỗi dòng chứa 2 số nguyên là tọa độ một đỉnh. Các số trên một dòng cách nhau một dấu cách.
Chương trinh
Ví dụ 2:
PROGRAM GAPKHUC;
USES CRT;
VAR F : TEXT
I, N, X, Y : INTEGER;
TF : STRING[80];
BEGIN
CLRSCR;
WRITE(‘ N = ‘); READLN(N);
TF := ‘GAPKHUC.INP’;
ASSIGN(F,TF);
REWRITE(F);
FOR I:= 1 TO N DO
BEGIN
WRITE(‘ X, Y : ’); READLN(X,Y);
WRITELN(F, X, ‘ ’, Y);
END;
CLOSE(F);
END.
Ví dụ 3:
Chương trình sau đọc dữ liệu của ví dụ 2 chứa ở tệp GAPKHUC.INP, tính chu vi hình giới hạn bởi đường gấp khúc và đưa kết quả ra tệp văn bản GAPKHUC.OUT.
PROGRAM VI_DU3;
USES CRT;
VAR FA, FB : TEXT;
L : LONGINT;
X0, Y0, X1, Y1, X, Y : INTEGER;
BEGIN
ASSIGN (FA, ‘GAPKHUC.INP’);
RESET(FA);
READLN(FA, X, Y);
X0 := X; Y0 := Y; L := 0;
WHILE NOT EOF(FA) DO
BEGIN
X1 := X; Y1:= Y; READLN(FA,X,Y);
L:= L + ABS(X – X1) + ABS(Y – Y1);
END;
L := L + ABS (X – X0) + ABS(Y – Y0);
CLOSE(FA);
ASSIGN(FB, ‘GAPKHUC.OUT’);
REWRITE(FB);
WRITELN(FB, ‘Chu vi : ‘, L);
CLOSE(FB)
END.
* Một số tài liệu cũ có thể bị lỗi font khi hiển thị do dùng bộ mã không phải Unikey ...
Người chia sẻ: Thiều Thị Thủy Ngân
Dung lượng: |
Lượt tài: 4
Loại file:
Nguồn : Chưa rõ
(Tài liệu chưa được thẩm định)