Chương 10 giới thiệu về kiểu tập tin trong C. Trong chương này gồm có các nội dung chính như: Một số khái niệm về tập tin, các thao tác trên tập tin, truy cập tập tin văn bản, truy cập tập tin nhị phân. Mời tham khảo.
LẬP TRÌNH CĂN BẢN Phần - Chương 10 KIỂU TẬP TIN N.C Danh Nội dung chương Một số khái niệm tập tin Các thao tác tập tin Truy cập tập tin văn Truy cập tập tin nhị phân Một số khái niệm tập tin (file) (1) Tại ta cần đến kiểu tập tin? Cho phép lưu trữ liệu nhớ (đĩa) Khi kết thúc chương trình liệu cịn sử dụng nhiều lần Kích thước lớn liệu khơng hạn chế Một số khái niệm tập tin (file) (2) Có loại liệu kiểu tập tin: Tập tin văn (Text File) Dùng để ghi ký tự lên đĩa (dưới dạng mã Ascii) Có chứa: Ký hiệu ‘\n’ : xuống dịng Kí tự EOF (End Of File) có mã Ascii 26: nằm cuối tập tin Tập tin định kiểu (Typed File) Gồm nhiều phần tử có kiểu: char, int, long, struct … Được lưu trữ đĩa dạng chuỗi byte liên tục Tập tin không định kiểu (Untyped File) Gồm cấu trúc liệu mà ta không quan tâm đến nội dung kiểu Ta lưu ý đến yếu tố vật lý tập tin độ lớn, Một số khái niệm tập tin (file)(3) Biến tập tin Được dùng để đại diện cho tập tin Các thao tác lên tập tin thực thông qua biến Con trỏ tập tin Tại thời điểm, có vị trí tập tin mà việc đọc/ghi thơng tin xảy Ta hình dung có trỏ đến vị trí Sau đọc/ghi xong liệu, trỏ chuyển dịch thêm phần tử phía cuối tập tin Sau phần tử liệu cuối tập tin dấu kết thúc tập tin EOF Các thao tác tập tin Khai báo biến tập tin Mở tập tin Đóng tập tin Kiểm tra đến cuối tập tin hay chưa? Di chuyển trỏ tập tin đầu tập tin - Hàm rewind() Khai báo biến tập tin Cú pháp: FILE ; Các biến danh sách phải trỏ phân cách dấu phẩy(,) Ví dụ: FILE *f1,*f2; Mở tập tin (1) Cú pháp: FILE *fopen(char *Path, const char *Mode) Ý nghĩa: Trả trỏ tập tin tập tin mở Trả NULL có lỗi Mở tập tin (2) Path: chuỗi đường dẫn đến tập tin đĩa Type: chuỗi xác định cách thức mà tập tin mở Các giá trị Mode: Mở tập tin (3) Ví dụ: Mở tập tin tên TEST.txt để ghi FILE *f; f = fopen(“TEST.txt”, “w”); if (f!=NULL){ // Các câu lệnh để thao tác với tập tin // Đóng tập tin } => mở tập tin để ghi => tập tin tồn tập tin bị xóa tập tin tạo 10 Truy cập tập tin văn Ghi liệu lên tập tin văn Đọc liệu từ tập tin văn 14 Ghi liệu lên tập tin văn (1) Hàm putc() int putc(int c, FILE *f) Được dùng để ghi ký tự lên tập tin văn mở (liên kết với trỏ f) để làm việc c chứa mã Ascii ký tự Hàm trả EOF gặp lỗi 15 Ghi liệu lên tập tin văn (2) Hàm fputs() int fputs(const char *buffer, FILE *f) Được dùng để ghi chuỗi ký tự chứa vùng đệm lên tập tin văn Hàm trả giá trị buffer chứa chuỗi rỗng trả EOF gặp lỗi 16 Ghi liệu lên tập tin văn (3) Ví dụ: Viết chương trình ghi chuỗi ký tự lên tập tin văn D:\\Baihat.txt 17 Ghi liệu lên tập tin văn (3) Hàm fprintf() fprintf(FILE *f, const char *format, varexpr) Được dùng để ghi liệu có định dạng lên tập tin văn format: chuỗi định dạng (giống với định dạng hàm printf()) varexpr: danh sách biểu thức, biểu thức cách dấu phẩy (,) 18 Đọc liệu từ tập tin văn (1) Hàm getc() int getc(FILE *f) Được dùng để đọc liệu từ tập tin văn mở để làm việc (liên kết với f) Hàm trả mã Ascii ký tự đọc (kể EOF) 19 Đọc liệu từ tập tin văn (2) Hàm fgets() char *fgets(char *buffer, int n, FILE *f) Được dùng để đọc chuỗi ký tự từ tập tin văn mở (liên kết với trỏ f) Đọc đủ n ký tự gặp ký tự xuống dòng ‘\n’ (ký tự đưa vào chuỗi kết quả) hay gặp ký tự kết thúc EOF (ký tự không đưa vào chuỗi kết quả) buffer: đến nhớ đủ lớn chứa ký tự nhận Ký tự NULL (‘\0’) tự động thêm vào cuối chuỗi kết lưu vùng đệm Hàm trả địa vùng đệm không gặp lỗi chưa gặp ký tự kết thúc EOF Ngược lại, hàm trả giá trị NULL 20 Đọc liệu từ tập tin văn (3) Hàm fscanf() fscanf(FILE *f, const char *format, varlist) Được dùng để đọc liệu từ tập tin văn vào danh sách biến theo định dạng format: chuỗi định dạng (giống hàm scanf()) varlist: danh sách biến biến cách dấu phẩy (,) 21 Đọc liệu từ tập tin văn (4) Ví dụ: Viết chương trình chép tập tin D:\Baihat.txt sang tập tin D:\Baica.txt 22 Truy cập tập tin nhị phân Ghi liệu lên tập tin nhị phân Đọc liệu từ tập tin nhị phân Di chuyển trỏ tập tin Ví dụ 23 Ghi liệu lên tập tin nhị phân Hàm fwrite() size_t fwrite(const void *ptr, size_t size, size_t n, FILE *f) ptr: trỏ đến vùng nhớ chứa thông tin cần ghi lên tập tin n: số phần tử ghi lên tập tin size: kích thước phần tử f: trỏ tập tin mở Giá trị trả hàm số phần tử ghi lên tập tin Giá trị n trừ xuất lỗi 24 Đọc liệu từ tập tin nhị phân Hàm fread() size_t fread(const void *ptr, size_t size, size_t n, FILE *f) ptr: trỏ đến vùng nhớ nhận liệu từ tập tin n: số phần tử đọc từ tập tin size: kích thước phần tử f: trỏ tập tin mở Giá trị trả hàm số phần tử đọc từ tập tin Giá trị n hay nhỏ n chạm đến cuối tập tin có lỗi xuất 25 Di chuyển trỏ tập tin Hàm fseek() int fseek(FILE *f, long offset, int whence) Được dùng để di chuyển trỏ tập tin đến vị trí định f: trỏ tập tin thao tác offset: số byte cần dịch chuyển trỏ tập tin kể từ vị trí trước Phần tử vị trí whence: vị trí bắt đầu để tính offset, ta chọn điểm xuất phát Kết trả hàm việc di chuyển thành công Nếu không thành công, giá trị khác (đó mã lỗi) trả 26 Ví dụ Viết chương trình ghi lên tập tin CacSo.Dat giá trị số (thực, nguyên, nguyên dài) Sau đọc số từ tập tin vừa ghi hiển thị lên hình 27 Hết chương 28 ... với tập tin // Đóng tập tin } => mở tập tin để ghi => tập tin tồn tập tin bị xóa tập tin tạo 10 Đóng tập tin Cú pháp: Ghi liệu lại vùng đệm vào tập tin đóng lại tập tin f trỏ tập tin. .. cuối tập tin dấu kết thúc tập tin EOF Các thao tác tập tin Khai báo biến tập tin Mở tập tin Đóng tập tin Kiểm tra đến cuối tập tin hay chưa? Di chuyển trỏ tập tin đầu tập tin - Hàm... trỏ tập tin tập tin mở Trả NULL có lỗi Mở tập tin (2) Path: chuỗi đường dẫn đến tập tin đĩa Type: chuỗi xác định cách thức mà tập tin mở Các giá trị Mode: Mở tập tin (3) Ví dụ: Mở tập tin