intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

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)

Chia sẻ: Lavie Lavie | Ngày: | Loại File: PDF | Số trang:34

165
lượt xem
12
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

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.

Chủ đề:
Lưu

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)

  1. 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
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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 }
  7. 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
  8. 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
  9. 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
  10. 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
  11. 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
  12. 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
  13. 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
  14. 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.
  15. 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
  16. 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);
  17. 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.
  18. 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;
  19. (*---------------------------------------------*) 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
  20. 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.
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2