Bài giảng Tin học đại cương - Phần III, Chương 7: Tệp tin - Nguyễn Thị Thùy Liên

Phần III  
Chương 7 Tệp tin  
GV: Nguyễn Thị Thùy Liên  
Email: lien.nguyenthithuy@phenikaa-uni.edu.vn  
1
Nội dung  
Khái niệm cơ bản  
Các thao tác với tệp tin  
Truy nhập tệp tin văn bản  
Truy nhập tệp tin nhị hân  
2
Nội dung  
Khái niệm cơ bản  
Các thao tác với tệp tin  
Truy nhập tệp tin văn bản  
Truy nhập tệp tin nhị hân  
3
1. Khái niệm cơ bản  
Tệp tin là tập hợp các byte liên tục được lưu trữ và được gán  
tên gọi.  
Biến tập tin: là một biến thuộc kiểu dữ liệu tập tin dung để đại  
diện cho một tập tin.  
Con trỏ tập tin: con trỏ chỉ đến vị trí của tập tin mà tại đó việc  
đọc/ghi thông tin sẽ xảy ra  
oSau khi đọc/ghi xong dữ liệu, con trỏ sẽ chuyển dịch thêm một phần tử  
về phía cuối tập tin  
Ký tự kết thúc tệp tin (EOF – End Of File): ký tự cuối cùng  
báo kết thú tệp tin  
4
Phân loại  
Khi xử lý tệp tin chương trình có thể xem xét chuỗi byte với cách  
nhìn khác nhau, có những ứng xử khác nhau với dữ liệu  
Tệp văn bản:  
o Dữ liệu của tập tin là chuỗi ký tự được tổ chức thành dòng  
o Mỗi dòng được kết thúc bằng ký tự xuống dòng “\n”  
o Ký tự EOF: mã ASCII là 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  
5
Nội dung  
Khái niệm cơ bản  
Các thao tác với tệp tin  
Truy nhập tệp tin văn bản  
Truy nhập tệp tin nhị hân  
6
Các thao tác với tệp tin  
Trong C truy nhập tệp phải thông qua con trỏ tệp  
Các hàm thao tác với tệp tin được khai báo trong tệp tiêu đề  
stdio.h  
Một biến con trỏ tệp (file pointer) được khai báo như sau:  
FILE *tenConTroTep;  
Ví dụ  
FILE *f1, *f2;  
7
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 là xâu ký tự chứa đường dẫn tới tệp tin  
o cheDoMo là xâu ký tự chỉ định chế độ mở tệp khi thao tác với tệp  
o fopen() trả về giá trị NULL nếu có lỗi mở tệp  
Ví dụ: FILE *fp;  
fp = fopen (“C:\TDC\test.dat”, “rb”);  
8
Chế độ mở tệp  
Chế độ  
“r”  
Mục đích sử dụng  
Mở tệp đã có để đọc, không được ghi. Nếu tệp không tồn tại, hàm  
fopen() sẽ trả lại trạng thái lỗi.  
Mở tệp đã có để ghi, không được đọc. Nếu tệp đã tồn tại thì xó a  
và tạo tệp mới  
“w”  
Mở tệp để ghi thêm dữ liệu vào cuối tệp. Nếu tệp chưa tồn tại, nó  
sẽ được tạo mới  
“a”  
Mở tệp để vừa đọc vừa ghi. Nếu tệp chưa tồn tại thì sẽ báo lỗi  
“r+”  
“w+”  
“a+”  
Mở tệp để vừa đọc vừa ghi. Nếu tệp đã tồn tại, nội dung của nó sẽ  
bị xóa hết.  
Mở tệp để ghi thêm dữ liệu vào cuối tệp. Tệp mới sẽ được tạo nếu  
nó chưa tồn tại.  
9
Bản chất của tệp  
Khi chỉ định chế độ mở tệp, ta cũng có thể chỉ ra bản chất  
của tệp  
Ký hiệu  
Bản chất của tệp  
“b”  
“t”  
Tệp nhị phân  
Tệp văn bản  
Khi mở tệp, nếu không chỉ rõ bản chất dữ liệu của tệp thì C  
sẽ ngầm hiểu đó là tệp văn bản  
10  
Ví dụ  
Mở một tệp văn bản để đọc  
fp = fopen(“diem.txt”, “rt”);  
Mở một tệp văn bản để ghi đè  
fp = fopen(“diem.txt”, “wt”);  
Mở một tên văn bản để vừa đọc vừa ghi thêm  
fp = fopen(“C:\TDC\diem.txt”, “a+t”);  
Mở một 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 là đảm bảo những thay đổi dữ liệu được lưu lại  
trên tệp.  
Để đóng tệp ta dùng hàm fclose() có cú phá p khai bá o  
fclose(tenConTroTep);  
Kết quả trả về:  
0 nếu đóng tệp thành công  
Ngược lại nếu có lỗi  
12  
Cá c thao tá c khá c  
int feof(FILE *fp)  
o Kiểm tra vị trí con trỏ đã ở cuối tệp chưa  
o Trả về = 0 nếu sai, ≠ 0 nếu đúng  
void rewind(FILE *fp)  
o Di chuyển con trỏ vị trí về đầu tệp  
13  
Nội dung  
Khái niệm cơ bản  
Các thao tác với tệp tin  
Truy nhập tệp tin văn bản  
Truy nhập tệp tin nhị hân  
14  
3. Truy nhập tệp văn bản  
int fscanf(FILE *fp, char[] xauDinhDang, danh_sach_dia_chi)  
o Đọc dữ liệu từ tệp  
o Sử dụng tương tự scanf()  
o Trả về số lượng giá trị đọc được theo xâu định dạng nếu hàm thực hiện  
thành cô ng, ngược lại trả về giá trị nhỏ hơn  
o Hạn chế: Cần biết định dạng dữ liệu trong tệp  
int fflush(FILE *fp)  
o Xóa bộ đệm đọc tệp  
o Nên thực hiện trước khi dùng hàm fscanf()  
15  
3. Truy nhập tệp văn bản (tiếp)  
char* fgets(char[] str, int n, FILE* fp)  
o Đọc tối đa n-1 ký tự, hoặc khi gặp dấu xuống dòng trong tệp fp và  
gá n cho str  
o Tự động thêm ký tự “\n”  
o Trả về con trỏ tới xâu str nếu thành công, ngược lại trả về NULL  
int fgetc(FILE *fp)  
o Đọc 1 ký tự trên tệp  
o Trả về mã ASCII của ký tự nếu thành công, ngược lại trả về EOF  
16  
3. Truy nhập tệp văn bản (tiếp)  
int fprintf(FILE *fp, char[] xauDinhDang, danh_sach_tham_so)  
o Ghi dữ liệu lên tệp  
o Tương tự printf()  
o Trả về số byte đã ghi nếu thành công, ngược lại trả về số < 0  
int fputs(char[] str, FILE *fp)  
o Ghi một xâu lên tệp  
o Trả về mã ASCII của ký tự cuối cùng đã ghi nếu thành công, ngược lại trả về  
số < 0  
17  
3. Truy nhập tệp văn bản (tiếp)  
int fputc(int ch, FILE *fp)  
o Ghi ký tự lên tệp  
o Trả về mã ASCII của ký tự đã ghi nếu thành cô ng,  
o Ngược lại trả về EOF  
18  
Ví dụ - Mở và ghi tệp văn bả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ở và ghi tệp văn bả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  
Tải về để xem bản đầy đủ
pdf 25 trang baolam 11/05/2022 5920
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Tin học đại cương - Phần III, Chương 7: Tệp tin - Nguyễn Thị Thùy Liên", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfbai_giang_tin_hoc_dai_cuong_phan_iii_chuong_7_tep_tin_nguyen.pdf