FILE - Tập các dữ liệu cùng kiểu - Lưu trữ trên đĩa, băng từ - Truy nhập ngẫu nhiên hay tuần tự đến các phần tử qua chỉ số - Số phần tử không xác định khi khai báo.. Biến tệp đại diện ch[r]
(1)NGÔN NGỮ LẬP TRÌNH PASCAL (03 đơn vị học trình) Mục đích, yêu cầu Cung cấp kiến thức NNLT Pascal với cấu trúc liệu nâng cao Sử dụng phần mềm Turbo Pascal lập trình giải các bài toán giúp cho việc học tập, nghiên cứu và giảng dạy Nội dung C7: C8: C9: C10: Kiểu Set (tập hợp) Kiểu Record (bản ghi) Kiểu File (tệp) Kiểu Pointer (con trỏ) Tài liệu tham khảo Nguyễn Quý Khang, Kiều Văn Hưng, Bài tập Pascal (tập 1), NXB ĐHQG Hà Nội, 2002 (hoặc Bài tập Pascal, ĐHSP Hà Nội 2) Quách Tuấn Ngọc, Ngôn ngữ lập trình Pascal, NXBGD, 1996 Bùi Thế Tâm, Văn Văn Tuấn Dũng, Turbo Pascal 7.0, NXB Thống kê, 1996 Hình thức thi, kiểm tra Thi trắc nghiệm lý thuyết + Lập trình trên máy Lop11.com (2) Chương KIỂU SET (TẬP HỢP) 7.1 KHÁI NIỆM VÀ KHAI BÁO Khái niệm, biểu diễn tập hợp Kiểu tập hợp (set) Pascal là tập liệu thuộc kiểu vô hướng đếm (số nguyên, kí tự, logic, đoạn con, liệt kê) Với TP, tập hợp có số phần tử từ 256 và giá trị các số từ 255 Biểu diễn tập hợp: liệt kê các phần tử cặp ngoặc vuông [1, 2, 6, 9] (số phần tử: 4) ['A', 'a' 'z'] (số phần tử: 27) [] (số phần tử: 0, tập rỗng) Khai báo Khai báo kiểu tập hợp TYPE KieuTH = Set of KieuCS; đó KieuTH: từ tự đặt xđ kiểu tập hợp; KieuCS: kiểu liệu phần tử Khai báo biến tập hợp Cách (khai báo trực tiếp biến tập hợp) VAR BienTH : Set of KieuCS; Cách (khai báo gián tiếp) VAR BienTH : KieuTH; (Tham số hình thức CTC phải dùng Cách 2) Lop11.com (3) VD 7.1 (khai báo kiểu, biến tập hợp) TYPE {Khai bao kieu tap hop} SoNguyen = Set of Byte; ChuHoa VAR = Set of 'A' 'Z'; {Khai bao bien tap hop} so : SoNguyen; chu : ChuHoa; kt : Set of Char; Chú ý (i) (ii) (iii) 7.2 Vị trí các phần tử tập hợp không có ý nghĩa ([1, 2] = [2, 1]) Dùng lệnh gán để thay đổi giá trị cho các biến tập hợp Không dùng lệnh Read và Write trực tiếp cho liệu kiểu tập hợp TH := TH + [pt]; {Thêm pt} if pt in TH then Write(pt); {Viết pt} CÁC PHÉP TOÁN Phép hợp (+), giao (*), hiệu (-), bao hàm (IN): giống toán học A := [1, 3]; A + B = [1, 2, 3, 4]; A - B = [1]; B := [2, 3, 4] A * B = [3]; B - A = [2, 4]; in A FALSE Phép so sánh (=, <>, <=, >=): kết có kiểu logic (TRUE/FALSE) A <= B có KQ là TRUE A là tập B, trái lại KQ là FALSE A >= B có KQ là TRUE A bao hàm tập B, trái lại KQ là FALSE Không có phép so sánh < và > trên kiểu tập hợp Pascal 7.3 VÍ DỤ Lop11.com (4) VD 7.2 (Phân loại kí tự) Lập trình nhập vào kí tự Kiểm tra xem kí tự đó chữ cái, chữ số hay kí tự khác? Hướng dẫn: khai báo biến ch kiểu Char và biến ChuCai, ChuSo kiểu tập hợp kí tự, gán giá trị: ChuCai := ['A' 'Z', 'a' 'z'] ChuSo := ['0' '9'] Nếu ch in ChuCai thì viết "là chữ cái" Nếu ch in ChuSo thì viết "là chữ số" Nếu thì viết "kí tự khác" VD 7.3 (Bán vé máy bay, BT 6.9, tr 187) Một máy chứa tối đa 250 hành khách, với các ghế đánh số 1, 2, , 250 Lập trình bán vé máy bay, yêu cầu lên các số ghế còn trống để khách lựa chọn Hướng dẫn: Tạo tập V = [1 250] tương ứng với số ghế trên các vé và liệt kê chúng màn hình Dùng vòng lặp không xác định để nhập số ghế mà hành khách chọn Một số ghế đã chọn thì số đó không còn V và trên màn hình Chương KIỂU RECORD (BẢN GHI) 8.1 KHÁI NIỆM VÀ KHAI BÁO Khái niệm Lop11.com (5) Kiểu ghi (Record) là kiểu liệu có cấu trúc gồm nhiều thành phần và gọi là field - trường Mỗi trường đặt tên và các trường có thể có các kiểu liệu khác Kiểu ghi dùng để mô tả các đối tượng có cùng số thuộc tính mà các thuộc tính có thể có kiểu liệu khác Chẳng hạn, bảng kết thi TSĐH gồm thông tin các thí sinh như: họ tên, SBD, ngày sinh, giới tính, điểm môn 1, 2, 3, mà các thông tin này thuộc các kiểu liệu khác Khai báo Khai báo kiểu ghi TYPE KieuBG = RECORD T1 : K1; Tn : Kn; END; đó KieuBG: từ tự đặt xđ tên kiểu ghi; T1, Tn: tên các trường; K1, Kn: kiểu liệu các trường Khai báo biến ghi Cách (khai báo trực tiếp biến ghi) VAR BienBG : RECORD T1 : K1; Tn : Kn; END; Lop11.com (6) Cách (khai báo gián tiếp) VAR BienBG : KieuBG; (Tham số hình thức CTC phải dùng Cách 2) VD 8.1 (khai báo kiểu, biến ghi) TYPE {Khai bao kieu ban ghi} HSTS = RECORD hoten : String[25]; sbd : String[8]; ngaysinh : String[10]; gt : Boolean; mon1, mon2, mon3, tong : Real; KQ : String[10]; END; HSCB = RECORD hoten : String[25]; ngaysinh : String[10]; chucvu : String[15]; Luong : Real; Ghichu : String[10]; END; VAR {Khai bao bien ban ghi} ts : HSTS; cb : HSCB; sv : Record hoten : String[25]; lop : String[5]; tuoi : Byte dtb: Real; End; Lop11.com (7) 8.2 SỬ DỤNG RECORD Lệnh gán biến Record cùng kiểu A := B; Chỉ phép truy nhập tới các trường biến Record BienBG.Truong Các thao tác truy nhập: - Nhập: Readln(BienBG.Truong); - Xuất: Write(BienBG.Truong); - Gán trị: BienBG.Truong := ; Chú ý (i) Không dùng thủ tục Read, Readln, Write, Writeln cho biến Record Write(bg); Readln(bg) (ii) {SAI !} {bg - biến Record} Không dùng các phép toán số học, logic, so sánh (= , <>, >, >=, <, <=) các biến Record VD 8.2 (Dùng sai biến Record) Type HSSV = record hoten:string[20]; dtb:real; end; var s1, s2: HSSV; begin s1.hoten:= 'Mot'; s1.dtb:= 1.1; s2.hoten:= 'Hai'; s2.dtb:= 2.2; if (s1=s2) then writeln('s1 = s2') else writeln('SV1 khac SV2!'); Lop11.com (8) Readln; end VD 8.3 (Khoảng cách điểm) Lập trình nhập vào toạ độ điểm A(xA, yA), B(xB, yB) hệ toạ độ đềcác Tính d(A, B) Hướng dẫn: - Khai báo biến A, B kiểu Record với trường x, y (kiểu thực) - Tính d(A, B) theo công thức: Sqrt(Sqr(xA-xB) + Sqr(yA-yB)) VD 8.4 (Xếp loại học bổng) Lập trình nhập vào danh sách N sinh viên (N < 1000) với các thuộc tính họ tên, ngày sinh, lớp, điểm trung bình mở rộng, học bổng Xếp loại học bổng cho các SV theo quy định hành và in kết màn hình Hướng dẫn: - Khai báo biến SV kiểu mảng Record, phần tử mảng lưu trữ thông tin cho SV Nhập N và dùng lệnh FOR để nhập thông tin SV gồm họ tên, ngày sinh, lớp, điểm trung bình mở rộng vào biến SV, đồng thời dùng lệnh IF để gán trị cho trường học bổng Dùng lệnh FOR để in DS màn hình Lệnh WITH DO WITH BienBG DO begin T1:= ; Readln(T2); Write(Tn); end; truy nhập đơn giản tới các trường (T1, , Tn) biến ghi (BienBG) Lop11.com (9) VD 8.4 (tiếp) Lập trình dùng With 8.3 RECORD CÓ CẤU TRÚC THAY ĐỔI (Tham khảo [3], tr 140) Chương KIỂU FILE (TỆP) 9.1 CẤU TRÚC VÀ PHÂN LOẠI TỆP Lop11.com (10) Khái niệm tệp Tệp (File, tập tin, hồ sơ) liệu là tập hợp các liệu có liên quan với nhau, có cùng kiểu tổ chức thành dãy, và lưu trữ nhớ ngoài (đĩa, băng từ) Mỗi ô là phần tử tệp EOF Tệp dùng để lưu trữ liệu: liệu tệp dùng nhiều lần và tồn kết thúc chương trình hay điện (khác với các kiểu mảng, xâu, ghi, ) Các loại tệp TP: tệp văn (TEXT file), tệp định kiểu (Typed file), tệp không định kiểu (Untyped file) Khai báo kiểu và biến tệp Khai báo kiểu tệp TYPE KieuTep = FILE OF KieuPT; đó KieuTep là từ tự đặt xác định kiểu tệp, KieuPT là kiểu liệu phần tử (Real, String, Array, Record, trừ kiểu file) Khai báo biến tệp Cách 1: VAR BienTep : KieuTep; Cách 2: VAR BienTep : FILE OF KieuPT; 10 Lop11.com (11) VD 9.1 (khai báo kiểu, biến tệp) TYPE {Đinh nghia cac kieu tep} FileInteger = FILE OF Integer; FileReal = FILE OF Real; HosoSV= RECORD hoten: String[25]; lop: String[5]; dtb: Real; END; FHosoSV = FILE OF HosoSV; VAR {Khai bao cac bien tep} F1, F2: FileInteger; {tep cac so nguyen} F3: FileReal; {tep cac so thuc} g: FHosoSV; {tep cac ban ghi} F4: Text; {tep van ban} F5: File; F6: FILE OF Char; {tep cac ki tu} {tep khong đinh kieu} Cấu trúc và phân loại tệp Các phần tử ARRAY hay RECORD truy nhập ngẫu nhiên thông qua tên biến và số / tên trường Một phần tử tệp truy nhập thông qua giá trị biến đệm (tampon variable) Biến đệm dùng để đánh dấu vị trí truy nhập hay còn gọi là cửa sổ (window) tệp Có lệnh để di chuyển cửa sổ tệp sang vị trí khác (Reset, Seek, ) Mỗi tệp có dấu hiệu kết thúc tệp - EOF (End of File) Hàm chuẩn EOF(f) trả TRUE cửa sổ vị trí dấu hiệu kết thúc tệp f, trái lại hàm trả FALSE Mỗi ô là phần tử tệp Chỉ số ptử Các ptử EOF Phân loại tệp theo bố trí các phần tử và cách truy nhập tệp: tệp truy nhập (sequential access), tệp truy nhập trực tiếp (direct access) - Tệp truy nhập tuần tự: việc đọcCửa phần bắt buộc phải qua các phần sổtửtệp tử trước đó Ghi phần tử phải ghi vào sau phần tử cuối tệp 11 Lop11.com (12) - Tệp truy nhập trực tiếp: để đọc/ghi, có thể đặt cửa sổ vào phần tử thông qua số thứ tự phần tử tệp - Trong Pascal chuẩn có tệp truy nhập Chú ý: (1) Sự giống/khác mảng và tệp ARRAY - Tập các liệu cùng kiểu - Chứa tạm RAM - Truy nhập ngẫu nhiên đến các phần tử qua số - Số phần tử xác định khai báo (2) FILE - Tập các liệu cùng kiểu - Lưu trữ trên đĩa, băng từ - Truy nhập ngẫu nhiên hay đến các phần tử qua số - Số phần tử không xác định khai báo Biến tệp đại diện cho tệp Việc truy xuất liệu trên tệp thể qua các lệnh với thông số là biến tệp 9.2 CÁC THAO TÁC CƠ BẢN TRÊN TỆP Mở tệp để ghi liệu Mở tệp để ghi ASSIGN(BienTep, TenTep); REWRITE(BienTep); đó BienTep là biến kiểu tệp; TenTep là xâu kí tự xác định tên tệp (quy tắc đặt tên tệp theo quy định hệ điều hành) VD 9.2 (mở tệp để ghi) ASSIGN(f, ’HOSOSV.DAT’); REWRITE(f); Gán tên tệp HOSOSV.DAT cho biến tệp f, trên đĩa có tệp HOSOSV.DAT (ở thư mục tại) Chú ý: - Khi mở, tệp rỗng (chưa có phần tử nào) - Khi mở tệp, trên đĩa đã có tệp trùng tên với tệp mở thì liệu tệp cũ 12 Lop11.com (13) Ghi vào tệp với thủ tục WRITE WRITE(BienTep, b1, , bN); đó BienTep là biến tệp đã dùng để mở tệp; b1, , bN là các biến (có cùng kiểu thành phần BienTep) cần ghi vào tệp VD 9.3 (ghi các số nguyên 28, 8, 2006 vào tệp SN.DAT) ASSIGN(f, ’SN.DAT’); REWRITE(f); x:= 28, y:= 8; z:= 2006; {x,y,z - biến Integer} WRITE(f, x, y, z); {Sai: WRITE(f,28,8,2006);} 28 2006 EOF Cửa sổ tệp Đóng tệp CLOSE(BienTep); đó BienTep là biến tệp đã dùng để mở tệp Việc đóng tệp tệp tạo nhằm đảm bảo liệu đã ghi không bị VD 9.4 Lập trình nhập vào số nguyên dương N < 1000, sau đó tạo tệp SN.DAT chứa N số nguyên ngẫu nhiên VD 9.5 Tạo tệp chứa 100 số nguyên dương đầu tiên (sử dụng CTC) Biến tệp dùng làm tham số CTC bắt buộc phải là tham biến (khai báo có VAR trước) Đọc liệu từ tệp đã có 13 Lop11.com (14) Mở tệp để đọc ASSIGN(BienTep, TenTep); RESET(BienTep); đó BienTep là biến kiểu tệp; TenTep là xâu kí tự xác định tên tệp - Sau lệnh RESET(BienTep), tệp không rỗng thì cửa sổ tệp phần tử đầu tiên - Nếu tệp chưa tồn (hoặc sai đường dẫn) thì có thông báo lỗi (File not found) Đọc tệp với thủ tục READ READ(BienTep, b1, , bN); đó BienTep là biến tệp đã dùng để mở tệp; b1, , bN là các biến có cùng kiểu thành phần BienTep - Lệnh READ(BienTep, ) đọc giá trị các vị trí cửa sổ các biến tương ứng Đọc xong giá trị, cửa sổ chuyển sang vị trí và đọc giá trị cho biến khác, biến bN - Đọc tệp cửa sổ chưa cuối tệp: IF not EOF(BienTep) THEN READ(BienTep, x); - Để đọc tất các phần tử tệp, dùng đoạn lệnh sau: RESET(BienTep); WHILE not EOF(BienTep) DO BEGIN READ(BienTep, x); {Đọc phần tử tệp và gán vào biến x} {Xử lý biến x} END; - Nên đóng tệp sau đọc liệu: CLOSE(BienTep); VD 9.6 Lập trình đọc liệu từ tệp SN.DAT (chứa các số nguyên) Cho biết tệp này có bao nhiêu phần tử (không dùng hàm FileSize)? Có bao nhiêu số nguyên tố? Bài tập Lập trình đọc liệu từ tệp SN.DAT (chứa các số nguyên), ghi các số dương vào tệp SND.DAT, còn các số âm ghi vào tệp SNA.DAT 14 Lop11.com (15) Viết chương trình khác để đọc liệu các tệp SND.DAT, SNA.DAT và in chúng màn hình để kiểm tra Truy nhập tệp trực tiếp - thủ tục SEEK TURBO PASCAL cho phép truy nhập tệp trực tiếp Thủ tục SEEK SEEK(BienTep, k); đó BienTep là biến tệp đã dùng để mở tệp; k là số phần tử tệp (phần tử đầu tiên có số là 0) Thủ tục SEEK(BienTep, k) đặt cửa sổ tệp vào phần tử có số k Dùng thủ tục READ(BienTep, ) để đọc phần tử này ra, dùng thủ tục WRITE(BienTep, ) để ghi giá trị vào phần tử này VD 9.7 Lập trình đọc liệu từ tệp SN.DAT (chứa các số nguyên) Hãy kiểm tra xem phần tử thứ hai (nếu có) tệp có là số dương không? Nếu không, hãy thay nó số nguyên dương nhập từ bàn phím Hướng dẫn - Mở tệp để đọc RESET(f); - SEEK(f, 1); (Phần tử thứ hai có số 1) - READ(f, k); Write(k); - Nếu thay giá trị khác thì Readln(k); SEEK(f, 1); WRITE(f, k); 15 Lop11.com (16) Một số CTC xử lý tệp Turbo Pascal Hàm FileSize FileSize(BienTep); trả số phần tử tệp BienTep (hàm trả tệp rỗng) Hàm FilePos FilePos(BienTep); trả số phần tử mà cửa sổ tệp BienTep đó (phần tử đầu tiên có số 0) - Để thêm phần tử vào cuối tệp: SEEK(BienTep, FileSize(BienTep)); WRITE(BienTep, ); - Ghi lại thay đổi tệp: CLOSE(BienTep); Thủ tục ERASE ERASE(BienTep); xóa tệp trên đĩa đã gán BienTep thủ tục ASSIGN(BienTep, TenTep); trước đó Chẳng hạn, để xóa tệp SN.BAK trên đĩa: ASSIGN(f, ’SN.BAK’); ERASE(f); Thủ tục RENAME RENAME(BienTep, TenTepMoi); đổi tên tệp trạng thái đóng với tên (không trùng với tên tệp khác đã có) đặt xâu TenTepMoi; tệp đã gán BienTep thủ tục ASSIGN(BienTep, TenTep); trước đó Chẳng hạn, để đổi tên tệp SN.DAT thành SN2.DAT: 16 Lop11.com (17) ASSIGN(f, ’SN.DAT’); RENAME(f, ’SN2.DAT’); Kiểm tra lỗi vào/ra tệp Vấn đề - Dùng lệnh RESET(f) thì tệp f đã có chưa? - Ghi vào tệp f thì trên đĩa có đủ chỗ trống không? $I - kiểm tra lỗi vào/ra {$I+}: Dừng chương trình và báo lỗi có lỗi vào/ra (ngầm định); {$I-}: Không dừng chương trình có lỗi vào/ra Hàm IOResult = vào/ra tệp không có lỗi VD 9.8 Lập trình kiểm tra tồn tập tin tuỳ ý trên đĩa (xem Bài tập 8.1) 9.3 TỆP VĂN BẢN (Text files) Khái niệm tệp văn Tệp văn là kiểu tệp định nghĩa trước TP, với từ chuẩn Text Các phần tử tệp kiểu Text là các ký tự, và tổ chức thành các dòng, dòng kết thúc dấu hiệu EOLN (End Of Line: CR LF) CR - Carriage Return (về đầu dòng, mã ASCII= 13) LF - Line Feed (xuống dòng tiếp theo, mã ASCII= 10) Dấu hiệu kết thúc tệp văn (EOF) TP là Ctrl+Z (mã ASCII = 26) VD 9.9 (cấu trúc tệp văn bản) Nếu tệp văn có nội dung: Turbo Pascal Ver 7.0 Borland Inter., Inc thì có cấu trúc là Turbo Pascal CR LF Ver 7.0 CR LF 17 Lop11.com Borland Inter., Inc EOF (18) File of Char phần tử là ký tự Các ký tự CR, LF, CTRL+Z xử lý các ký tự bình thường Hàm EOF(Var F: Text): Boolean; Hàm trả giá trị False cửa sổ tệp chưa đến cuối tệp, ngược lại, cho giá trị True (hàm dùng để kiểm tra đã đọc hết tệp văn chưa) Hàm EOLN(Var F: Text): Boolean; Hàm trả giá trị False cửa sổ tệp chưa đến điểm cuối dòng cuối tệp, ngược lại, cho giá trị True Hàm này thường sử dụng để kiểm tra xem đã đọc đến cuối dòng chưa Chẳng hạn: While not EOLN(F) Do Khai báo biến tệp văn VAR BienTep : Text; đó BienTep là từ để xác định tên biến tệp, Text là từ chuẩn kiểu tệp văn (xem VD 9.1) Ghi vào tệp văn Có thể ghi các giá trị kiểu Integer, Real, Boolean, String vào tệp văn lệnh WRITE WRITELN WRITE (BienTep, bt1, , btN); (1) WRITELN(BienTep, bt1, , btN); (2) WRITELN(BienTep); (3) Lệnh (1): Ghi giá trị các biểu thức bt1, , btN có kiểu: nguyên, thực, ký tự, xâu, logic vào BienTep Lệnh (2): Tương tự (1) thêm dấu hiệu hết dòng sau các giá trị bt1, , btN Lệnh (3): ghi dấu hiệu hết dòng vào tệp Ghi chú: Các lệnh (1), (2) có thể viết có định dạng (quy cách) viết màn hình Chẳng hạn: WRITE(f, 'Pascal': 20, 1509 + 20.06: 10: 1); VD 9.10 Lập trình tạo tệp văn TP70.TXT với nội dung sau: ********************************************************************** * * * Turbo Pascal Version 7.0 * * * Copyright (c) 1989, 92 by Borland International, Inc * * * * ********************************************************************** 18 Lop11.com (19) Đọc liệu từ tệp văn Read (BienTep, b1, , bN); Readln(BienTep, b1, , bN); (1) (2) Readln(BienTep); (3) đó b1, ,bN là các biến thuộc kiểu kí tự, nguyên, thực, logic, chuỗi Lệnh (1): đọc từ tệp các biến b1, , bN mà không chuyển cửa sổ tệp xuống dòng Lệnh (2): đọc từ tệp các biến b1, , bN và chuyển cửa sổ tệp xuống dòng Lệnh (3): chuyển cửa sổ tệp xuống dòng VD 9.11 Lập trình đọc tệp văn và in nội dung tệp đó màn hình Thủ tục thêm dòng Append(Var F: Text); mở tệp văn để ghi thêm vào cuối tệp với thủ tục Write( ) hay Writeln( ) VD 9.12 Lập trình ghi thêm số dòng vào cuối tệp TP70.TXT Các tệp thiết bị OUTPUT: tệp xuất ( màn hình) Write(x, y, z); ~ Write(OUTPUT, x, y, z); INPUT: tệp nhập ( bàn phím) Readln(x, y, z); ~ Readln(INPUT, x, y, z); LST: tệp máy in (trong Unit PRINTER.TPU khai báo Uses Printer; dùng) VD 9.13 Lập trình tạo bảng mã ASCII và ghi vào tệp văn ASCII.TXT VD 9.14 Lập trình tạo bảng cửu chương và ghi vào tệp văn B9C.TXT VD 9.15 Lập trình đọc liệu từ tệp SN.DAT (đã có trên đĩa), ghi các số dương vào tệp văn SND.TXT 19 Lop11.com (20) VD 9.16 Lập trình giải phương trình bậc ax2 + bx + c = (a <> 0) Đọc liệu từ tệp văn GPT2.INP gồm dòng ghi số thực a, b, c Kết ghi vào tệp văn GPT2.OUT có cấu trúc sau: - Dòng đầu tiên ghi số nghiệm phương trình - Các dòng tiếp theo, dòng ghi giá trị nghiệm có (lấy chữ số thập phân) 9.4 TỆP KHÔNG ĐỊNH KIỂU (Untyped file) Khái niệm Tệp không định kiểu: kiểu tệp đặc biệt TP, khai báo với từ khoá File Khi khai báo tệp không định nghĩa kiểu, không nêu rõ chất liệu ghi tệp Thủ tục BlockRead và BlockWrite Thủ tục BlockRead: đọc liệu từ tệp không định kiểu BlockRead(sf, Buf, SizeOf(Buf), NRead); sf - biến tệp nguồn không định kiểu để đọc liệu ra; Buf - khối liệu đọc từ tệp vào Buf (biến) SizeOf(Buf) - kích thước khối liệu đọc, biểu thức kiểu Word NRead - tham số tuỳ chọn, biến kiểu Word, xác định số Record đọc Buf (biến 0: không còn liệu để đọc) Thủ tục BlockWrite: ghi liệu vào tệp không định kiểu BlockWrite(sd, Buf, NWrite, Result); sd - biến tệp đích không định kiểu để ghi liệu; Buf - khối liệu ghi từ biến Buf vào tệp NWrite - biến kiểu Word, xác định số Record ghi từ Buf vào tệp Result - tham số tuỳ chọn, biến kiểu Word, kiểm tra việc ghi liệu từ Buf vào tệp VD 9.17 Lập trình tạo chương trình copy tệp tuỳ ý 9.5 ỨNG DỤNG Bài toán quản lý 20 Lop11.com (21)