1 1 TIN HỌC ĐẠI CƯƠNG TIN HỌC ĐẠI CƯƠNG PHẦN 2: LẬP TRÌNH BẰNG NGÔN NGỮ C PHẦN 2: LẬP TRÌNH BẰNG NGÔN NGỮ C BÀI 8: TỆP DỮ LIỆU BÀI 8: TỆP DỮ LIỆU KHOA KHOA C¤NG NGHÖ C¤NG NGHÖ TH¤NG TIN TH¤NG TIN FACULTY OF FACULTY OF INFORMATION TECHNOLOGY INFORMATION TECHNOLOGY 2 2 Nguyễn Thị Thu Trang, SE-FIT-HUT Nguyễn Thị Thu Trang, SE-FIT-HUT TỆP DỮ LIỆU TỆP DỮ LIỆU 8.1. Khái niệm và phân loại tệp 8.1. Khái niệm và phân loại tệp 8.2. Các thao tác với tệp 8.2. Các thao tác với tệp 8.2.1. Khai báo 8.2.1. Khai báo 8.2.2. Mở tệp 8.2.2. Mở tệp 8.2.3. Truy nhập tệp văn bản 8.2.3. Truy nhập tệp văn bản 8.2.4. Truy nhập tệp nhị phân 8.2.4. Truy nhập tệp nhị phân 8.2.5. Đóng tệp 8.2.5. Đóng tệp 8.3. Bài tập 8.3. Bài tập 3 3 Nguyễn Thị Thu Trang, SE-FIT-HUT Nguyễn Thị Thu Trang, SE-FIT-HUT TỆP DỮ LIỆU TỆP DỮ LIỆU 8.1. Khái niệm và phân loại tệp 8.1. Khái niệm và phân loại tệp 8.2. Các thao tác với tệp 8.2. Các thao tác với tệp 8.2.1. Khai báo 8.2.1. Khai báo 8.2.2. Mở tệp 8.2.2. Mở tệp 8.2.3. Truy nhập tệp văn bản 8.2.3. Truy nhập tệp văn bản 8.2.4. Truy nhập tệp nhị phân 8.2.4. Truy nhập tệp nhị phân 8.2.5. Đóng tệp 8.2.5. Đóng tệp 8.3. Bài tập 8.3. Bài tập 4 4 Nguyễn Thị Thu Trang, SE-FIT-HUT Nguyễn Thị Thu Trang, SE-FIT-HUT 8.1.1. Khái niệm 8.1.1. Khái niệm Khái niệm tệp Khái niệm tệp Tệp dữ liệu ( Tệp dữ liệu ( File File ) là một tập hợp các dữ liệu ) là một tập hợp các dữ liệu có liên quan với nhau và có cùng kiểu dữ liệu. có liên quan với nhau và có cùng kiểu dữ liệu. Tệp được lưu trữ trên các thiết bị nhớ ngoài Tệp được lưu trữ trên các thiết bị nhớ ngoài (đĩa mềm, đĩa cứng, CD-ROM…) với một tên (đĩa mềm, đĩa cứng, CD-ROM…) với một tên nào đó để phân biệt với nhau. nào đó để phân biệt với nhau. 5 5 Nguyễn Thị Thu Trang, SE-FIT-HUT Nguyễn Thị Thu Trang, SE-FIT-HUT Mô hình lưu trữ dữ liệu Mô hình lưu trữ dữ liệu Bit Bit – – dữ liệu nhỏ nhất ( dữ liệu nhỏ nhất ( 0 0 hoặc hoặc 1) 1) Byte – 8 bits - Dùng để lưu trữ các ký tự, Byte – 8 bits - Dùng để lưu trữ các ký tự, số nguyên 1 byte số nguyên 1 byte Trường (Field) Trường (Field) – – tập các byte dữ liệu tập các byte dữ liệu Bản ghi (Record) – tập các trường Bản ghi (Record) – tập các trường Tệp (file) - một tập các bản ghi Tệp (file) - một tập các bản ghi Cơ sở dữ liệu (database) - tập các tệp Cơ sở dữ liệu (database) - tập các tệp 6 6 Nguyễn Thị Thu Trang, SE-FIT-HUT Nguyễn Thị Thu Trang, SE-FIT-HUT Mô hình lưu trữ dữ liệu Mô hình lưu trữ dữ liệu 7 7 Nguyễn Thị Thu Trang, SE-FIT-HUT Nguyễn Thị Thu Trang, SE-FIT-HUT 8.1.2. Phân loại tệp 8.1.2. Phân loại tệp Dựa theo bản chất dữ liệu của tệp, người Dựa theo bản chất dữ liệu của tệp, người ta chia tệp thành 2 loại: ta chia tệp thành 2 loại: Tệp văn bản Tệp văn bản Tệp nhị phân Tệp nhị phân 8 8 Nguyễn Thị Thu Trang, SE-FIT-HUT Nguyễn Thị Thu Trang, SE-FIT-HUT 8.1.2. Phân loại tệp (tiếp) 8.1.2. Phân loại tệp (tiếp) Tệp văn bản ( Tệp văn bản ( text file text file ): ): Các phần tử của nó là các kí tự gồm: Các phần tử của nó là các kí tự gồm: Chữ cái Chữ cái Chữ số Chữ số Các dấu câu Các dấu câu Các dấu cách Các dấu cách Một số kí tự điều khiển Một số kí tự điều khiển CR – CR – Carriage Return Carriage Return – có mã ASCII là 13, để về đầu – có mã ASCII là 13, để về đầu dòng dòng LF – LF – Line Feed Line Feed – có mã ASCII là 10, để xuống dòng mới – có mã ASCII là 10, để xuống dòng mới … … 9 9 Nguyễn Thị Thu Trang, SE-FIT-HUT Nguyễn Thị Thu Trang, SE-FIT-HUT 8.1.2. Phân loại tệp (tiếp) 8.1.2. Phân loại tệp (tiếp) Tệp nhị phân ( Tệp nhị phân ( binary file binary file ): ): Các phần tử của nó là các số nhị phân 0 và 1 Các phần tử của nó là các số nhị phân 0 và 1 mã hóa thông tin. mã hóa thông tin. Thông tin được mã hóa bởi các bit nhị phân Thông tin được mã hóa bởi các bit nhị phân có thể là số nguyên, số thực, các cấu trúc dữ có thể là số nguyên, số thực, các cấu trúc dữ liệu… liệu… Nếu thông tin được mã hóa là kí tự thì khi đó Nếu thông tin được mã hóa là kí tự thì khi đó tệp nhị phân trở thành tệp văn bản. Vì vậy tệp tệp nhị phân trở thành tệp văn bản. Vì vậy tệp văn bản là một trường hợp riêng của tệp nhị văn bản là một trường hợp riêng của tệp nhị phân. phân. 10 10 Nguyễn Thị Thu Trang, SE-FIT-HUT Nguyễn Thị Thu Trang, SE-FIT-HUT 8.1.3. Vai trò của tệp 8.1.3. Vai trò của tệp Khi chương trình kết thúc hoặc khi tắt máy Khi chương trình kết thúc hoặc khi tắt máy thì các thông tin trong bộ nhớ chính (RAM) thì các thông tin trong bộ nhớ chính (RAM) không còn. không còn. Muốn lưu trữ dữ liệu lâu dài để sử dụng Muốn lưu trữ dữ liệu lâu dài để sử dụng cho những lần sau ta phải lưu dữ liệu lên cho những lần sau ta phải lưu dữ liệu lên tệp, tức là để dữ liệu nằm ở bộ nhớ ngoài. tệp, tức là để dữ liệu nằm ở bộ nhớ ngoài. Tệp là phương tiện dùng để cất giữ dữ Tệp là phương tiện dùng để cất giữ dữ liệu lâu dài. liệu lâu dài. [...]... Đóng tệp ©Nguyễn Thị Thu Trang, SE-FIT-HUT 15 TỆP DỮ LIỆU 8.1 Khái niệm và phân loại tệp 8.2 Các thao tác với tệp 8.2.1 Khai báo 8.2.2 Mở tệp 8.2.3 Truy nhập tệp văn bản 8.2.4 Truy nhập tệp nhị phân 8.2.5 Đóng tệp 8.3 Bài tập ©Nguyễn Thị Thu Trang, SE-FIT-HUT 16 8.2.1 Khai báo tệp Cú pháp: FILE *ten_con_tro_tep; Ví dụ: FILE *f1, *f2; ©Nguyễn Thị Thu Trang, SE-FIT-HUT 17 TỆP DỮ LIỆU 8.1 Khái niệm... Thu Trang, SE-FIT-HUT 20 8.2.2 Mở tệp (tiếp) ©Nguyễn Thị Thu Trang, SE-FIT-HUT 21 8.2.2 Mở tệp (tiếp) Ví dụ: Với khai báo: FILE * f1, * f2, *f3; Để mở tệp c:\ sinh_vien.txt để đọc: f1 = fopen("c:\\sinh_vien.txt", "r"); Để mở tệp c:\ho_so.dat để ghi: f2 = fopen("c:\\ho_so.dat", "w"); Để mở tệp c:\abc.txt để vừa đọc và ghi: f3 = fopen("c:\\abc.txt", "r+"); ©Nguyễn Thị Thu Trang, SE-FIT-HUT 22 8.2.2... thuc.\n"); ©Nguyễn Thị Thu Trang, SE-FIT-HUT 31 do { printf("? "); scanf("%d",&soTK); if (soTK != 0) { scanf("%s %lf",tenChuTK,&soDuTK); fprintf(cfPtr, "%d %s %.2f\n", soTK, tenChuTK, soDuTK); } } while (soTK != 0); fclose(cfPtr); printf("\nDa ghi vao tep thanh cong!"); } //ket thuc else getch(); } ©Nguyễn Thị Thu Trang, SE-FIT-HUT 32 ©Nguyễn Thị Thu Trang, SE-FIT-HUT 33 Hàm fprintf có thể ghi cả xâu... ©Nguyễn Thị Thu Trang, SE-FIT-HUT 18 8.2.2 Mở tệp Cú pháp: ten_con_tro_tep = fopen(ten_tep,che_đo_mo_tep); Ten_tep: Đường dẫn đến tệp cần mở Che_do_mo_tep: Tùy thuộc vào mục đích sử dụng tệp và bản chất dữ liệu trên tệp Kết quả trả về: Nếu mở thành công Trả về một con trỏ tệp tương ứng với tệp đã được mở Nếu không Trả về con trỏ NULL ©Nguyễn Thị Thu Trang, SE-FIT-HUT 19 8.2.2 Mở tệp (tiếp)... theo byte) sẽ bằng số byte đã được đọc từ tệp hoặc ghi lên tệp ©Nguyễn Thị Thu Trang, SE-FIT-HUT 13 TỆP DỮ LIỆU 8.1 Khái niệm và phân loại tệp 8.2 Các thao tác với tệp 8.2.1 Khai báo 8.2.2 Mở tệp 8.2.3 Truy nhập tệp văn bản 8.2.4 Truy nhập tệp nhị phân 8.2.5 Đóng tệp 8.3 Bài tập ©Nguyễn Thị Thu Trang, SE-FIT-HUT 14 8.2 Các thao tác với tệp Các thao tác với tệp phải tuân thủ theo trình tự sau:... và để ghi, ta dùng lệnh: f2 = fopen("c:\\ho_so.dat", "wb"); ©Nguyễn Thị Thu Trang, SE-FIT-HUT 23 TỆP DỮ LIỆU 8.1 Khái niệm và phân loại tệp 8.2 Các thao tác với tệp 8.2.1 Khai báo 8.2.2 Mở tệp 8.2.3 Truy nhập tệp văn bản 8.2.4 Truy nhập tệp nhị phân 8.2.5 Đóng tệp 8.3 Bài tập ©Nguyễn Thị Thu Trang, SE-FIT-HUT 24 8.2.3 Truy nhập tệp văn bản Đọc dữ liệu từ tệp Các hàm: fscanf(), fgets(),... tệp tiêu đề stdio.h ©Nguyễn Thị Thu Trang, SE-FIT-HUT 25 a Đọc dữ liệu từ tệp văn bản Hàm fscanf(): int fscanf(FILE* con_tro_tep, xau_dinh_dang, [danh_sach_dia_chi]); Kết quả trả về: Nếu thành công Trả về một giá trị nguyên là số byte đọc được từ tệp Ngược lại Trả về giá trị EOF Ví dụ: fscanf(fptr, “%d %c”,&a, &c); ©Nguyễn Thị Thu Trang, SE-FIT-HUT 26 a Đọc dữ liệu từ tệp văn bản (tiếp) Hàm... Thị Thu Trang, SE-FIT-HUT 29 b Ghi dữ liệu lên tệp văn bản Hàm fprintf() Cú pháp: int fprintf(FILE* con_tro_tep, xau_đinh_dang, [danh_sach_tham_so]); Hàm fprintf() ghi dữ liệu lên một tệp được chỉ định trong tham số con_tro_tep Kết quả trả về: Nếu thành công Trả về một giá trị nguyên là số bytes dữ liệu đã ghi lên tệp Ngược lại Trả về giá trị EOF ©Nguyễn Thị Thu Trang, SE-FIT-HUT 30 Ví dụ #include... của một tệp rất nhiều ©Nguyễn Thị Thu Trang, SE-FIT-HUT 11 8.1.5 Tổ chức của tệp Số lượng phần tử trong tệp không bị giới hạn Mỗi tệp đều chứa Phần tử cuối cùng được gọi là phần tử kí hiệu kết thúc tệp (End Of File indicator – EOF) Hệ điều hành sẽ tự động giúp ta tìm ra được vị trí lưu trữ phần tử đầu tiên của tệp trên đĩa ©Nguyễn Thị Thu Trang, SE-FIT-HUT 12 8.1.6 Con trỏ tệp Để truy cập vào một... scanf("%d",&soTK); if (soTK != 0) { fflush(stdin); gets(tenChuTK); scanf("%lf",&soDuTK); fprintf(cfPtr, "%d %s %.2f\n", soTK, tenChuTK, soDuTK); } } while (soTK != 0); ©Nguyễn Thị Thu Trang, SE-FIT-HUT 34 ©Nguyễn Thị Thu Trang, SE-FIT-HUT 35 b Ghi dữ liệu lên tệp văn bản (tiếp) Hàm fputs(): Cú pháp: int fputs(char* xau_ki_tu, FILE* con_tro_tep); Hàm fputs() sẽ ghi nội dung của xau_ki_tu lên tệp tương ứng với . trường Tệp (file) - một tập các bản ghi Tệp (file) - một tập các bản ghi Cơ sở dữ liệu (database) - tập các tệp Cơ sở dữ liệu (database) - tập các tệp 6 6 Nguyễn Thị Thu Trang, SE-FIT-HUT Nguyễn. SE-FIT-HUT Nguyễn Thị Thu Trang, SE-FIT-HUT Mô hình lưu trữ dữ liệu Mô hình lưu trữ dữ liệu 7 7 Nguyễn Thị Thu Trang, SE-FIT-HUT Nguyễn Thị Thu Trang, SE-FIT-HUT 8.1.2. Phân loại tệp 8.1.2 CD-ROM…) với một tên (đĩa mềm, đĩa cứng, CD-ROM…) với một tên nào đó để phân biệt với nhau. nào đó để phân biệt với nhau. 5 5 Nguyễn Thị Thu Trang, SE-FIT-HUT Nguyễn Thị Thu Trang, SE-FIT-HUT Mô