Xem mẫu

  1. Chương 09 TẬP TIN Trần Quang Kỹ thuật lập trình Chương 09: File 1 CuuDuongThanCong.com https://fb.com/tailieudientucntt © 2016
  2. Tập tin (file)  Tất cả các biến dữ liệu của chương trình được lưu trong bộ nhớ RAM của máy tính. Khi chương trình kết thúc, tất cả các biến này sẽ bị xóa đi.  Để giữ các dữ liệu này lại khi chương trình kết thúc, ta cần lưu chúng dưới dạng tập tin (file) vào các thiết bị lưu trữ như ổ cứng, CD, DVD, v.v. Trần Quang Kỹ thuật lập trình Chương 09: File 2 CuuDuongThanCong.com https://fb.com/tailieudientucntt © 2016
  3. Mô hình tập tin  Tập tin là một dãy các bytes dữ liệu kết thúc bằng ký tự đặc biệt EOF  EOF (End Of File): là giá trị đặc biệt, không trùng với bất cứ giá trị của byte dữ liệu nào.  EOF: khi dùng các hàm đọc dữ liệu trả về EOF là biết kết thúc tập tin.  (Nhiều hệ thống EOF = -1) … EOF 1 2 3 N N bytes dữ liệu của một file Trần Quang Kỹ thuật lập trình Chương 09: File 3 CuuDuongThanCong.com https://fb.com/tailieudientucntt © 2016
  4. Các loại tập tin  Tập tin văn bản (text)  Các byte trong mô hình tập tin chứa các ký tự đọc được (có nghĩa) bởi con người  Tập tin có thể mở ra để đọc và thay đổi bởi chương trình soạn thảo văn bản như NOTEPAD.  Tập tin nhị phân (binary)  Được tạo bởi chương trình nào đó, không dành cho con người đọc và hiểu trực tiếp bằng NOTEPAD  Các tập tin này phải dùng chương trình dành riêng nào đó mới đọc và diễn dịch được. Ví dụ file .doc của MS Word, file ảnh .jpg, file thực thi .exe, … Trần Quang Kỹ thuật lập trình Chương 09: File 4 CuuDuongThanCong.com https://fb.com/tailieudientucntt © 2016
  5. Quy trình xử lý tập tin 1. Khai báo con trỏ tập tin 2. Mở tập tin  Dùng hàm: fopen 3. Thao tác với tập tin  Đọc hay ghi dữ liệu  Mỗi lần đọc hay ghi dữ liệu, con trỏ đánh dấu trong tập tin tự động tăng đến phần tử tiếp theo 4. Đóng tập tin  Dùng hàm fclose Trần Quang Kỹ thuật lập trình Chương 09: File 5 CuuDuongThanCong.com https://fb.com/tailieudientucntt © 2016
  6. Con trỏ đánh dấu trong tập tin N bytes dữ liệu của một file 1 2 3 N … EOF Sau khi mở tập tin thành công, con trỏ đánh dấu tự động chỉ đến byte đầu tiên của tập tin 1 2 3 N … EOF Sau khi đọc 1 byte dữ liệu, ví dụ sử dụng hàm fgetc() Trần Quang Kỹ thuật lập trình Chương 09: File 6 CuuDuongThanCong.com https://fb.com/tailieudientucntt © 2016
  7. Con trỏ đánh dấu trong tập tin 1 2 3 N … EOF Sau khi đã đọc xong N bytes, con trỏ đánh dấu chỉ đến EOF Lần đọc dữ liệu kế tiếp hàm đọc sẽ trả về giá trị EOF cho biết đã kết thúc tập tin Trần Quang Kỹ thuật lập trình Chương 09: File 7 CuuDuongThanCong.com https://fb.com/tailieudientucntt © 2016
  8. Khai báo con trỏ tập tin (FILE *)  Biến (con trỏ) trong chương trình dùng để gắn kết với tập tin trên đĩa được định nghĩa với kiểu đặc biệt theo cú pháp sau: FILE * Ví dụ: FILE *fp;  Kiểu FILE là kiểu cấu trúc do C định nghĩa sẵn trong Trần Quang Kỹ thuật lập trình Chương 09: File 8 CuuDuongThanCong.com https://fb.com/tailieudientucntt © 2016
  9. Mở tập tin fopen (, );  Ví dụ: FILE *fp; fp = fopen("c:\\test.txt", "r");  filename là tên tập tin trên đĩa, chú ý dùng \\ trong đường dẫn Trần Quang Kỹ thuật lập trình Chương 09: File 9 CuuDuongThanCong.com https://fb.com/tailieudientucntt © 2016
  10. Chế độ mở tập tin Chế độ Mô tả r Mở tập tin để đọc. Mở tập tin để ghi. Nếu tập tin đã tồn tại, xóa toàn bộ w nội dung tập tin đó. Nối tập tin. Mở tập tin đã có sẵn hoặc tạo mới tập tin, a ghi vào cuối tập tin nếu đã tồn tại. Mở tập tin cho phép đọc lẫn ghi. Không tạo mới tập r+ tin nếu tập tin chưa có sẵn. Mở tập tin cho phép đọc lẫn ghi. Tạo mới tập tin nếu w+ tập tin chưa có sẵn. Nối tập tin, cho phép đọc tập tin. Mở tập tin đã có a+ sẵn hoặc tạo mới tập tin, ghi vào cuối tập tin đó. Trần Quang Kỹ thuật lập trình Chương 09: File 10 CuuDuongThanCong.com https://fb.com/tailieudientucntt © 2016
  11. Kiểm tra việc mở tập tin FILE *fp; fp = fopen ("E:\\tmp\\vidu.txt", "r"); if (fp == NULL) printf("Khong mo duoc file\n"); else { // xử lý file } if (fp == NULL) { printf("Khong mo duoc file\n"); return; } // xử lý file Trần Quang Kỹ thuật lập trình Chương 09: File 11 CuuDuongThanCong.com https://fb.com/tailieudientucntt © 2016
  12. Đóng tập tin  Cú pháp: int fclose (FILE *fp); Ví dụ: fclose(fp); Trần Quang Kỹ thuật lập trình Chương 09: File 12 CuuDuongThanCong.com https://fb.com/tailieudientucntt © 2016
  13. Đọc 1 ký tự từ tập tin  Cú pháp: int fgetc (FILE *fp);  Ví dụ: char c; FILE *fp; fp = fopen ("E:\\tmp\\vidu.txt", "r"); c = fgetc (fp); Trần Quang Kỹ thuật lập trình Chương 09: File 13 CuuDuongThanCong.com https://fb.com/tailieudientucntt © 2016
  14. Hàm kiểm tra cuối tập tin  Cú pháp: int feof (FILE *fp) Hàm trả về giá trị khác 0 nếu gặp cuối file khi đọc, trái lại hàm cho giá trị 0.  Ví dụ: char c; FILE *fp; fp = fopen("E:\\tmp\\vidu.txt", "r"); while ( !feof(fp) ) { c = fgetc(fp); printf("%c", c); } Trần Quang Kỹ thuật lập trình Chương 09: File 14 CuuDuongThanCong.com https://fb.com/tailieudientucntt © 2016
  15. Đọc tất cả các ký tự trong tập tin vào bộ đệm Giả sử buffer đủ lớn để chứa toàn bộ dữ liệu từ tập tin void readFile(FILE* fp, char* buffer){ int i = 0; int ch = fgetc(fp); while(ch != EOF){ CH = Đọc một ký tự buffer[i] = ch; false ch = fgetc(fp); CH EOF i += 1; true } Đưa CH vào bộ đệm CH = Đọc một ký tự buffer[i] = '\0'; } Trần Quang Kỹ thuật lập trình Chương 09: File 15 CuuDuongThanCong.com https://fb.com/tailieudientucntt © 2016
  16. Ghi 1 ký tự vào tập tin  Cú pháp: int fputc (char c, FILE *fp); Ví dụ: FILE *fp; fp = fopen ("E:\\tmp\\vidu2.txt", "w"); fputc ('A', fp); Trần Quang Kỹ thuật lập trình Chương 09: File 16 CuuDuongThanCong.com https://fb.com/tailieudientucntt © 2016
  17. Hàm fgets() – fputs()  Cú pháp: char *fgets(char *str, int n, FILE *fp);  Dùng để đọc 1 chuỗi từ file vào biến str, n là số ký tự tối đa sẽ đọc  Hàm trả về con trỏ tới string đọc được nếu thành công  Hàm trả về NULL nếu xảy ra lỗi hoặc gặp cuối file.  Cú pháp: int fputs(const char *str, FILE *fp);  Dùng để ghi 1 chuỗi vào file  Hàm trả về giá trị không âm nếu ghi thành công Trần Quang Kỹ thuật lập trình Chương 09: File 17 CuuDuongThanCong.com https://fb.com/tailieudientucntt © 2016
  18. fgets() – fputs() Ví dụ: char s[255]; FILE *fp; printf ("Nhap vao 1 cau: "); fgets (s, 255, stdin); fp = fopen ("E:\\tmp\\vidu.txt","w+"); fputs (s, fp); Trần Quang Kỹ thuật lập trình Chương 09: File 18 CuuDuongThanCong.com https://fb.com/tailieudientucntt © 2016
  19. fgets() – fputs() Ví dụ: char s[100]; FILE *fp; fp = fopen ("E:\\tmp\\vidu.txt","w+"); if (fp==NULL) return 0; fputs ("Tran van Hung\n", fp); fputs ("Le Thi Thu Thao\n", fp); rewind(fp); fgets (s,100, fp); printf ("%s", s); // Tran Van Hung Trần Quang Kỹ thuật lập trình Chương 09: File 19 CuuDuongThanCong.com https://fb.com/tailieudientucntt © 2016
  20. Hàm fscanf( )  Hàm thư viện đọc dữ liệu từ tập tin theo định dạng: fscanf ( , , );  Việc sử dụng hàm fscanf() tương tự như hàm scanf(), chỉ có khác ở chỗ những gì lẽ ra nhập từ bàn phím sẽ được đọc vào từ tập tin.  Ví dụ: fscanf (fp, "%d", &n); fscanf (fp, "%f", &(sv1->diem_btl); Trần Quang Kỹ thuật lập trình Chương 09: File 20 CuuDuongThanCong.com https://fb.com/tailieudientucntt © 2016
nguon tai.lieu . vn