1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Bài giảng tin học đại cương bài 11 bùi trọng tùng

13 1 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 13
Dung lượng 170,27 KB

Nội dung

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG TIN HỌC ĐẠI CƯƠNG Bài 11 Tệp tin Nội dung Khái niệm Các thao tác với tệp tin Truy nhập tệp văn Truy nhập tệp nhị phân Nội dung Khái niệm Các thao tác với tệp tin Truy nhập tệp văn Truy nhập tệp nhị phân Khái niệm • Tệp tin tập hợp byte liên tục lưu trữ gán tên gọi • Biến tập tin: biến thuộc kiểu liệu tập tin dùng để đại diện cho tập tin • Con trỏ tập tin: trỏ đến vị trí tập tin mà việc đọc/ghi thông tin xảy – Sau đọc/ghi xong liệu, trỏ chuyển dịch thêm phần tử phía cuối tập tin • Ký tự kết thúc tệp tin (EOF – End Of File): ký tự cuối báo kết thúc tệp tin Phân loại • Khi xử lý tệp tin chương trình xem xét chuỗi byte với cách nhìn khác nhau, có ứng xử khác với liệu • Tệp văn bản: – Dữ liệu tập tin chuỗi ký tự tổ chức thành dòng – Mỗi dòng kết thúc ký tự xuống dòng ‘\n’ – Ký tự EOF: mã ASCII 26 • Tệp nhị phân: – Dữ liệu tổ chức thành dãy byte liên tục – Ký tẹ EOF: byte có giá trị -1 Nội dung Khái niệm Các thao tác với tệp tin Truy nhập tệp văn Truy nhập tệp nhị phân Các thao tác với tệp tin • Trong C truy nhập tệp phải thông qua trỏ tệp • Các hàm thao tác với tệp tin khai báo tệp tiêu đề stdio.h • Một biến trỏ tệp (file pointer) khai báo sau: FILE *tenConTroTep; • Ví dụ FILE * f1, * f2; Mở tệp tin • Muốn làm việc với tệp trước hết ta phải mở tệp • Để mở tệp ta dùng hàm fopen() tenConTroTep = fopen(tenTep,cheDoMo); • Trong đó: – tenTep xâu ký tự chứa đường dẫn tới tệp tin – cheDoMo xây ký tự định chế độ mở tệp thao tác với tệp – fopen() trả giá trị NULL có lỗi mở tệp • Ví dụ: FILE *fp; fp = fopen (“C:\TDC\test.dat”, “rb”); Chế độ mở tệp Chế độ Mục đích sử dụng “r” Mở tệp có để đọc, không ghi Nếu tệp không tồn tại, hàm fopen() trả lại trạng thái lỗi “w” Mở tệp có để đọc, khơng ghi Nếu tệp không tồn tại, hàm fopen() trả lại trạng thái lỗi “a” Mở tệp để ghi thêm liệu vào cuối tệp Nếu tệp chưa tồn tại, tạo “r+” Mở tệp để vừa đọc vừa ghi Nếu tệp chưa tồn báo lỗi Mở tệp để vừa đọc vừa ghi Nếu tệp tồn tại, nội dung bị xóa hết “w+” “a+” Mở tệp để ghi thêm liệu vào cuối tệp Tệp tạo chưa tồn Bản chất tệp • Khi định chế độ mở tệp, ta chất tệp Ký hiệu “b” “t” Bản chất tệp Tệp nhị phân Tệp văn • Khi mở tệp, không rõ chất liệu tệp C ngầm hiểu tệp văn 10 Ví dụ • Mở tệp văn để đọc fp = fopen(“diem.txt”, “rt”); • Mở tệp văn để ghi đè fp = fopen(“diem.txt”, “wt”); • Mở tên văn để vừa đọc vừa ghi thêm fp = fopen(“C:\TDC\diem.txt”, “a+t”); • Mở tệp nhị phân để vừa đọc vừa ghi fp = fopen(“D:\VD\diem.dat”, “r+b”); 11 Đóng tệp tin • Đóng tệp đảm bảo thay đổi liệu lưu lại tệp • Để đóng tệp ta dùng hàm fclose() có cú pháp khai báo fclose(tenConTroTep); • Kết trả về: đóng tệp thành cơng Ngược lại có lỗi 12 Các thao tác khác • int feof(FILE *fp) – Kiểm tra vị trí trỏ cuối tệp chưa – Trả = sai, ≠ • void rewind(FILE *fp) – Di chuyển trỏ vị trí đầu tệp 13 Nội dung Khái niệm Các thao tác với tệp tin Truy nhập tệp văn Truy nhập tệp nhị phân 14 Truy nhập tệp văn • int fscanf(FILE *fp, char[] xauDinhDang, danh_sach_dia_chi) – Đọc liệu từ tệp – Sử dụng tương tự scanf() – Trả số lượng giá trị đọc theo xâu định dạng hàm thực thành công, ngược lại trả giá trị nhỏ – Hạn chế: Cần biết định dạng liệu tệp • int fflush(FILE *fp) – Xóa đệm đọc tệp – Nên thực trước dùng hàm fscanf() 15 Truy nhập tệp văn bản(tiếp) • char* fgets(char[] str, int n, FILE* fp) – Đọc tối đa n-1 ký tự, gặp dấu xuống dòng tệp fp gán cho str – Tự động thêm ký tự “\n” – Trả trỏ tới xâu str thành cơng, ngược lại trả NULL • int fgetc(FILE *fp) – Đọc ký tự tệp – Trả mã ASCII ký tự thành công, ngược lại trả EOF 16 Truy nhập tệp văn bản(tiếp) • int fprintf(FILE *fp, char[] xauDinhDang, danh_sach_tham_so) – Ghi liệu lên tệp – Tương tự printf() – Trả số byte ghi thành công, ngược lại trả số < • int fputs(char[] str, FILE *fp) – Ghi xâu lên tệp – Trả mã ASCII ký tự cuối ghi thành công, ngược lại trả số < 17 Truy nhập tệp văn bản(tiếp) • int fputc(int ch, FILE *fp) – Ghi ký tự lên tệp – Trả mã ASCII ký tự ghi thành công, ngược lại trả EOF 18 Ví dụ - Mở ghi lên tệp văn fp = fopen("diem.txt","w"); if(fp == NULL){ printf("Error: Could not open file."); return 0; } for(i = 0; i < soSV; i++){ nbytes = fprintf(fp,"%-4d%-25s%-4.1f%-4.1f\n", bangDiem[i].stt, bangDiem[i].hoTen, bangDiem[i].diemQT, bangDiem[i].diemCK); if (nbytes < 0){ printf("Error: Could not write to file."); break; } } fclose(fp); 19 Ví dụ - Mở đọc liệu tệp văn fp = fopen("diem.txt","r"); if(fp == NULL){ printf("Error: Could not open file."); return 0; } char line[1024]; while (!feof(fp)) if(fgets(line, 1024, fp) != NULL) printf("%s", line); fclose(fp) 20 10 Nội dung Khái niệm Các thao tác với tệp tin Truy nhập tệp văn Truy nhập tệp nhị phân 21 Truy nhập tệp nhị phân • int fread(void *ptr, int smem, int nmems, FILE *fp) – Đọc liệu tệp – ptr trỏ tới vùng nhớ chứa liệu đọc Vùng nhớ phải có kích thước >= smem*nmems – smem: kích thước phần tử – nmems: số phần tử muốn đọc – Trả tổng số phần tử đọc Nếu giá trị trả nhỏ nmems có lỗi gặp EOF 22 11 Truy nhập tệp nhị phân • int fwrite(void *ptr, int smem, int nmems, FILE *fp) – Đọc liệu tệp – ptr trỏ tới vùng nhớ chứa liệu cần ghi – smem: kích thước phần tử muốn ghi – nmems: số phần tử muốn ghi – Trả tổng số phần tử ghi Nếu giá trị trả nhỏ nmems có lỗi 23 Ví dụ - Mở ghi lên tệp nhị phân fp = fopen("diem.dat","wb"); if(fp == NULL){ printf("Error: Could not open file."); return 0; } for (i = 0; i < soSV; i++){ ret = fwrite(&bangDiem[i], sizeof(DiemSV), 1, fp); if (ret < 1){ printf("Error: Could not write to file."); break; } } fclose(fp); 24 12 Ví dụ - Mở liệu tệp nhị phân fp = fopen("diem.dat","rb"); if(fp == NULL){ printf("Error: Could not open file."); return 0; } DiemSV ketQua[MAX]; i = 0; soSV = 0; while (!feof(fp)){ if(fread(&ketQua[i], sizeof(DiemSV), 1, fp) < 1) break; i++; soSV++; } fclose(fp); 25 Thảo luận 26 13

Ngày đăng: 23/08/2023, 15:03