1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng Tin học đại cương (Phần 3) - Chương 7: Tệp tin

25 17 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

Nội dung

Bài giảng Tin học đại cương (Phần 3) - Chương 7: Tệp tin cung cấp cho học viên những kiến thức về khái niệm cơ bản, các thao tác với tệp tin, chế độ mở tệp, bản chất của tệp, truy nhập tệp tin văn bản, truy nhập tệp tin nhị phân,... Mời các bạn cùng tham khảo chi tiết nội dung bài giảng!

Phần III Chương Tệp tin GV: Nguyễn Thị Thùy Liên Email: lien.nguyenthithuy@phenikaa-uni.edu.vn Nội dung Khái niệm Các thao tác với tệp tin Truy nhập tệp tin văn Truy nhập tệp tin nhị hân Nội dung Khái niệm Các thao tác với tệp tin Truy nhập tệp tin văn Truy nhập tệp tin nhị hâ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 dung để đạ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 oSau đọ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ú 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: o Dữ liệu tập tin chuỗi ký tự tổ chức thành dòng o Mỗi dòng kết thúc ký tự xuống dòng “\n” o Ký tự EOF: mã ASCII 26 • Tệp nhị phân: o Dữ liệu tổ chức thành dãy byte liên tục o 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 tin văn Truy nhập tệp tin nhị hâ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 cần phải mở tệp • Để mở tệp sử dụng hàm fopen() tenConTroTep = fopen(tenTep, cheDoMo); • Trong đó: o tenTep xâu ký tự chứa đường dẫn tới tệp tin o cheDoMo xâu ký tự định chế độ mở tệp thao tác với tệp o 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 “a” 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 Mở tệp có để ghi, khơng đọc Nếu tệp tồn xóa tạo tệp 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 “w+” 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 “a+” Mở tệp để ghi thêm liệu vào cuối tệp Tệp tạo chưa tồn “r” “w” Bản chất tệp • Khi định chế độ mở tệp, ta chất tệp Ký hiệu Bản chất tệp “b” “t” 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) o Kiểm tra vị trí trỏ cuối tệp chưa o Trả = sai, ≠ • void rewind(FILE *fp) o 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 tin văn Truy nhập tệp tin nhị hân 14 Truy nhập tệp văn • int fscanf(FILE *fp, char[] xauDinhDang, danh_sach_dia_chi) o Đọc liệu từ tệp o Sử dụng tương tự scanf() o 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ỏ o Hạn chế: Cần biết định dạng liệu tệp • int fflush(FILE *fp) o Xóa đệm đọc tệp o Nên thực trước dùng hàm fscanf() 15 Truy nhập tệp văn (tiếp) • char* fgets(char[] str, int n, FILE* fp) o Đọc tối đa n-1 ký tự, gặp dấu xuống dòng tệp fp gán cho str o Tự động thêm ký tự “\n” o Trả trỏ tới xâu str thành công, ngược lại trả NULL • int fgetc(FILE *fp) o Đọc ký tự tệp o Trả mã ASCII ký tự thành công, ngược lại trả EOF 16 Truy nhập tệp văn (tiếp) •int fprintf(FILE *fp, char[] xauDinhDang, danh_sach_tham_so) o Ghi liệu lên tệp o Tương tự printf() o Trả số byte ghi thành cơng, ngược lại trả số < • int fputs(char[] str, FILE *fp) o Ghi xâu lên tệp o 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 (tiếp) •int fputc(int ch, FILE *fp) o Ghi ký tự lên tệp o Trả mã ASCII ký tự ghi thành công, o Ngược lại trả EOF 18 Ví dụ - Mở ghi 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ở ghi 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 Nội dung Khái niệm Các thao tác với tệp tin Truy nhập tệp tin văn Truy nhập tệp tin nhị hân 21 Truy nhập tệp nhị phân • int fread(void *ptr, int smem, int nmems, FILE *fp) o Đọc liệu tệp o ptr trỏ tới vùng nhớ chứa liệu đọc oVùng nhớ phải có kích thước >= smem*nmems o smem: kích thước phần tử o nmems: số phần tử muốn đọc o Trả tổng số phần tử đọc Nếu giá trị trả nhỏ nmems có lỗi gặp EOF 22 Truy nhập tệp nhị phân • int fwrite(void *ptr, int smem, int nmems, FILE *fp) o Ghi liệu vào tệp o ptr trỏ tới vùng nhớ chứa liệu cần ghi o smem: kích thước phần tử muốn ghi o nmems: số phần tử muốn ghi o 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 Ví dụ - Mở ghi lên 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++; } 25 fclose(fp); ... Các thao tác với tệp tin Truy nhập tệp tin văn Truy nhập tệp tin nhị hân Nội dung Khái niệm Các thao tác với tệp tin Truy nhập tệp tin văn Truy nhập tệp tin nhị hân Khái niệm ? ?Tệp tin tập hợp byte... -1 Nội dung Khái niệm Các thao tác với tệp tin Truy nhập tệp tin văn Truy nhập tệp tin nhị hâ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. .. lỗi Mở tệp có để ghi, khơng đọc Nếu tệp tồn xóa tạo tệp 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 “w+” Mở tệp để vừa

Ngày đăng: 26/12/2021, 09:18

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w