Bài giảng Lập trình với tập tin - Nguyễn Đông Hà

Xử lý tập tin gồm các mẫu tin

„ Mở tập tin bằng hàm fopen với tùy chọn “r+b”

để đọc và ghi

„ Đóng tập tin bằng hàm fclose

„ Có thể dùng hàm fseek để đưa bộ định vị đọc

ghi đến mẫu tin thích hợp

„ Dùng hàm ftell để ghi nhận lại vị trí của mẫu

tin mà sau này sẽ được cập nhật dữ liệu

„ Vẫn đọc và ghi bằng hàm fread và fwrite

Tạo một tập tin gồm các mẫu tin

„ Gồm 3 bước:

„ Tạo tập tin bằng hàm fopen() với tùy chọn “wb”

„ Gọi hàm fwrite() ghi dữ liệu từ biến bộ nhớ (là

biến kiểu mẫu tin) vào tập tin

„ Đóng tập tin bằng hàm fclose()

Tạo một tập tin gồm các mẫu tin

int TaoDanhSachHS(char *ten_tap_tin)

{

HOCSINH dshs[3] =

{

{"993236","Lam Vinh Khang",0,0,0},

{"993237","To My Hien",0,0,0},

{"993238","Van Si Ha",0,0,0}

};

FILE *fp;

fp = fopen(ten_tap_tin,"wb")

pdf37 trang | Chia sẻ: trungkhoi17 | Lượt xem: 477 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Bài giảng Lập trình với tập tin - Nguyễn Đông Hà, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Lập trình với tập tin Nguyễn Đông Hà Khoa CNTT – ĐH KHTN Sưu tầm bởi: www.daihoc.com.vn Lập trình với tập tin „ Dữ liệu của chương trình được lưu trữ trong bộ nhớ chính (các biến bộ nhớ), không được lưu trữ cho lần chạy kế tiếp của chương trình „ Mục đích chính của việc lập trình với tập tin là nhằm để lưu trữ dữ liệu vào bộ nhớ phụ và truy xuất trở lại khi cần thiết Sưu tầm bởi: www.daihoc.com.vn Phân loại tập tin „ Tập tin văn bản „ có thể xem nội dung bằng lệnh type của hệ điều hành DOS „ được soạn thảo bằng các chương trình soạn thảo văn bản đơn giản như Notepad của Windows... „ Tập tin nhị phân „ không có dạng văn bản ASCII „ ví dụ: tập tin mã thực thi trên hệ điều hành (.exe,.com), tập tin văn bản phức hợp (.doc), tập tin hình ảnh (.jpg) Sưu tầm bởi: www.daihoc.com.vn Kỹ thuật lập trình tập tin „ Các thao tác với tập tin luôn gồm 3 bước chính sau đây: „Mở tập tin để chuẩn bị làm việc „Đọc và ghi dữ liệu „Đóng tập tin Sưu tầm bởi: www.daihoc.com.vn Mở tập tin „ Dùng hàm fopen để mở tập tin theo cú pháp sau: FILE *fopen(const char *ten_tap_tin, const char *tuy_chon); „ Ví dụ: /* Mo tap tin ten la text.txt de ghi */ fopen( “text.txt” , ”wt” ); Sưu tầm bởi: www.daihoc.com.vn Mở tập tin „ Các tùy chọn có thể có: mở file để đọc và thêm vào phía sau file cũa+ mở file để đọc viết, xóa hoàn toàn phần dữ liệu cũw+ mở file để đọc viết, ghi đè lên phần dữ liệu đã cór+ mở file để thêm vào phía sau file đã tồn tạia mở file để ghi, nếu file ko tồn tại, tạo file mới, nếu đã tồn tại, ghi đè lên file cũ ko cần hỏi w mở file để đọc, nếu file ko tồn tại, fopen trả về NULL r Sưu tầm bởi: www.daihoc.com.vn Mở tập tin „ Mặc định mở tập tin là tập tin văn bản, để mở tập tin nhị phân, phần tùy chọn phải thêm vào ký tự “b”, tức là “wb”, “rb”.. (b: binary) „ Có thể thêm ký tự “t” vào phần tùy chọn cho tập tin văn bản, mặc dù không ghi cũng được. (t: text) Sưu tầm bởi: www.daihoc.com.vn Mở tập tin „ Hàm fopen() trả về NULL nếu xảy ra lỗi: „ Sử dụng tên tập tin không đúng quy tắc „ Mở tập tin chưa sẵn sàng (đĩa chưa format, chưa đóng ổ đĩa) „ Mở tập tin không tồn tại „ Bất cứ khi nào sử dụng hàm fopen, luôn phải kiểm tra kết quả trả về xem có thực hiện thành công hay không Sưu tầm bởi: www.daihoc.com.vn Các hàm đọc, ghi „ Đọc các giá trị số (số nguyên, thực, 1 ký tự..) int fscanf(FILE *tap_tin, const char * format [ , argument , ...] ); „ Ví dụ /* doc mot so nguyen dua vao bien n tu tap tin duoc dai dien boi con tro ten la fp */ fscanf(fp ,”%d” , &n); Sưu tầm bởi: www.daihoc.com.vn Các hàm đọc, ghi „ Ví dụ /* Doc mot chuoi ky tu chua toi da 20 ky tu tu tap tin duoc dai dien boi con tro fp, dua vao bien chuoi ky tu ten la dong */ fgets(dong,20,fp); char * fgets (char * chuoi, int sokytu , FILE * tap_tin); „ Đọc các giá trị chuỗi ký tự Sưu tầm bởi: www.daihoc.com.vn Các hàm đọc, ghi „ Ghi int fprintf (FILE * tap_tin, const char * ma[ , bien , ...] ); „ Ví dụ /* ghi mot so nguyen n ten tap tin duoc dai dien boi con tro ten la fp */ fprintf(fp,"%d",n); Sưu tầm bởi: www.daihoc.com.vn Tạo tập tin văn bản mới „ Gồm 3 bước: „ Mở tập tin bằng hàm fopen() với tùy chọn “wt” „ Ghi dữ liệu lên tập tin bằng hàm fprintf() „ Đóng tập tin bằng hàm fclose() Sưu tầm bởi: www.daihoc.com.vn Tạo tập tin văn bản mới – ví dụ void TaoTapTin() { FILE* fp; int x = 10; fp = fopen(“test.txt”,”wt”); if(fp != NULL) { fprintf(fp, “Chao cac ban !\n”); fprintf(fp,"x = %d", x); fclose(fp); } else printf(“Khong the tao tap tin”); } Sưu tầm bởi: www.daihoc.com.vn Đọc dữ liệu từ tập tin văn bản có sẵn „ Gồm 3 bước: „ Mở tập tin bằng hàm fopen() với tùy chọn “rt” „ Gọi hàm fscanf() hay fgets() để đọc dữ liệu từ tập tin vào biến bộ nhớ „ Đóng tập tin bằng hàm fclose() „ Dùng hàm fscanf để đọc số nguyên, số thực hay ký tự; dùng hàm fgets để đọc nguyên một dòng của tập tin „ Để kiểm tra đã đến cuối tập tin hay chưa, dùng hàm feof Sưu tầm bởi: www.daihoc.com.vn Đọc dữ liệu từ tập tin văn bản – ví dụ Sưu tầm bởi: www.daihoc.com.vn #define MAXCHAR 255 void DocTapTin() { FILE* fp; char dong[MAXCHAR+1]; fp = fopen(“test.txt”,”rt”); if(fp != NULL) { while(!feof(fp)) /* chua cuoi tt*/ { if(fgets(dong,MAXCHAR,fp)!=NULL) printf(“%s”,dong); } fclose(fp); } else printf(“Khong the mo tap tin”); } Sưu tầm bởi: www.daihoc.com.vn #define MAXCHAR 255 void DocTapTin() { FILE* fp; char dong[MAXCHAR+1]; fp = fopen(“test.txt”,”rt”); if(fp != NULL) { while(!feof(fp)) /* chua cuoi tt*/ { if(fgets(dong,MAXCHAR,fp)!=NULL) printf(“%s”,dong); } fclose(fp); } else printf(“Khong the mo tap tin”); } Sưu tầm bởi: www.daihoc.com.vn Thêm dữ liệu vào cuối tập tin văn bản có sẵn „ Gồm 3 bước: „ Mở tập tin bằng hàm fopen() với tùy chọn “at” „ Ghi dữ liệu thêm vào cuối tập tin bằng hàm fprintf() „ Đóng tập tin bằng hàm fclose() Sưu tầm bởi: www.daihoc.com.vn Ví dụ ghép 2 tập tin /* Copy du lieu tu tap tin 2 vao phia sau tap tin 1, tra ve 1 neu thanh cong, tra ve 0 neu that bai */ int GhepHaiTapTin(char *tap_tin_1, char *tap_tin_2) { FILE *fp1,*fp2; char dong[MAXCHAR +1]; fp1 = fopen(tap_tin_1,"at"); fp2 = fopen(tap_tin_2,"rt"); if(fp1==NULL || fp2==NULL) { printf("Loi mo tap tin\n"); return 0; } Sưu tầm bởi: www.daihoc.com.vn Ví dụ ghép 2 tập tin fprintf(fp1,"\n"); while(!(feof(fp2))) { if(fgets(dong, MAXCHAR, fp2) !=NULL) fprintf(fp1,dong); } fclose(fp1); fclose(fp2); return 1; } Sưu tầm bởi: www.daihoc.com.vn Xử lý tập tin nhị phân „ Gồm 3 bước: „ Gọi hàm fopen() với tùy chọn có phối hợp với “b” „ Gọi hàm fread() hay fwrite() để đọc dữ liệu từ tập tin vào biến bộ nhớ (là biến kiểu mẫu tin) hay ghi dữ liệu từ biến bộ nhớ vào tập tin „ Đóng tập tin bằng hàm fclose() Sưu tầm bởi: www.daihoc.com.vn Các hàm đọc, ghi tập tin nhị phân „ Đọc „ Ví dụ int fread (void * vungnho, size_t sobytedoc, size_t solandoc, FILE * tap_tin); /* Doc vung du lieu tren tap tin dai dien boi con tro fp, co kich thuoc bang (sizeof) kich thuoc cua 1 mau tin HOCSINH dua vao bien mau tin hs */ fread(&hs,sizeof(HOCSINH),1,fp); Sưu tầm bởi: www.daihoc.com.vn Các hàm đọc, ghi tập tin nhị phân „ Ví dụ „ Ghi /* Ghi mau tin hs len tap tin dai dien boi con tro fp, co kich thuoc bang (sizeof) kich thuoc cua 1 mau tin HOCSINH*/ fwrite(&hs,sizeof(HOCSINH),1,fp); size_t fwrite ( const void * vungnho, size_t sobyteghi, size_t solanghi, FILE * tap_tin ); Sưu tầm bởi: www.daihoc.com.vn Xử lý tập tin gồm các mẫu tin „ Mở tập tin bằng hàm fopen với tùy chọn “r+b” để đọc và ghi „ Đóng tập tin bằng hàm fclose „ Có thể dùng hàm fseek để đưa bộ định vị đọc ghi đến mẫu tin thích hợp „ Dùng hàm ftell để ghi nhận lại vị trí của mẫu tin mà sau này sẽ được cập nhật dữ liệu „ Vẫn đọc và ghi bằng hàm fread và fwrite Sưu tầm bởi: www.daihoc.com.vn Tạo một tập tin gồm các mẫu tin „ Gồm 3 bước: „ Tạo tập tin bằng hàm fopen() với tùy chọn “wb” „ Gọi hàm fwrite() ghi dữ liệu từ biến bộ nhớ (là biến kiểu mẫu tin) vào tập tin „ Đóng tập tin bằng hàm fclose() Sưu tầm bởi: www.daihoc.com.vn Tạo một tập tin gồm các mẫu tin int TaoDanhSachHS(char *ten_tap_tin) { HOCSINH dshs[3] = { {"993236","Lam Vinh Khang",0,0,0}, {"993237","To My Hien",0,0,0}, {"993238","Van Si Ha",0,0,0} }; FILE *fp; fp = fopen(ten_tap_tin,"wb"); Sưu tầm bởi: www.daihoc.com.vn Tạo một tập tin gồm các mẫu tin if(fp!=NULL) { fwrite(dshs,sizeof(HOCSINH),3,fp); fclose(fp); return 1; } else { printf("Khong the tao tap tin!\n"); return 0; } } Sưu tầm bởi: www.daihoc.com.vn Thêm mẫu tin vào tập tin có sẵn „ Gồm 3 bước: „ Gọi hàm fopen() với tùy chọn “ab” „ Gọi hàm fwrite() ghi dữ liệu từ biến bộ nhớ (là biến kiểu mẫu tin) vào tập tin „ Đóng tập tin bằng hàm fclose() Sưu tầm bởi: www.daihoc.com.vn Đọc danh sách mẫu tin từ tập tin „ Gồm 3 bước: „ Gọi hàm fopen() với tùy chọn “rb” „ Gọi hàm fread() để đọc dữ liệu từ tập tin vào biến bộ nhớ (là biến kiểu mẫu tin) „ Đóng tập tin bằng hàm fclose() Sưu tầm bởi: www.daihoc.com.vn Đọc danh sách mẫu tin từ tập tin int DocDanhSachHS(char *ten_tap_tin) { FILE *fp; HOCSINH hs; int stt = 0; fp = fopen(ten_tap_tin,"rb"); if(fp!=NULL) { /* Doc tap tin */ .... Sưu tầm bởi: www.daihoc.com.vn Đọc danh sách mẫu tin từ tập tin while(!feof(fp)) { stt++; if(fread(&hs, sizeof(HOCSINH),1,fp)==1) printf("%5d %6s %20s %f %f %f\n", stt, hs.maso, hs.hoten, hs.diem1, hs.diem2,hs.diem3); } fclose(fp); return 1; } else { printf("Khong the mo tap tin!\n"); return 0; } } Sưu tầm bởi: www.daihoc.com.vn Các hàm quản lý tập tin „ Xóa tập tin char ten_tap_tin[80]; printf(“Nhap ten tap tin muon xoa: "); gets(ten_tap_tin); if(remove(ten_tap_tin) == 0) printf(“Da xoa tap tin”); else printf( “Loi xoa tap tin”); int remove ( const char *ten_tap_tin); „ Ví dụ Sưu tầm bởi: www.daihoc.com.vn Các hàm quản lý tập tin „ Đổi tên tập tin char ten_cu[80], ten_moi[80]; printf(“Nhap ten hien tai: "); gets(ten_cu); printf(“Nhap ten moi: "); gets(ten_moi); if (rename( ten_cu, ten_moi) == 0 ) printf(“Da doi ten tap tin”); else printf(“Loi doi ten tap tin”); int rename( const char *ten_cu, const char *ten_moi ); „ Ví dụ Sưu tầm bởi: www.daihoc.com.vn Các hàm quản lý tập tin „ Sao chép tập tin „ Không có hàm sẵn trong thư viện. Phải tự viết bằng cách đọc và ghi dữ liệu dạng nhị phân. „ Tham khảo hàm CopyFile trong sách trang 75. Sưu tầm bởi: www.daihoc.com.vn Kỹ thuật lập trình tập tin văn bảnđọc dữ liệu dòng ký tự từ tập tin vào biến chuỗi ký tự fgets văn bảnđọc dữ liệu từ tập tin vào biến số nguyên, thực, ký tự fscanf văn bảnghi dữ liệu vào tập tinfprintf văn bản, nhị phânmở tập tin (tập tin mới hoặc đã có sẵn) fopen Loại tập tinChức năngTên hàm Sưu tầm bởi: www.daihoc.com.vn Kỹ thuật lập trình tập tin văn bản, nhị phân lấy vị trí hiện tạiftell văn bản, nhị phân kiểm tra đã đến cuối tập tin hay chưa feof văn bản, nhị phân đóng tập tin sau khi thao tác fclose nhị phânghi dữ liệu vào tập tinfwrite nhị phânđọc dữ liệu từ tập tin vào biến fread Loại tập tinChức năngTên hàm Sưu tầm bởi: www.daihoc.com.vn Sưu tầm bởi: www.daihoc.com.vn

Các file đính kèm theo tài liệu này:

  • pdfbai_giang_lap_trinh_voi_tap_tin_nguyen_dong_ha.pdf
Tài liệu liên quan