Bài giảng Ngôn ngữ lập trình Pascal: Chương 14 - Kiểu dữ liệu có cấu trúc - Kiểu tệp (File)
lượt xem 12
download
Dưới đây là bài giảng Ngôn ngữ lập trình Pascal: Chương 14 - Kiểu dữ liệu có cấu trúc - Kiểu tệp (File). Mời các bạn tham khảo bài giảng để hiểu rõ hơn những nội dung về khái niệm tệp, cấu trúc và phân loại tệp, mở tệp mới để cất dữ liệu, đọc dữ liệu từ một tệp đã có và một số nội dung khác.
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Bài giảng Ngôn ngữ lập trình Pascal: Chương 14 - Kiểu dữ liệu có cấu trúc - Kiểu tệp (File)
- Chương 14 Kiểu dữ liệu có cấu trúc: Kiểu tệp (File) Có 4 kiểu dữ liệu có cấu trúc: ARRAY, SET, RECORD, FILE 14.1
- Nội dung học của chương: Tệp I. Khái niệm về tệp II. Cấu trúc và phân loại tệp III. Mở tệp mới để cất dữ liệu IV. Đọc dữ liệu từ một tệp đã có V. Tệp truy nhập trực tiếp VI. Các thủ tục và hàm xử lý tệp của Turbo PASCAL VII. Tệp văn bản (TEXT Files) VIII. Tệp không định kiểu (UnTyped File) 14.2
- I. Khái niệm về tệp Tệp (hay tệp dữ liệu) nói chung là tập hợp các phần tử dữ liệu có liên quan với nhau và có cùng kiểu dữ liệu, được lưu trữ trong bộ nhớ ngoài (băng từ, đĩa mềm, đĩa cứng ...), mỗi tệp có một tên. Tiếng Anh: File, tiếng Pháp: Fichier được dùng để chỉ các ngăn đựng hồ sơ treo, tủ phiếu thư viện 14.3
- Mỗi phiếu = 1 bản ghi Thí dụ Tên sách: PASCAL Tủ phiếu thư viện Tên tác giả: Q.T. Ngọc Tệp=hộp đựng các phiếu ghi NXB: Giáo dục .... A B C Tên ... ... M ... ... Z Tên tệp 14.4 Mỗi ngăn kéo = 1 tệp Tủ phiếu = đĩa
- So sánh với định nghĩa ARRAY Giống nhau: dãy các phần tử cùng kiểu Khác nhau: ARRAY có số phần tử xác định trước. FILE có số phần tử không xác định trước. ARRAY lưu trữ dữ liệu ở bộ nhớ trong RAM nên không giữ lại được dữ liệu khi mất điện hay khi kết thúc chương trình. FILE lưu trữ dữ liệu ở bộ nhớ ngoài nên giữ được dữ liệu khi mất điện hoặc kết thúc CT. Muốn lưu trữ hồ sơ cán bộ ... phải dùng FILE14.5
- Khai báo tệp TYPE Kiểu_tệpT = FILE OF kiểu_phần_tử; VAR Biến_tệp: Kiểu_tệpT; Mỗi ô là một phần tử của tệp, với dấu hiệu kết thúc tệp... End of File TYPE {Định nghĩa các kiểu tệp } FileInteger = FILE OF integer; FileReal = FILE OF real; FileBoolean = FILE OF boolean; VAR {Khai báo các biến tệp } F1,F2: FileInteger; 14.6 F3:FileReal; { F3 là tệp các số thực }
- TYPE NhânSự = RECORD Tên : String[30]; Tuổi: byte; Lương : real; END; FNhânSự = FILE OF NhânSự; VAR FNS: FNhânSự; {FNS:Tệp các bản ghi nhân sự} F5 : FILE OF Char; {Khai báo trực tiếp} F6 : FILE OF ARRAY [1..5] OF INTEGER; 14.7
- II. Cấu trúc và phân loại tệp Cách truy nhập vào các phần tử của tệp: Các phần tử của tệp không có tên hay kí hiệu như ARRAY và RECORD. Tại mỗi thời điểm, ta chỉ có thể truy nhập (ghi hoặc đọc) vào một phần tử nhất định của tệp thông qua vị trí của một cửa sổ. Hãy hình dung cuộn phim và ống kính. Mỗi tệp F đều có một dấu hiệu đặc biệt đánh dấu kết thúc tệp. Hàm EOF(F) kiểu Boolean báo cho ta biết vị trí cửa sổ tệp đã đến vị trí cuối tệp chưa ? EOF(F) Cửa sổ nhìn tệp 14.8
- Cách phân loại tệp: theo cách truy cập Truy cập tuần tự: muốn vào phần tử thứ n bắt buộc phải đi qua n-1 phần tử trước đó. Thí dụ: băng từ. Trong PASCAL, ngầm định là tệp tuần tự. Truy cập trực tiếp: là tệp có thể đặt cửa sổ tệp vào bất kì phần tử nào. Thí dụ: đĩa mềm, đĩa cứng... Lí do: đầu từ ghi/đọc có thể di chuyển thẳng vào vị trí mong muốn. 14.9
- III. Mở tệp mới để cất dữ liệu Gồm các bước cơ bản: ASSIGN(Biến_Tệp, Tên_Tệp); Gán tên tệp REWRITE(Biến_Tệp); Mở tệp mới ... ...Write(Biến tệp, các giá trị); CLOSE(Biến_tệp); Đóng tệp lại hoặc ASSIGN(FileVar, FileName); REWRITE(FileVar); ...Write(FileVar, Item1, Item2,...); CLOSE(FileVar); Sau thủ tục Rewrite, cửa sổ tệp nằm ở vị trí đầu tiên của tệp để sẵn sàng nhận giá trị ghi vào. 14.10
- Tên tệp *.PAS các tệp chứa chương trình Pascal *.FOR các tệp chứa chương trình FORTRAN, *.BAS chứa chương trình viết bằng BASIC, *.ASM là các chưng trình viết bằng ASSEMBLER, *.DOC chứa tệp văn bản tài liệu, (DOCument) *.TXT chứa tệp văn bản (TeXT) *.COM và *.EXE là các tệp chứa chưng trình dưới dạng mã máy có thể chạy ngay được trên máy vi tính IBM-PC. *.DAT chứa các dữ liệu cần xử lý (DATa). *.SAM chứa các mẫu (SAMple) tín hiệu điện trong xử lý tín hiệu số. ........ 14.11
- Ghi giá trị vào tệp: WRITE(FileVar, Item1, Item2, ...., ItemN); WRITE(Biến_Tệp, Các giá trị cần ghi vào); với Item1, Item2,... ItemN: các hằng, biến, biểu thức, Các Item phải có cùng kiểu phần tử của tệp. Thí dụ: Ghi các số nguyên vào tệp F1 WRITE(F1, 3, I+2*J, K, 5); Mỗi một lần ghi xong một giá trị, cửa sổ của tệp sẽ chuyển sang vị trí mới tiếp theo. 14.12
- Thí dụ 14.3 Tạo một tệp chứa các số nguyên từ 1 đến 100 với tên tệp trên bộ nhớ ngoài (đĩa mềm ...) là NGUYEN.DAT. PROGRAM TAO_TEP_1; VAR I:integer; F: File OF integer; Begin ASSIGN(F, 'NGUYEN.DAT'); REWRITE(F); FOR I:=1 TO 100 DO Write(F, I); CLOSE(F); End. 14.13
- PROGRAM TAO_TEP_2; TYPE FI= File OF integer; St30 = String[30]; VAR MyFile: FI; FileName: St30; (*-------------------------------------------*) Procedure Tao_File(Var F: FI; Ten: St30); Var I :integer; Begin ASSIGN(F, Ten); REWRITE(F); For i:=1 To 100 DO Write(F, I); CLOSE(F); End; (*-------------------------------------------*) BEGIN Write(' Ten Tep : '); Readln(FileName); Tao_File(MyFile, FileName); 14.14 END.
- IV. Đọc dữ liệu từ một tệp đã có Các bước cơ bản đối với một biến tệp F ASSIGN(F, Tên_Tệp); Gán tên tệp RESET(F); Mở tệp ra để đọc WHILE NOT EOF(F) DO Begin READ(F, X); Đọc một phần tử của tệp ...... Xử lý biến X, nếu cần ... End; CLOSE(F); Đóng tệp lại. Sau thủ tục Reset(F), cửa sổ của tệp F nằm ở vị trí đầu tiên của tệp để sẵn sàng đọc giá trị thứ nhất. Mỗi khi đọc cần phải thử xem cửa sổ có nằm cuối tệp ? 14.15
- Thí dụ 14.5 Đọc giá trị thứ nhất và thứ ba cho hai biến A và B Program DOC_TEP_1; Var A, B: integer; FI: File OF integer; Begin ASSIGN(FI, 'NGUYEN.DAT'); RESET(FI); Read(FI, A);(* Đọc phần tử thứ nhất của tệp ra biến A *) Read(FI, B);(* Đọc phần tử thứ hai của tệp ra biến B *) Read(FI, B);(* Đọc phần tử thứ ba của tệp ra biến B *) (* Lúc này B không giữ giá trị thứ hai nữa *) CLOSE(FI); End. 14.16 Thay bằng một lệnh Read(FI, A, B, B);
- Thí dụ 14.6 Program DOC_TEP_2; Var I, SoPhanTu: Integer; FI: File OF integer; FileName: String[20]; Begin Write(' Ten tep chua cac so nguyen : '); Readln(FileName); SoPhanTu :=0; ASSIGN(FI, FileName);RESET(FI); WHILE NOT EOF(FI) DO Begin Read(FI, I); Writeln(I); SoPhanTu := SoPhanTu + 1; End; CLOSE(FI); Writeln('So Ptu cua tep ',FileName, ' la ', SoPhanTu); 14.17 End.
- Thí dụ 14.7 TYPE FI : File OF Integer; VAR FS, FD: FI;(* FS:File Source, FD:File Destination *) Name1, Name2 : String[30]; (*--------------------------------------------*) Procedure Copy_File_Int(Var Source, Destination: FI); Var I : Integer; Begin Reset(Source); Rewrite(Destination); While Not EOF(Source) Do Begin Read(Source, I); Write(Destination, I); End; Close(Source); Close(Destination); 14.18 End;
- (*---------------------------------------------*) Begin Write('Copy from File : '); Readln(Name1); Write(' to File : '); Readln(Name2); Assign(FS, Name1); Assign(FD, Name2); Copy_File_Int(FS, FD); Writeln('End OF Copy !'); End. Chương trình làm gì ? 14.19
- V. Tệp truy nhập trực tiếp Với tệp chứa trên đĩa mềm hoặc đĩa cứng, ta có thể truy nhập trực tiếp vào phần tử thứ n. Thủ tục SEEK(FileVar, No); sẽ đặt cửa sổ của tệp vào đúng vị trí thứ n. Lưu ý: phần tử đầu tiên của tệp đánh số là 0. Sau đó có thể dùng Read hoặc Write đối với ptử n Thí dụ 14.8: Giả sử một tệp đã chứa 100 số nguyên từ 1 đến 100. Ta phải kiểm tra xem phần tử thứ 2 (đếm từ 0) của tệp có giá trị bằng 3 không, nếu14.20 không bằng 3 thì phải sửa lại.
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng Ngôn ngữ lập trình Java căn bản
115 p | 351 | 104
-
Bài giảng Ngôn ngữ lập trình C++: Chương 1 - Trần Minh Châu
17 p | 252 | 54
-
Bài giảng Ngôn ngữ lập trình C# - Nguyễn Hồng Phương
409 p | 215 | 41
-
Bài giảng Ngôn ngữ lập trình C và C++ (Phần 1: Ngôn ngữ lập trình C) - Chương 1: Ôn tập một số nội dung chính của NNLT C
31 p | 164 | 13
-
Bài giảng Ngôn ngữ lập trình bậc cao - Th.S Đoàn Thị Thu Huyền
44 p | 151 | 10
-
Bài giảng Ngôn ngữ lập trình C: Chương 1 - TS. Nguyễn Thị Hiền
12 p | 63 | 9
-
Bài giảng Ngôn ngữ lập trình - Nguyễn Văn Linh
109 p | 120 | 8
-
Bài giảng Ngôn ngữ lập trình C - Chương 1: Giới thiệu ngôn ngữ C
4 p | 106 | 8
-
Bài giảng Ngôn ngữ lập trình C và C++: Bài 1 - TS. Đỗ Đăng Khoa
53 p | 113 | 7
-
Bài giảng Ngôn ngữ lập trình C và C++ (Phần 2: Ngôn ngữ lập trình C++) - Chương 5: Các lớp nhập/xuất trong C++
19 p | 132 | 7
-
Bài giảng Ngôn ngữ lập trình C và C++ (Phần 2: Ngôn ngữ C++) - Chương 2: Giới thiệu về ngôn ngữ lập trình C++
49 p | 138 | 7
-
Bài giảng Ngôn ngữ lập trình C: Chương 1 - PhD. Nguyễn Thị Huyền
12 p | 56 | 7
-
Bài giảng Ngôn ngữ lập trình C và C++ (Phần 2: Ngôn ngữ lập trình C++) - Chương 3: Lớp và đối tượng
52 p | 113 | 5
-
Bài giảng Ngôn ngữ lập trình C và C++: Bài 4 - TS. Đỗ Đăng Khoa
40 p | 95 | 5
-
Bài giảng Ngôn ngữ lập trình C/C++ (Bài giảng tuần 1) – Nguyễn Hải Châu
7 p | 147 | 5
-
Bài giảng Ngôn ngữ lập trình C và C++ (Phần 2: Ngôn ngữ lập trình C++) - Chương 6: Mẫu (template)
27 p | 86 | 4
-
Bài giảng Ngôn ngữ lập trình: Bài 1 - Lý Anh Tuấn
30 p | 82 | 4
-
Bài giảng Ngôn ngữ lập trình C: Giới thiệu môn học - TS. Nguyễn Thị Hiền
7 p | 55 | 2
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn