1. Trang chủ
  2. » Giáo án - Bài giảng

CHƯƠNG 09: FILE TRONG C

52 311 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

Thông tin cơ bản

Định dạng
Số trang 52
Dung lượng 526,11 KB

Nội dung

Chương 09 TẬP TIN Lê Thành Sách Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ Nội dung n n n n n n Tại phải dùng tập tin (file)? Mô hình tập tin Các loại tập tin Các thao tác bắt buộc Đọc ghi liệu vào tập tin Tập tin văn n n Tập tin nhị phân n n n n Đọc, ghi, đọc ghi Đọc, ghi, đọc ghi Các hàm xử lý tập tin Các ví dụ Tổng kết Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ Tại phải dùng tập tin (file)? n Khi chương trình kết thúc thực thi, biến liệu liên quan bị dọn dẹp khỏi nhớ (RAM) máy tính n => Để liệu không bị chương trình chương trình kết thúc, chương trình cần lưu chúng dạng tập tin (file) vào thiết bị lưu trữ ổ cứng, CD, DVD, v.v Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ Mô hình tập tin n Tập tin dãy bytes liệu, hình vẽ, kết thúc ký hiệu đặc biệt EOF n n n EOF (End Of File): giá trị đặt biệt, không trùng với giá trị byte liệu EOF: Ký hiệu mà hàm đọc liệu trả biết kết thúc tập tin (Nhiều hệ thống EOF = -1) … EOF N N bytes liệu file mức mô hình Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ Các loại tập tin n Tập tin văn (text) n n n Các byte mô hình tập tin chứa ký tự đọc (có nghĩa) người Tập tin mở để đọc thay đổi chương trình soạn thảo văn NOTEPAD Tập tin nhị phân (binary) n n Được tạo chương trình đó, không dành cho người đọc hiểu trực tiếp NOTEPAD Tập tin dành riêng cho chương trình đọc diễn dịch theo ý chương trình Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ Các thao tác bắt buộc n n (1) Khai báo sử dụng kiểu liệu tập tin (2) Mở tập tin n n (3) Thao tác với tập tin n n n Hàm: fopen, nói sau Đọc hay ghi liệu Mỗi lần đọc hay ghi liệu, thẻ đánh dấu tập tin tự động tăng đến phần tử (4) Đóng tập tin n Hàm: fclose, nói sau Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ Các thao tác bắt buộc Thẻ đánh dấu tập tin N bytes liệu file mức mô hình … N EOF Sau mở tập tin thành công, thẻ đánh dấu tự động chì đến byte tập tin Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ Các thao tác bắt buộc Thẻ đánh dấu tập tin N bytes liệu file mức mô hình … N EOF Sau đọc byte liệu, ví dụ sử dụng hàm fgetc Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ Các thao tác bắt buộc Thẻ đánh dấu tập tin N bytes liệu file mức mô hình … N EOF Sau đọc byte liệu Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ Các thao tác bắt buộc Thẻ đánh dấu tập tin N bytes liệu file mức mô hình … N EOF Sau đọc thành công N bytes Thẻ đánh dấu đến EOF Lần đọc liệu hàm đọc trả giá trị EOF để nói kết thúc tập tin, giá trị trả EOF (-1) Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ 10 Tập tin văn có định dạng: đọc tập tin Các thao tác bool doc_diem(FILE* file_ptr, float *math, float *physics, float *english){ int num = fscanf(file_ptr, "%f , %f, %f", math, physics, english); if(num != 3) return false; else return true; } Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ 38 Tập tin văn có định dạng: đọc tập tin Các thao tác bool xoa_xuong_hang(FILE* file_ptr){ int ch; ch = fgetc(file_ptr); while((ch != EOF) && (ch == '\n') ){ ch = fgetc(file_ptr); } if(ch == EOF) return false; else{ fseek(file_ptr, -1, SEEK_CUR); return true; } } Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ 39 Tập tin văn có định dạng: đọc tập tin Các thao tác void in_du_lieu(Student list[], int size){ for(int i=0; i< size; i++){ printf("%-20s:%-5.1f,%5.1f,%5.1f\n", list[i].name, list[i].math, list[i].physics, list[i].english); } } Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ 40 Đọc ghi với tập tin n Hai thao tác phổ biến với tâp tin n n n Ghi vào tập tin Đọc liệu từ tập tin Ghi liệu n n Sử dụng hàm thư viện n Với tập tin văn bản: fprintf, fputs n Với tập tin nhị phân: fwrite Việc ghi thường dễ dàng đọc n Với tập tin văn bản: fprintf tương tự printf có định dạng n %s: để ghi chuỗi, với độ rộng, canh lề mong muốn n %f: để ghi số thực với độ rộng, độ xác mong muốn n V.v Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ 41 Đọc ghi với tập tin n Ghi liệu n Việc ghi thường dễ dàng đọc n Với tập tin nhị phân, dùng hàm fwrite n Hàm cho phép đặc tả số lượng kích thước phần tử (các phần tử struct hay array) Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ 42 Đọc ghi với tập tin n Đọc liệu n n n n Việc đọc liệu từ tập tin thường phức tạp ghi Giải thuật đọc tốt: n Phải làm việc với cấu trúc tập tin bị thay đổi Với tập tin nhị phân: n Vì trước bao nhiều phần tử có tập tin n è Giải thuật cần đọc phần tử, gặp cuối tập tin đến cấu trúc bị lỗi nên chấm dứt việc đọc từ tập tin Với tập tin văn bản: n Việc đọc khó hay dễ tuỳ vào định dạng liệu Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ 43 Tập tin nhị phân: Ghi tập tin Các thao tác int main(){ Student list[MAX_SIZE]; int size; size = sinh_du_lieu_mau(list); ghi_du_lieu(list, size, "stu_list.data"); in_du_lieu(list, size); printf("\n\n"); system("pause"); return EXIT_SUCCESS; } Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ 44 Tập tin nhị phân : Ghi tập tin Các thao tác #include #include #include #define MAX_SIZE 100 typedef struct{ char name[20]; float math, physics, english; } Student; int sinh_du_lieu_mau(Student *list); void ghi_du_lieu(Student *list, int size, char* file); void in_du_lieu(Student *list, int size); Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ 45 Tập tin nhị phân : Ghi tập tin Các thao tác int sinh_du_lieu_mau(Student *list){ time_t t; srand((unsigned int) time(&t)); for(char c='A'; c

Ngày đăng: 29/03/2017, 17:51

w