Xem mẫu

  1. CHƯƠNG 9: LẬP TRÌNH VỚI TẬP TIN • Nội dung Tập tin văn bản Tập tin nhị phân Con trỏ chỉ vị Vùng đệm Đóng mở tập tin, xóa vùng đệm Nhập xuất ký tự Các hàm nhập xuất theo kiểu văn bản Các hàm nhập xuất theo kiểu nhị phân
  2. Khái niệm  Tập tin là tập hợp các thông tin được đóng gói trên thiết bị lưu trữ.  Khi sử dụng tập tin dữ liệu được lưu trữ lâu dài và không bị mất khi tắt máy tính. Ngoài ra khi cần thiết có thể truy xuất lại các dữ liệu này. Tập tin văn bản  Đây là các tâp tin có thể xem và chỉnh sửa nội dung các tập tin bằng các chương trình soạn thảo văn bản đơn giản như: các hệ soạn thảo mã nguồn chương trình, chương trình Notepad của Windows, …  Mỗi tâp tin văn bản được lưu trữ dưới dạng văn bản(text) gồm nhiều dòng. Tập tin nhị phân  Đây là tất cả các tập tin khác không có dạng văn bản. Mỗi tập tin nhị phân do một phần mềm nào tạo ra thì sẽ có cấu trúc do phần mềm đó quy định.  Một số loại tập tin nhị phân thông dụng như:  Các tâp tin mã thực thi trên các hệ điều hành: *.exe, *.com  Các tập tin văn bản phức hợp: *.doc  Các tập tin bảng tính: *.xls  Các tập tin hình ảnh: *.bmp, *.gif, …
  3. Con trỏ chỉ vị • Khi một tập tin được mở để chuẩn bị làm việc, tùy theo cách thức mở tập tin, một con trỏ chỉ vị sẽ được đặt tại vị trí đầu tập tin hoặc tại ví trí cuối tập tin. Mỗi thao tác đọc/ghi sẽ tác động lên con trỏ chỉ vị của tâp tin, dữ liệu tại đó sẽ bị thay đổi nếu đó là thao tác ghi lên tập tin. Sau khi thực hiện một thao tác đọc/ghi, con trỏ chỉ vị tự động được dời đi một số byte đúng bằng số byte đọc/ghi . Một thao tác đọc/ghi kế tiếp sẽ tác động lên vị trí mới của con trỏ chỉ vị trên tập tin. Vùng đệm • Mỗi lần đọc/ghi thì thường tiến hành trên vùng đệm chứ không hẳn trên tập tin. Chẳng hạn khi ghi một số nguyên thì số được đưa vào vùng đệm và khi nào đầy thì vùng đệm mới được đẩy lên đĩa. Khi đọc, thông tin được lấy từ vùng đệm, và chỉ khi nào vùng đệm đã trống rỗng thì máy mới lấy dữ liệu từ đĩa chứa vào vùng đệm. Việc sử dụng vùng đệm sẽ giảm số lần nhập xuất trên đĩa và nâng cao tốc tốc độ làm việc.
  4. Đóng mở tập tin, xóa vùng đệm • Các hàm trong mục này dùng chung cho hai kiểu nhị phân và văn bản  FILE *fopen(char *têntậptin, char *kiểu); • Kiểu có thể có các giá trị sau: • “”r” “rt” Mở một tập tin để đọc theo kiểu văn bản. Tập tin cần tồn tại nếu không sẽ có lỗi. • ”w” “wt” Mở một tập tin mới để ghi theo kiểu văn bản. Nếu tập tin đã tồn tại nó bị xóa. • “a” “at” Mở một tập tin để ghi bổ sung theo kiểu văn bản. Nếu tập tin chưa tồn tại thì tạo tập tin mới. • “rb” Mở một tập tin để đọc theo kiểu nhị phân. Tập tin cần tồn tại nếu không sẽ có lỗi. • “wt” Mở một tập tin mới để ghi theo kiểu nhị phân. Nếu tập tin đãõtồn tại nó bị xóa. • “at” Mở một tập tin để ghi bổ sung theo kiểu nhị phân. Nếu tập tin chưa tồn tại thì tạo tập tin mới.
  5. • “r+” “r+t” Mở một tập tin để đọc/ghi theo kiểu văn bản. Tập tin cần tồn tại nếu không sẽ có lỗi. • ”w+” “w+t” Mở một tập tin mới để đọc/ghi theo kiểu văn bản. Nếu tập tin đãõ tồn tại nó bị xóa. • “a+” “a+t” Mở một tập tin để đọc/ghi bổ sung theo kiểu văn bản. Nếu tập tin chưa tồn tại thì tạo tập tin mới. • “r+b” Mở một tập tin để đọc/ghi theo kiểu nhị phân. Tập tin cần tồn tại nếu không sẽ có lỗi. • “w+b” Mở một tập tin mới để đọc/ghi theo kiểu nhị phân. Nếu tập tin đãõ tồn tại nó bị xóa. • “a+b” Mở một tập tin để đọc/ghi bổ sung theo kiểu nhị phân. Nếu tập tin chưa tồn tại thì tạo tập tin mới.
  6. • Hàm dùng để mở tập tin. Nếu thành công hàm cho con trỏ kiểu FILE ứng với tập tin vừa mở. Các hàm thao tác tập tin sẽ làm việc với tập tin thông qua con trỏ này. Nếu có lỗi hàm trả về giá trị NULL. • Chú ý: Trong các kiểu đọc/ghi, cần làm sạch vùng đệm trước khi chuyển từ đọc sang ghi hoặc từ ghi sang đọc.  int fclose(FILE *fp); • Hàm dùng để đóng tập tin. Nếu thành công hàm trả về giá trị 0, ngược lại hàm trả về giá trị EOF(số -1).  int fflush(FILE *fp); • Hàm dùng làm sạch vùng đệm của tập tin fp. Nếu thành công hàm trả về giá trị 0, ngược lại hàm trả về giá trị EOF( số -1).  int feof(FILE fp); • Hàm dùng để kiểm tra cuối tập tin. Hàm trả về giá trị khác 0 nếu gặp cuối tập tin khi đọc, ngược lại hàm trả về giá trị 0.
  7. Nhập xuất ký tự • Các hàm sau đây dùng được trong cả kiểu nhị phân và kiểu văn bản.  int fputc(int ch, FILE *fp); • Hàm ghi lên tập tin một ký tự có mã ch%256 trong đó ch được xem là số nguyên không dấu. Nếu thành công hàm trả về mã ký tự được ghi, ngược lại hàm trả về EOF.  int fgetc(FILE *fp); • Hàm đọc một ký tự từ tâp tin fp. Nếu thành công hàm trả về mã đọc được (có giá trị từ 0 đến 255), ngược lại nếu gặp cuối tập tin hay có lỗi hàm trả về EOF.
  8. Các hàm nhập xuất theo kiểu văn bản  int fprintf(FILE *fp, “chuỗi định dạng”[, danh sách các đối]); • Giá trị của các đối được ghi lên tập tin fp theo khuôn dạng xác định trong chuỗi định dạng. Nếu thành công hàm trả về một giá trị nguyên bằng số byte ghi lên tập tin, ngược lại hàm trả vế EOF.  int fscanf(FILE *fp, “chuỗi định dạng”[, danh sách các đối]); • Đọc dữ liệu từ tập tin fp, biến đổi theo khuôn dạng xác định trong chuỗi định dạng và lưu kết quả vào đối. Hàm trả về một giá trị bằng số trường đọc được.
  9. Các hàm nhập xuất theo kiểu nhị phân  int fwrite(coid *ptr, int size, int n, FILE *fp); • Ghi n mẫu tin kích thước size byte từ vùng nhớ được trỏ bởi ptr lên tập tin fp. Hàm trả về một gí trị bằng số mẫu tin thực sự ghi được.  int fread(coid *ptr, int size, int n, FILE *fp); • Đọc n mẫu tin kích thước size byte từ tập tin fp chứa vào vùng nhớ được trỏ bởi ptr. Hàm trả về một gí trị bằng số mẫu tin thực sự đọc được.  void rewind(FILE *fp); • Chuyển con trỏ chỉ vị của tập tin fp về đầu tập tin. Khi đó việc truy xuất trên tập tin fp được thực từ đầu tập tin.  int fseek(FILE *fp, long sb, int xp); • Hàm di chuyển con trỏ chỉ vị của tập tin từ vị trí xác định bởi xp qua một số byte bằng giá trị tuyệt đối của sb. Chiều di chuyển là vế cuối tập tin nếu sb dương, ngược lại sẽ di chuyển vế phía đầu tập tin. Nếu thành công hàm trả về giá trị 0, ngươc lại hàm trả vế giá trị khác không.  long ftell(FILE *fp); • Nếu thành công hàm trả về vị trí hiện tại của con trỏ chỉ vị (byte thứ mấy trên tâp tin fp). Số thứ tự của byte được tính từ 0. Nếu có lỗi hàm trả về - 1L.
nguon tai.lieu . vn