Chương 6: Thao tác trên tập tin
Nội dung
Khái niệm
Khai báo
Các thao tác trên tập tin
Bài tập
Khái niệm
File cho phép lưu trữ dữ liệu ở bộ nhớ ngoài (đĩa)
File có thể lưu dữ liệu kích thước lớn với số lượng các phần tử không hạn chế (chỉ bị hạn chế bởi dung lượng của bộ nhớ ngoài)
35 trang |
Chia sẻ: phuongt97 | Lượt xem: 395 | Lượt tải: 0
Bạn đang xem trước 20 trang nội dung tài liệu Bài giảng Kỹ thuật Lập trình - Chương 6: Thao tác trên tập tin - Trần Minh Thái, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Lập trình CChương 6. Thao tác trên tập tin(3 tiết)Trần Minh TháiEmail: minhthai@huflit.edu.vn Website: www.minhthai.edu.vn Cập nhật: 20/03/2017Nội dungKhái niệmKhai báoCác thao tác trên tập tinBài tậpKHÁI NIỆMKhái niệmFile cho phép lưu trữ dữ liệu ở bộ nhớ ngoài (đĩa)File có thể lưu dữ liệu kích thước lớn với số lượng các phần tử không hạn chế (chỉ bị hạn chế bởi dung lượng của bộ nhớ ngoài)Khái niệm Biến File: là một biến thuộc kiểu dữ liệu tập tin dùng để đại diện cho một tập tinCon trỏ tập tin: Xác định vị trí trong tập tin khi thao tác đọc /ghiPhân loại File:File textFile nhị phânFile textDùng để ghi các ký tự lên đĩa dưới dạng mã AsciiDữ liệu của tập tin được lưu trữ thành các dòng, mỗi dòng được kết thúc bằng ký tự xuống dòng (new line), ký hiệu ‘\n’Mỗi tập tin được kết thúc bởi ký tự EOF (End Of File) có mã Ascii là 26 (xác định bởi tổ hợp phím Ctrl + Z)File nhị phânMột dãy các bytes liên tụcNội dung dữ liệu được mã hóaCÁC THAO TÁC TRÊN FILECác thao tác khi thao tác trên FileKhai báo con trỏ fileMở fileThao tác đọc/ ghi trên fileĐóng fileKhai báo con trỏ fileCú pháp: FILE ;Các biến trong danh sách phải là các con trỏ và được phân cách bởi dấu phẩy(,) Ví dụ: FILE *f1, *f2; Mở fileCú pháp: FILE *fopen(char *path, const char *mode) Trong đó: path: chuỗi chỉ đường dẫn đến tập tin trên đĩamode: chuỗi xác định cách thức mà tập tin sẽ mởHàm fopen trả về một con trỏ tập tin. Nếu có lỗi xuất hiện trong khi mở tập tin thì trả về con trỏ NULL Các thông tin ModeMode Ý nghĩa r Mở tập tin văn bản để đọc w Tạo ra tập tin văn bản mới để ghi a Nối vào tập tin văn bản rb Mở tập tin nhị phân để đọc wb Tạo ra tập tin nhị phân để ghi ab Nối vào tập tin nhị phân r+ Mở một tập tin văn bản để đọc/ghi w+ Tạo ra tập tin văn bản để đọc ghi a+ Nối vào hay tạo mới tập tin văn bản để đọc/ghi r+b Mở ra tập tin nhị phân để đọc/ghi w+b Tạo ra tập tin nhị phân để đọc/ghi a+b Nối vào hay tạo mới tập tin nhị phân Ví dụ tạo mới file text “test.txt” ở ổ đĩa D:FILE *f; f = fopen(“D:\\test.txt”, “w”); if (f!=NULL) { /* Các câu lệnh để thao tác với tập tin*/ /* Đóng tập tin*/ } Đóng tập tinCú pháp: int fclose(FILE *f) Trong đó f là con trỏ tập tin được mở bởi hàm fopen()Trả về 0: đóng tập tin thành côngTrả về EOF nếu có xuất hiện lỗiĐóng tất cả các tập tin lại: int fcloseall() Thao tác trên File textSTTTÊN HÀMÝ NGHĨA SỬ DỤNGVÍ DỤĐỌC TẬP TIN1fscanf(FILE *, định dạng, các tham biến)Đọc dữ liệu từ tập tinfscanf(f, “%d”, &x); 2fgets(chuỗi, kích thước tối đa, FILE *)Đọc chuỗi ký tự từ tập tin với kích thước tối đa cho phép, hoặc gặp ký tự xuống dòngchar s[80];fgets(s, 80, f); 3getc(FILE *)Đọc ký tự từ tập tinchar c=getc(f); GHI TẬP TIN1fprintf(FILE *, định dạng, các tham biến) Ghi dữ liệu vào tập tinfprintf(f, “%d”, x);2fputs(chuỗi, FILE *) Ghi chuỗi ký tự vào tập tinfputs(“Vi du”, f);Ví dụ Tạo tập tin văn bản “so.out” gồm n số nguyên, các số của dãy được tạo ngẫu nhiên có giá trị không vượt quá M (n, M đọc từ tập tin “so.inp”). Kết quả chương trình là 1 tập tin văn bản có dòng thứ nhất ghi số n; n dòng tiếp theo ghi các số tạo được, mỗi số trên một dòngFile so.inp310File so.out3572# define in “SO.INP”# define out “SO.OUT”void DocFile(int &n, int &M){ FILE *fi; fi = fopen(in, "r"); fscanf(fi, "%d%d", &n, &M); fclose(fi);}void GhiFile(int n, int M){FILE *fo;fo = fopen(out, "w");fprintf(fo, "%d\n", n);for (; n > 0; n--)fprintf(fo, "%d\n", rand()%(M - 1) + 1);fclose(fo);}int main(){int n, M;srand((unsigned int)time(NULL));DocFile(n, M);GhiFile(n, M);return 0;}Bài tậpViết các hàm sau:Tạo mảng 1 chiều số nguyên a (giá trị ngẫu nhiên 0) { if (d.x > 0 && d.y > 0) fwrite(&d, sizeof(MyPoint), 1, fOut); } _fcloseall();}void XuatFile(char *fileName) { FILE *fp; fp = fopen(fileName, "rb"); MyPoint d; while (fread(&d, sizeof(MyPoint), 1, fp) > 0) { printf("(%d, %d); ", d.x, d.y); }}int main() { MyPoint *a; int n; srand((unsigned int) time(NULL)); printf("So luong toa do can phat sinh: "); scanf("%d", &n); a = (MyPoint *) malloc(n * sizeof(MyPoint)); PhatSinh(a, n); printf("\n***Danh sach toa do duoc phat sinh:\n"); XuatMang(a, n); LuuFile(a, n, "dsToaDo.inp"); LuuToaDoDuong("dsToaDo.inp", "toaDoDuong.out"); //Kiem tra ket qua luu file printf("\n***Danh sach toa do trong file:\n"); XuatFile("dsToaDo.inp"); printf("\n***Danh sach toa do duong trong file:\n"); XuatFile("toaDoDuong.out"); free(a); getch(); return 0;}Các thao tác khác trên FileXóa File remove (đường dẫn tập tin);Đổi tên File rename (tên tập tin cũ, tên tập tin mới);Cho biết vị trí con trỏ File ftell (FILE *);Các thao tác khác trên FileDi chuyển con trỏ File từ vị trí xuất phát cho trướcfseek (FILE *, độ dời, vị trí xuất phát); Các vị trí:SEEK_SET đầu tập tin (giá trị 0)SEEK_END cuối tập tin (giá trị 2)SEEK_CUR vị trí hiện hành (giá trị 1)Độ dời tính bằng byteBài tậpTrong bài tập ví dụ về danh sách tọa độ điểm trong mặt phẳng, bổ sung thêm các hàm thực hiện yêu cầu sau:Nhập một tọa độ điểm từ bàn phímBổ sung tọa độ điểm này vào cuối file “dsToaDo.inp”Nếu tọa độ điểm vừa nhập có tọa độ thuộc phần tư thứ nhất thì bổ sung thêm vào cuối file “toaDoDuong.out”Xóa tọa độ điểm d cho trước (nếu có xuất hiện) trong file “dsToaDo.inp” và “toaDoDuong.out” Q&A
Các file đính kèm theo tài liệu này:
- bai_giang_ky_thuat_lap_trinh_chuong_6_thao_tac_tren_tap_tin.pptx