index of cnpmpth02001slidepdf

18 11 0
index of cnpmpth02001slidepdf

Đ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

[r]

(1)

Lập trình nâng cao - Chương 09 - Ngô Công Thắng

Chương Kiu d liu tp

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

I Giới thiệu về tệp

1 Khái niệm tệp Cấu trúc tệp Phân loại tệp

(2)

Lập trình nâng cao - Chương 09 - Ngơ Cơng Thắng

1 Khái niệm về tệp

l 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ớ

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

2 Cấu trúc của 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ử không

phải liệu mà mã kết thúc tệp

EOF

45 12 20 25 15 72 81

0 10 12 14 16

Vị trí byte

Con trỏ vị

(3)

Lập trình nâng cao - Chương 09 - Ngô Công Thắng

3 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

trong 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)

4 Khai báo tệp

l 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;

(4)

Lập trình nâng cao - Chương 09 - Ngơ Cơng Thắng

II Tệp nhị phân

1 Ghi liệu tệp nhị phân Đọc liệu từ tệp nhị phân

1 Ghi dữ 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);

trong đó: +) fp trỏ tệp khai báo trỏ tới kiểu FILE;

(5)

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ó sẽ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

1 Ghi dữ liệu tệp nhị phân (tiếp)

l B2: Ghi liệu tệp hàm fwrite()

fwrite(ptr, size, n, fp);

trong đó: +) 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;

(6)

Lập trình nâng cao - Chương 09 - Ngơ Công Thắng 11

1 Ghi dữ liệu tệp nhị phân (tiếp)

l B3: Đóng tệp

fclose(fp);

trong fp trỏ tệp Ví dụ:

fclose(fp);

2 Đọc dữ 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);

trong đó: +) fp trỏ tệp khai báo trỏ tới kiểu FILE;

(7)

Lập trình nâng cao - Chương 09 - Ngơ Cơng Thắng 13

2 Đọc dữ 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);

trong đó: +) ptr trỏ trỏ tới vùng nhớ chứa

các 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

2 Đọc dữ 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)

(8)

Lập trình nâng cao - Chương 09 - Ngơ Cơng Thắng 15

2 Đọc dữ liệu từ tệp nhị phân (tiếp)

l B3: Đóng tệp

fclose(fp);

trong fp trỏ tệp Ví dụ:

fclose(fp);

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á

(9)

Lập trình nâng cao - Chương 09 - Ngô Công Thắng 17

III Tệp văn bản

1 Ghi liệu tệp văn

2 Đọc lại liệu từ tệp văn

1 Ghi dữ liệu tệp văn bản

B1: Mở tệp để ghi hàm fopen()

fp = fopen(Tên tệp, Kiểu truy nhập);

trong đó: +) fp trỏ tệp khai báo trỏ tới kiểu FILE;

(10)

Lập trình nâng cao - Chương 09 - Ngô Công Thắng 19

Các kiểu truy nhập tệp văn bả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ó sẽ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

1 Ghi dữ liệu tệp văn bản (tiếp)

B2: Ghi liệu tệp văn

- Ghi liệu theo định dạng tệp văn giống

như đưa liệu hình

fprintf(fp,dk,…);

trong đó: +) 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

(11)

Lập trình nâng cao - Chương 09 - Ngơ Công Thắng 21

1 Ghi dữ liệu tệp văn bả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);

1 Ghi dữ liệu tệp văn bản (tiếp)

B3: Đóng tệp

(12)

Lập trình nâng cao - Chương 09 - Ngô Công Thắng 23

2 Đọc lại dữ liệu từ tệp văn bản

B1: Mở tệp để đọc hàm fopen() fp = fopen(Tên tệp, Kiểu truy nhập);

trong đó: +) 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”

2 Đọc lại dữ liệu từ tệp văn bản (tiếp)

B2: Đọc lại liệu từ tệp

- Đọc liệu có định dạng

fscanf(fp, dk, …)

trong đó: +) 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

(13)

Lập trình nâng cao - Chương 09 - Ngô Công Thắng 25

2 Đọc lại dữ liệu từ tệp văn bả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);

2 Đọc lại dữ liệu từ tệp văn bản (tiếp)

B3: Đóng tệp

(14)

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ử của tệp

1 Các hàm di chuyển trỏ vị

(15)

Lập trình nâng cao - Chương 09 - Ngô Công Thắng 29

1 Các hàm di chuyển trỏ chỉ vị

l Hàm rewind(fp) chuyển trỏ vị phần tử

đầu tiên tệp, fp trỏ tệp

l Hàm fseek(fp, sb, xp)

trong đó: +) fp trỏ tệp

+) sb số byte cần di chuyển

+) xp vị trí xuất phát xp nhận

trong giá trị sau:

SEEK_SET 0: xuất phát từ đầu tệp

SEEK_CUR 1: xuất phát từ vị trí

con trỏ vị

SEEK_END 2: Xuất phát từ cuối tệp

1 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

(16)

Lập trình nâng cao - Chương 09 - Ngơ Công Thắng 31 Các hàm di chuyển trỏ vị (tiếp)

l 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

EOF

20 15 10

0

2 Truy nhập một phần tử bất kỳ của 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

(17)

Lập trình nâng cao - Chương 09 - Ngơ Cơng Thắng 33

3 Một số hàm thao tác tệp

l Hàm fcloseall() đóng tất tệp mở

l Hàm fflush(con trỏ tệp) làm vùng đệm tệp

l Hàm fflushall() làm vùng đệm tất

các tệp mở

l Hàm ferror(con trỏ tệp) kiểm tra lỗi thao tác tệp,

nếu khơng có lỗi trả 0, có lỗi trả giá trị

khác

l Hàm remove(Tên tệp) xóa tệp

l Hàm rename(Tên tệp cũ, Tên mới);

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 <= k <= n, n số phần tử tệp)

(18)

Bài tập

1) Nhập vào n mặt hàng, mặt hàng có thơng tin tên hàng, số lượng, đơn giá Lưu n mặt hàng tệp nhị phân mathang.dat Đọc lại 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 35

V-Tệp không xác định kiểu

l Coi tất liệu byte nhị phân

Ngày đăng: 05/04/2021, 02:42

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

Tài liệu liên quan