Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 25 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
25
Dung lượng
435,39 KB
Nội dung
DỮLIỆUKIỂUTẬPTIN 15.2.1. Khái niệm : Nhập và xuất dữliệu là hai công việc rất phổ biến khi thực hiện một chương trình. Cho đến nay, ta mới chỉ nhập dữliệu từ bàn phím và xuất dữliệu ra màn hình. Các dữliệu này được tổ chức trong bộ nhớ của máy, chúng tồn tại khi chương trình đang chạy và bị xóa khi chương trình kết thúc. Muốn lưu trữ các dữliệu lâu dài để sử dụng nhiều lần thì phải ghi chúng lên đĩa thành các tập tin. Tậptin (file) trong Pascal là một kiểudữliệu có cấu trúc. Mỗi tậptin là một tập hợp các phần tử có cùng chung một kiểudữliệu được nhóm lại thành một dãy và được ghi trên đĩa dưới một cái tên chung. Khái niệm tậptin và mảng có những điểm rất gần nhau. Song tậptin khác mảng ở những điểm sau đây: Mảng được tổ chức trong bộ nhớ còn tậptin chủ yếu được tổ chức trên đĩa. Số phần tử của mảng được xác định ngay khi khai báo, còn số phần tử của tậptin thì không. Các tậptin được kết thúc bằng một dấu hiệu đặc biệt gọi là EOF ( End Of File). Các phần tử của mảng được truy xuất thông qua chỉ số. Các phần tử của tậptin được truy xuất nhờ một biến trung gian chỉ điểm vào vị trí của chúng trên đĩa, gọi là con trỏ tệp. Tại mỗi thời điểm, con trỏ sẽ chỉ vào một vị trí nào đó trong tập tin, gọi là vị trí hiện thời. Dưới đây sẽ trình bày hai loại tậptin thường gặp là tậptin có định kiểu và tậptin văn bản. 15.2.2. Tậptin có định kiểu: Tậptin mà các phần tử của nó có cùng một kiểudữliệu gọi là tậptin có định kiểu. Kiểudữliệu của các phần tử của tậptin có thể là kiểu đơn giản ( nguyên, thực, ký tự , lô gic, chuỗi ký tự ) hoặc kiểu có cấu trúc ( mảng, bản ghi). Cách khai báo kiểutậptin như sau: Type TênkiểuTtin = File of Kiểuphầntử ; Ví dụ: Type Ksvien = Record Ten: String[20]; Namsinh : Integer; DTB : Real; end; KieuT1 = File of Integer; KieuT2 = File of String[20]; KieuT3 = File of Ksvien ; Theo khai báo trên thì KieuT1 là tậptin có các phần tử kiểu nguyên ( Integer ), KieuT2 là tậptin có các phần tử là các chuỗi ký tự ( String[20] ), còn KieuT3 là tậptin có các phần tử là các bản ghi kiểu Ksvien. Khi đã có kiểutập tin, ta có thể khai báo các biến tậptin : Var F1 : KieuT1; F2 : KieuT2; F3 : KieuT3; F1, F2, F3 là các biến kiểutập tin, một loại biến đặc biệt, không dùng để gán gía trị như các biến nguyên, thực hay chuỗi. Mỗi biến này đại diện cho một tậptin mà thông qua các biến đó ta có thể thực hiện các thao tác trên tậptin như : tạo tập tin, mở, đóng, xóa tập tin, ghi dữliệu vào tậptin và đọc dữliệu từ tập tin, Ngoài cách khai báo các biến F1, F2, F3 thông qua việc địng nghĩa các kiểudữliệu mới như trên, Pascal còn cho phép khai báo trực tiếp các biến tậptin như sau: Var TênbiếnTtin : File of Kiểuphầntử ; Ví dụ: có thể khai báo ba biến F1, F2, F3 nói trên theo cách sau : Type Ksvien = Record Ten: String[20]; Namsinh : Integer; DTB : Real; end; Var F1 : File of Integer; F2 : File of String[20]; F3 : File of Ksvien ; 15.2.2.1. Các thủ tục chuẩn: 1) Thủ tục ASSIGN( biếntậptin, têntậptin) : Gán tên tậptin cho biến tập tin. Ở đây tên tậptin là một biểu thức kiểu chuỗi là tên thực sự của tập tin. Ví dụ : Assign(F1, ‘DLIEU.DAT’); Assign(F3, ‘QLSV.DAT’); Sau hai lệnh này, biến F1 đồng nhất với tậptin DLIEU.DAT, mọi thao tác trên biến F1 chính là thao tác trên tậptin DLIEU.DAT. Tương tự, biến F3 đồng nhất với tậptin QLSV.DAT 2) Thủ tục REWRITE( biếntậptin) : Khởi tạo tậptin mới, nếu tậptin đã có trên đĩa thì nó xóa đi và tạo mới. Ví dụ : Rewrite(F1) ; khởi tạo tậptin DLIEU.DAT Rewrite(F3) ; khởi tạo tậptin QLSV.DAT 3) Thủ tục RESET(biếntậptin): Mở tậptin đã có để sử dụng. Con trỏ tậptin trỏ vào phần tử đầu tiên (có số thứ tự là 0) của tậptin . Ví dụ : Reset ( F3); mở tậptin QLSV.DAT 4) Thủ tục WRITE( biếntậptin, b1, b2, , bN): Tuần tự ghi vào tậptin các gía trị của các biến b1, b2, , bN. Các biến b1, , bN phải cùng kiểudữliệu với các phần tử của tập tin. Ví dụ: - Cho i, j, k là các biến kiểu Integer và i=10, j=20, k=100, khi đó lệnh : Write(F1, i, j, k ) ; sẽ ghi lần lượt các gía trị 10, 20, 100 vào tậptin DLIEU.DAT -Cho khai báo: Var X : Ksvien; Các lệnh sau gán gía trị cho X và ghi X vào tậptin QLSV.DAT: X.Ten:=’Ng Van An’; X.Namsinh :=1980 ; X.DTB :=6.5; Write(F3, X); Sau khi ghi X vào tậptin QLSV.DAT, con trỏ tậptin tự động dời đến vị trí của phần tử tiếp theo. 5) Thủ tục READ( biếntậptin, b1, b2, , bN) : Ðọc tuần tự các phần tử của tậptin từ vị trí hiện thời của con trỏ tậptin và gán cho các biến b1, b2, , bN. Kiểudữliệu của các biến b1, b2, , bN phải cùng kiểu với các phần tử của tập tin. Mỗi khi đọc xong một phần tử, con trỏ tậptin tự động dời đến phần tử tiếp theo. Ví dụ: Lệnh Read(F1, i, j); đọc hai số nguyên trong tậptin DLIEU.DAT ( kể từ vị trí hiện thời) và gán cho các biến nguyên i, j . Lệnh Read(F3, X); đọc bản ghi hiện thời của tậptin QLSV.DAT và gán cho biến bản ghi X. 6) Thủ tục CLOSE( biếntậptin) : Ðóng tậptin . 7) Thủ tục SEEK( biếntậptin, k ) : Ðặt con trỏ tậptin vào phần tử thứ k trong tập tin. Thủ tục này cho phép truy xuất trực tiếp một phần tử của tậptin mà không phải thực hiện tuần tự từ đầu tập tin. Ví dụ: đọc phần tử thứ 10 của tậptin DLIEU.DAT và gán cho biến nguyên i rồi in gía trị của i : Seek(F1, 10); Read(F1, i); Write(i); 8) Thủ tục ERASE( biếntậptin) : Xóa tậptin trên đĩa 9) Thủ tục RENAME( biếntậptin, tênmới ) : Ðổi tên tậptin . Yêu cầu là tậptin phải đang đóng thì mới xóa hay đổi tên được. 15.2.2.2. Các hàm chuẩn: 1) Hàm EOF(biếntậptin): Cho kết qủa True khi con trỏ tậptin đang ở cuối tệp, trong các trường hợp khác hàm cho gía trị False. 2) Hàm FILESIZE(biếntậptin) : Cho số phần tử của tập tin. Nếu tậptin rỗng thì số phần tử bằng 0. 3) Hàm FILEPOS(biếntậptin) : Cho vị trí hiện thời của con trỏ tập tin. Phần tử đầu tiên có số thứ tự là 0. Phần tử cuối cùng có số thứ tự bằng FileSize -1. Ví dụ : Ghi số 100 vào cuối tậptin DLIEU.DAT, dùng các lệnh: i:=100; Seek( F1, FileSize(F1) ) ; {Ðặt trỏ vào cuối tập tin} Write(F1, i); { Ghi gía trị của i vào cuối tệp} Ví dụ 15.4: Nhập một danh sách sinh viên gồm Họ tên, điểm Toán, Lý, tính điểm trung bình rồi lưu vào tậptin HOSO.DAT. Sau đó đọc dữliệutậptin này và in ra màn hình. Trong chương trình , chỗ nào có dấu ~ thì thay bằng một ký tự trắng. PROGRAM VIDU15_4; Uses CRT; Const Tenttin = ‘HOSO.DAT’; Type Ksvien= Record Hoten: String[20]; Toan, Ly, Dtb : Real; end; [...]... đồng thời vừa ghi vừa đọc dữliệu như tậptin có định kiểu Ðể ghi dữ liệu, trước tiên phải khởi tạo tậptin bằng lệnh Rewrite hay mở tậptin và đưa trỏ về cuối tệp bằng lệnh Append Sau đó ghi dữliệu vào tậptin bằng thủ tục Write hay Writeln Ðể đọc dữliệu một tậptin đã có, trước tiên ta phải mở tậptin bằng lệnh Reset Sau đó đọc dữliệu bằng thủ tục Read hay Readln Nếu mở tậptin bằng Rewrite hoặc... đoạn văn bản sau : Taptin van ban Text 12345 Het được chứa trong tậptin văn bản thành một dãy : Taptin van ban CR CR 12345 Text LF Het Eof LF Các thủ tục Assign, Rewrite, Reset, Write, Read, Close, Erase, Rename đều dùng được cho tậptin văn bản Ngoài ra còn có thêm thủ tục Append(biếntậptin) dùng để mở tậptin văn bản và cho phép ghi thêm dữliệu vào cuối tậptin Ðối với tậptin văn bản, không thể... Pascal, Ðọc dữliệu của tậptin văn bản : Thủ tục READ( biếntậptin, biến1, biến2, , biếnN) đọc tuần tự các gía trị từ tậptin và gán cho các biến Các biến1, biến2, , biếnN phải có kiểu dữliệu phù hợp vơí dữliệu cần đọc tại vị trí tương ứng trong tậptin Ví dụ: Nếu tậptin T1.TXT có nội dung như sau: ~~Ket qua=~~100~123.45 thì để đọc lại các dữliệu này, ta phải khai báo: Var St :String[10]; i: Integer... giống như khi in dữliệu lên màn hình Thủ tục WRITELN cũng có công dụng như WRITE, nhưng ghi xong dữliệu thì đưa con trỏ tậptin xuống dòng dưới Ðặc biệt, lệnh Writeln(F); không ghi gì cả, chỉ đưa con trỏ tậptin xuống dòng Nội dung của các tậptin văn bản tạo bằng Pascal hoàn toàn có thể xem được bằng lệnh Type của MSDOS, bằng Norton hay bằng chính Turbo Pascal, Ðọc dữliệu của tậptin văn bản : Thủ... Hienthi(F); Close(F); Readln; END Chú ý : Nếu tham số trong chương trình con là tậptin thì nó phải là tham số biến, không thể là tham số trị 15.2.3 Tậptin văn bản: Trong Pascal có một kiểu tậptin đã được định nghĩa sẵn, đó là kiểu TEXT hay tậptin văn bản Ðể khai báo F là biến tậptin văn bản ta viết : Var F: Text; Các phần tử của tậptin văn bản là các ký tự được ghi thành từng dòng có độ dài khác nhau Các... Read và Readln Nếu mở tậptin bằng Reset thì không thể ghi được bằng Write hay Writeln Ghi dữliệu vào tậptin văn bản : Thủ tục WRITE( biếntậptin, bt1, bt2, , btN) : cho phép tuần tự ghi các gía trị của các biểu thức bt1, bt2, btN vào tậptin văn bản Các biểu thức bt1, bt2, btN phải thuộc kiểu đơn giản chuẩn ( nguyên, thực, ký tự, lôgic) hay kiểu chuỗi, và chúng không cần phải có kiểu giống nhau Ví dụ... Máy in cũng là một tậptin văn bản, được ngầm khai báo với tên là LST Ðể in các biểu thức bt1, bt2, , btN ra máy in, ta phải khai báo sử dụng thư viện chuẩn PRINTER, và dùng lệnh : Write(LST, bt1, bt2, , btN); So sánh tậptin văn bản với tậptin định kiểu: Các tậptin có định kiểu cho phép vừa đọc vừa ghi và truy nhập trực tiếp vào từng phần tử gần giống như thao tác với mảng Các tậptin văn bản không... khai báo St có kiểu String[9] thì sẽ bị lỗi vì sau khi đọc xong 9 ký tự đầu, máy sẽ đọc tiếp gía trị =~~100 cho biến nguyên i, nhưng vì gía trị này bắt đầu là dấu = nên không đổi ra số nguyên được Thủ tục READLN(biếntậptin, biến1, biến2, , biếnN ) đọc dữliệu cho các biế? xong sẽ đưa trỏ tậptin xuống đầu dòng dưới Ðặc biệt, lệnh READLN( biếntậptin); không đọc gì cả, chỉ đưa con trỏ tậptin xuống dòng... xuống dòng Chú ý Hàm Eof(F) cũng dùng được cho tậptin văn bản, ngoài ra còn có hàm EOLN(F) cho kết qủa là True hoặc False tùy theo con trỏ tậptin có đang ở cuối dòng hay không Khi Eof(F)=True thì Eoln(F) cũng có gía trị là True Thủ tục Seek và các hàm FileSize, FilePos không dùng cho tậptin văn bản Các tậptin văn bản ngầm định: Trong Pascal có hai biến tậptin văn bản đã được khai báo sẵn là Input và... sẽ ghi vào tậptin thành dãy như sau ( Dấu ~ hiểu là một ký tự trắng): 3~~10~aText~~4.50 Chương trình dưới đây sẽ tạo tậptin văn bản T1.TXT : Program VIDU; Var F: Text; A : Integer; B : Real; Begin A:=100; B:=1234.5; Assign(F, ’T1.TXT’); Rewrite(F); Write(F, ‘Ket qua=’ :10, A:5, B:7:2); Close(F); End Nội dung của tậptin T1.TXT là : ~~Ket qua=~~100~123.45 Như vậy, cách ghi dữliệu vào tậptin văn bản . diện cho một tập tin mà thông qua các biến đó ta có thể thực hiện các thao tác trên tập tin như : tạo tập tin, mở, đóng, xóa tập tin, ghi dữ liệu vào tập tin và đọc dữ liệu từ tập tin, Ngoài. đọc dữ liệu như tập tin có định kiểu. Ðể ghi dữ liệu, trước tiên phải khởi tạo tập tin bằng lệnh Rewrite hay mở tập tin và đưa trỏ về cuối tệp bằng lệnh Append. Sau đó ghi dữ liệu vào tập tin. nào đó trong tập tin, gọi là vị trí hiện thời. Dưới đây sẽ trình bày hai loại tập tin thường gặp là tập tin có định kiểu và tập tin văn bản. 15.2.2. Tập tin có định kiểu: Tập tin mà các phần