Bài giảng lập trình c chương 09 GV ngô công thắng

18 23 0
Bài giảng lập trình c chương 09   GV  ngô công thắng

Đ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

Chương Kiểu liệu tệp I Giới thiệu tệp II Tệp nhị phân III Tệp văn IV Truy nhập trực tiếp phần tử tệp V Tệp khơng xác định kiểu liệu Lập trình nâng cao - Chương 09 - Ngô Công Thắng I Giới thiệu tệp Khái niệm tệp Cấu trúc tệp Phân loại tệp Khai báo tệp Lập trình nâng cao - Chương 09 - Ngô Công Thắng Khái niệm tệp Kiểu tệp bao gồm tập hữu hạn phần tử có kiểu liệu lưu trữ nhớ ngồi l Số phần tử tệp khơng cần xác định khai báo biến tệp l Các phần tử tệp lưu trữ nhớ Đây đặc điểm khác với tất kiểu liệu khác l Lập trình nâng cao - Chương 09 - Ngô Công Thắng Cấu trúc tệp l Các phần tử tệp xếp thành dãy byte liên tiếp Sau phần tử liệu cuối phần tử EOF Phần tử liệu mà mã kết thúc tệp Vị trí byte 10 11 12 13 14 15 16 45 12 20 25 15 72 81 EOF Con trỏ vị Lập trình nâng cao - Chương 09 - Ngô Công Thắng Phân loại tệp l Dựa vào cách lưu trữ liệu tệp ta có loại tệp sau: § § Tệp nhị phân (binary): Dữ liệu ghi tệp nhị phân có dạng byte nhị phân giống nhớ Tệp văn (text): Dữ liệu ghi tệp thành ký tự bảng mã ASCII Trên tệp văn có mã xuống dịng gồm ký tự LF (mã 10) CR (mã 13) Lập trình nâng cao - Chương 09 - Ngơ Cơng Thắng Khai báo tệp Kiểu tệp trình biên dịch định nghĩa với tên chuẩn FILE l Khai báo tệp ta khai báo biến trỏ trỏ tới kiểu FILE Ví dụ: FILE *f; l Con trỏ tệp trỏ tới vùng nhớ chứa thông tin tệp nhớ ngồi l Lập trình nâng cao - Chương 09 - Ngô Công Thắng II Tệp nhị phân Ghi liệu tệp nhị phân Đọc liệu từ tệp nhị phân Lập trình nâng cao - Chương 09 - Ngơ Cơng Thắng Ghi liệu tệp nhị phân l B1: Mở tệp để ghi hàm fopen() fp = fopen(Tên tệp, Kiểu truy nhập); đó: +) fp trỏ tệp khai báo trỏ tới kiểu FILE; +) Tên tệp xâu biến xâu Trong tên tệp có đường dẫn + Kiểu truy nhập tệp xâu diễn tả cách truy nhập vào tệp Lập trình nâng cao - Chương 09 - Ngô Công Thắng Các kiểu truy nhập tệp nhị phân Kiểu Ý nghĩa “wb” Mở tệp để ghi theo kiểu nhị phân Nếu tệp có bị xóa “rb” Mở tệp để đọc theo kiểu nhị phân Nếu tệp khơng có sinh lỗi “ab” Mở tệp theo kiểu nhị phân để ghi bổ sung vào cuối tệp Nếu tệp chưa có tạo tệp “r+b” Mở tệp để đọc/ghi theo kiểu nhị phân Nếu tệp khơng có sinh lỗi “w+b” Mở tệp để đọc/ghi theo kiểu nhị phân Nếu tệp có bị xóa “a+b” Mở tệp theo kiểu nhị phân để đọc/ghi bổ sung vào cuối tệp Nếu tệp chưa có tạo tệp Lập trình nâng cao - Chương 09 - Ngô Công Thắng Ghi liệu tệp nhị phân (tiếp) l B2: Ghi liệu tệp hàm fwrite() fwrite(ptr, size, n, fp); đó: +) ptr trỏ trỏ tới vùng nhớ chứa phần tử liệu cần ghi +) size kích thước phần tử theo byte +) n số phần tử cần ghi +) fp trỏ tệp Nếu có lỗi khơng ghi được, hàm trả Nếu khơng có lỗi hàm trả số phần tử ghi Ví dụ: FILE *fp = fopen(“songuyen.dat”,”wb”); int a=200; fwrite(&a,sizeof(a),1,fp); Lập trình nâng cao - Chương 09 - Ngơ Cơng Thắng 10 Ghi liệu tệp nhị phân (tiếp) l B3: Đóng tệp fclose(fp); fp trỏ tệp Ví dụ: fclose(fp); Lập trình nâng cao - Chương 09 - Ngô Công Thắng 11 Đọc liệu từ tệp nhị phân l B1: Mở tệp để đọc hàm fopen() fp = fopen(Tên tệp, Kiểu truy nhập); đó: +) fp trỏ tệp khai báo trỏ tới kiểu FILE; +) Tên tệp xâu biến xâu Trong tên tệp có đường dẫn + Kiểu truy nhập tệp xâu diễn tả cách truy nhập vào tệp Lập trình nâng cao - Chương 09 - Ngơ Công Thắng 12 Đọc liệu từ tệp nhị phân (tiếp) l B2: Đọc liệu từ tệp hàm fread() fread(ptr, size, n, fp); đó: +) ptr trỏ trỏ tới vùng nhớ chứa phần tử liệu đọc +) size kích thước phần tử theo byte +) n số phần tử cần đọc +) fp trỏ tệp Hàm fread đọc n phần tử tệp kể từ vị trí trỏ vị Hàm trả số phần tử đọc Lập trình nâng cao - Chương 09 - Ngô Công Thắng 13 Đọc liệu từ tệp nhị phân (tiếp) l B2: Đọc liệu từ tệp hàm fread() fread(ptr, size, n, fp); Nếu trỏ vị cuối tệp (EOF) mà đọc sinh lỗi Trước đọc tệp cần kiểm tra trỏ vị cuối tệp chưa => dùng hàm feof(con trỏ tệp) Nên đọc phần tử tệp, trước đọc cần kiểm tra vị trí trỏ vị Lập trình nâng cao - Chương 09 - Ngô Công Thắng 14 Đọc liệu từ tệp nhị phân (tiếp) l B3: Đóng tệp fclose(fp); fp trỏ tệp Ví dụ: fclose(fp); Lập trình nâng cao - Chương 09 - Ngơ Cơng Thắng 15 Ví dụ Viết chương trình tạo tệp “sonuyen.dat” chứa n số nguyên nhập vào từ bàn phím Đọc lại số nguyên từ tệp đưa hình BTVN: Tạo tệp nhị phân mathang.bin chứa thông tin n mặt hàng, mặt hàng có thơng tin tên hàng, số lượng, đơn giá Đọc tệp tính tổng tiền n mặt hàng Lập trình nâng cao - Chương 09 - Ngô Công Thắng 16 III Tệp văn Ghi liệu tệp văn Đọc lại liệu từ tệp văn Lập trình nâng cao - Chương 09 - Ngơ Cơng Thắng 17 Ghi liệu tệp văn B1: Mở tệp để ghi hàm fopen() fp = fopen(Tên tệp, Kiểu truy nhập); đó: +) fp trỏ tệp khai báo trỏ tới kiểu FILE; +) Tên tệp xâu biến xâu Trong tên tệp có đường dẫn + Kiểu truy nhập tệp xâu diễn tả cách truy nhập vào tệp Ở ta dùng “wt” “at” Lập trình nâng cao - Chương 09 - Ngơ Cơng Thắng 18 Các kiểu truy nhập tệp văn Kiểu Ý nghĩa “wt” Mở tệp để ghi theo kiểu văn Nếu tệp có bị xóa “rt” Mở tệp để đọc theo kiểu văn Nếu tệp khơng có sinh lỗi “at” Mở tệp theo kiểu văn để ghi bổ sung vào cuối tệp Nếu tệp chưa có tạo tệp “r+t” Mở tệp để đọc/ghi theo kiểu văn Nếu tệp khơng có sinh lỗi “w+t” Mở tệp để đọc/ghi theo kiểu văn Nếu tệp có bị xóa Lập trình nâng cao - Chương 09 - Ngô Công Thắng 19 Ghi liệu tệp văn (tiếp) B2: Ghi liệu tệp văn - Ghi liệu theo định dạng tệp văn giống đưa liệu hình fprintf(fp,dk,…); đó: +) fp trỏ tệp +) dk xâu ký tự có chứa đặc tả chuyển dạng liệu +) … đối mà giá trị chúng cần ghi tệp Ví dụ: fprintf(fp,“x= %d y= %d”,x,y); Lập trình nâng cao - Chương 09 - Ngô Công Thắng 20 Ghi liệu tệp văn (tiếp) B2: Ghi liệu tệp văn - Ghi xâu ký tự tệp văn fputs(s,fp); đó: +) fp trỏ tệp +) s xâu biến xâu Hàm fputs() không ghi ký tự ‘\0’ tệp Ví dụ: fputs(“Hung Yen”,fp); Lập trình nâng cao - Chương 09 - Ngô Công Thắng 21 Ghi liệu tệp văn (tiếp) B3: Đóng tệp fclose(fp); fp trỏ tệp Lập trình nâng cao - Chương 09 - Ngô Công Thắng 22 Đọc lại liệu từ tệp văn B1: Mở tệp để đọc hàm fopen() fp = fopen(Tên tệp, Kiểu truy nhập); đó: +) fp trỏ tệp khai báo trỏ tới kiểu FILE; +) Tên tệp xâu biến xâu Trong tên tệp có đường dẫn +) Kiểu truy nhập tệp xâu diễn tả cách truy nhập vào tệp Ở ta dùng “rt” Lập trình nâng cao - Chương 09 - Ngô Công Thắng 23 Đọc lại liệu từ tệp văn (tiếp) B2: Đọc lại liệu từ tệp - Đọc liệu có định dạng fscanf(fp, dk, …) đó: +) fp trỏ tệp +) dk xâu ký tự có chứa đặc tả chuyển dạng liệu +) … địa vùng nhớ chứa liệu đọc Ví dụ: fscanf(fp,“%d”,&b); Lập trình nâng cao - Chương 09 - Ngô Công Thắng 24 Đọc lại liệu từ tệp văn (tiếp) B2: Đọc lại liệu từ tệp - Đọc xâu ký tự từ tệp fgets(s, n, fp); đó: +) s biến xâu ký tự +) n kích thước biến xâu, hàm đọc tối đa n-1 ký tự từ tệp, thêm ký tự ‘\0’ vào xâu +) fp trỏ tệp Ví dụ: fgets(s, sizeof(s), fp); Lập trình nâng cao - Chương 09 - Ngô Công Thắng 25 Đọc lại liệu từ tệp văn (tiếp) B3: Đóng tệp fclose(fp); fp trỏ tệp Lập trình nâng cao - Chương 09 - Ngơ Cơng Thắng 26 Ví dụ 1) Viết chương trình tạo tệp văn 'baitho.txt' chứa n câu thơ Đọc lại thơ từ tệp đưa hình 2) Cho tệp văn input.txt chứa tọa độ điểm A B mặt phẳng Đọc tọa độ điểm tính khoảng cách AB Ghi kết tệp kq.txt Lập trình nâng cao - Chương 09 - Ngô Công Thắng 27 IV Truy nhập trực tiếp phần tử tệp Các hàm di chuyển trỏ vị Truy nhập phần tử tệp Một số hàm thao tác tệp Lập trình nâng cao - Chương 09 - Ngô Công Thắng 28 Các hàm di chuyển trỏ vị l l Hàm rewind(fp) chuyển trỏ vị phần tử tệp, fp trỏ tệp Hàm fseek(fp, sb, xp) đó: +) fp trỏ tệp +) sb số byte cần di chuyển +) xp vị trí xuất phát xp nhận giá trị sau: SEEK_SET 0: xuất phát từ đầu tệp SEEK_CUR 1: xuất phát từ vị trí trỏ vị SEEK_END 2: Xuất phát từ cuối tệp Lập trình nâng cao - Chương 09 - Ngô Công Thắng 29 Các hàm di chuyển trỏ vị (tiếp) Hàm fseek() di chuyển trỏ vị tệp fp từ vị trí xác định xp qua số byte sb Chiều di chuyển cuối tệp sb dương, đầu tệp sb âm Hàm trả di chuyển thành công, trả giá trị khác không di chuyển không thành công Chú ý: Không nên dùng fseek cho tệp văn Lập trình nâng cao - Chương 09 - Ngô Công Thắng 30 Các hàm di chuyển trỏ vị (tiếp) Hàm ftell(fp) cho biết vị trí trỏ vị Ứng dụng: 1) Xác định kích thước tệp 2) Xác định số phần tử tệp l 20 15 10 EOF Lập trình nâng cao - Chương 09 - Ngơ Cơng Thắng 31 Truy nhập phần tử tệp B1: Mở tệp với kiểu truy nhập “r+b” B2: Di chuyển trỏ vị tới phần tử cần đọc/ghi B3: Đọc/ghi phần tử B4: Đóng tệp Lập trình nâng cao - Chương 09 - Ngơ Cơng Thắng 32 Một số hàm thao tác tệp l l l l l l Hàm fcloseall() đóng tất tệp mở Hàm fflush(con trỏ tệp) làm vùng đệm tệp Hàm fflushall() làm vùng đệm tất tệp mở Hàm ferror(con trỏ tệp) kiểm tra lỗi thao tác tệp, khơng có lỗi trả 0, có lỗi trả giá trị khác Hàm remove(Tên tệp) xóa tệp Hàm rename(Tên tệp cũ, Tên mới); Lập trình nâng cao - Chương 09 - Ngơ Cơng Thắng 33 Ví dụ 1) Cho tệp nhị phân chứa phần tử số nguyên Thay phần tử thứ k giá trị x nhập vào từ bàn phím (1

Ngày đăng: 16/04/2021, 17:53

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan