C09-Kieu du lieu tep tài liệu, giáo án, bài giảng , luận văn, luận án, đồ án, bài tập lớn về tất cả các lĩnh vực kinh tế...
Chương KIỂU DỮ LIỆU TỆP (File) Lê Quý Tài quytai3985@gmail.com Hà Nội – 2012 Nội dung Khái niệm kiểu tệp Các thao tác tệp Tệp văn Tệp nhị phân Các hàm xử lý tệp 12/12/17 Truyền tham số tệp cho hàm Chương 9-Kiểu liệu tệp 2/32 Khái niệm kiểu tệp Tệp Là tập hợp liệu có liên quan với có kiểu nhóm lại với tạo thành dãy Tệp chứa thiết bị nhớ Kích thước số lượng gần khơng hạn chế Phân loại tệp Theo cách truy cập Tệp truy cập tuần tự: việc đọc phần tử tệp bắt buộc phải qua phần tử trước Tệp truy cập ngẫu nhiên: truy xuất phần tử tệp thông qua số thứ tự phần tử tệp 12/12/17 Chương 9-Kiểu liệu tệp 3/32 Khái niệm kiểu tệp (tt) Phân loại tệp Theo chất liệu Tệp văn bản: chứa kí tự bảng mã ASCII khơng kể đến kí tự điều khiển Dữ liệu lưu thành dòng, dòng kết thúc ký tự xuống dòng CR (Carriage Return – đầu dòng, mã 10) LF (Line Feed – xuống dòng, mã 13) Tệp văn kết thúc kí tự EOF (End Of File) có mã 26 (Ctrl + Z) Ví dụ: Các tệp văn (text) (*.txt) Tệp nhị phân: phần tử số nhị phân, chứa nhiều liệu có mã kí tự điều khiển Ví dụ: Các tệp chương trình (*.exe, *.com…) 12/12/17 Chương 9-Kiểu liệu tệp 4/32 Một số khái niệm Biến tệp Là biến thuộc kiểu tệp dùng đại diện cho tệp tin Dữ liệu chứa tệp truy xuất thông qua thao tác với biến tệp Con trỏ tệp Dùng để xác định vị trí phần tử để đọc ghi liệu tệp Khi tệp mở để đọc ghi trỏ tệp ln vị trí đầu tệp Mỗi đọc ghi tệp trỏ tệp tự động tăng lên khoảng theo số byte vừa đọc ghi tệp 12/12/17 Chương 9-Kiểu liệu tệp 5/32 Các thao tác tệp Các bước để xử lý tệp 1.Khai báo biến tệp 2.Mở tệp để ghi đọc 3.Xử lý liệu tệp 4.Đóng tệp Các hàm thao tác với tệp thư viện stdio.h 12/12/17 Chương 9-Kiểu liệu tệp 6/32 2.1 Khai báo biến tệp Cú pháp FILE *; Trong đó, FILE từ khố ln phải có viết dạng chữ hoa Các biến tệp biến trỏ Ví dụ: FILE *f1,*f2; // Khai báo biến tệp f1 f2 12/12/17 Chương 9-Kiểu liệu tệp 7/32 2.2 Mở tệp Cú pháp =fopen(,); Trong đó: Tên tệp: đường dẫn đến tệp đĩa (lưu ý, dấu \ ghi \\) Tên tệp đặt theo quy tắc đặt tên Kiểu xử lý tệp: xác định cách thức mà tệp mở fopen trả trỏ tệp, có lỗi trỏ trả NULL Ví dụ: f1=fopen(“C:\\TC\\VIDU.TXT”,”w”); Mở tệp VIDU.TXT để ghi f2=fopen(“C:\\TC\\VIDU.TXT”,”r”); Mở tệp VIDU.TXT để đọc 12/12/17 Chương 9-Kiểu liệu tệp 8/32 Các chế độ xử lý tệp Chế độ 12/12/17 Ý nghĩa r Mở tệp văn để đọc w Mở tệp văn để ghi, ghi đè lên tệp có a Mở tệp văn ghi nối vào cuối tệp, chưa có tạo r+ Mở tệp văn để đọc/ghi w+ Mở tệp văn để ghi/đọc, ghi đè lên tệp có a+ Mở tệp văn tạo mớiđể đọc ghi nối vào cuối rb Mở tệp nhị phân để đọc wb Mở tệp nhị phânđể ghi, ghi đè lên tệp có ab Ghi nối vào tệp nhị phân r+b Mở tệp nhị phân để đọc/ghi w+b Tạo tệp nhị phân để đọc/ghi a+b Nối vào hay tạo tệp nhị phân Chương 9-Kiểu liệu tệp 9/32 Ví dụ mở tệp Mở tệp VIDU.TXT để ghi FILE *f; f = fopen(“VIDU.txt”, “w”); if (f!=NULL) { /* Các câu lệnh để thao tác với tệp*/ /* Đóng tệp */ } else printf(“Loi – Khong mo duoc tep!”); Chú ý: Khi mở tệp để ghi mà tệp tồn tệp bị xoá thay tệp khác 12/12/17 Khi mở tệp để đọc tệp phải tồn tại, khơng có lỗi Chương 9-Kiểu liệu tệp 10/32 Tệp nhị phân (tt) Đọc liệu từ tệp nhị phân Hàm fread(địa vùng nhớ nhận liệu,kích thước phần tử, số phần tử,f); Đọc từ tệp f số lượng phần tử có kích thước phần tử lưu vào vùng nhớ nhận liệu Giá trị trả số phần tử đọc từ tệp Ví dụ: g=fopen(“C:\\SN100.txt”,”rb”); { fread(&i,sizeof(int),1,g); if (!feof(g)) printf(“%d”,i); } while (!foef(g)); 12/12/17 Chương 9-Kiểu liệu tệp 18/32 Di chuyển trỏ tệp Hàm fseek fseek(f,No*Kích thước, vị trí) Trong đó: 12/12/17 f: trỏ tệp No: số thứ tự phần tử tệp (phần tử đánh số Vị trí là: SEEK_SET 0: di chuyển từ đầu tệp SEEK_CUR 1: di chuyển từ vị trí SEEK_END 2: di chuyển từ cuối tệp Hàm trả di chuyển thành công, trả khác ngược lại Chương 9-Kiểu liệu tệp 19/32 Di chuyển trỏ tệp (tt) Ví dụ: Truy cập trực tiếp để cập nhật liệu main() { FILE *f; int no,number; f=fopen("C:\\SN100.txt","r+b"); { printf("Vi tri can cap nhat: "); scanf("%d",&no); printf("Gia tri can cap nhat: "); scanf("%d",&number); if (no>0) {fseek(f,sizeof(int)*(no-1),SEEK_SET); fwrite(&number,sizeof(int),1,f);} } while (no!=0); fclose(f); 12/12/17 Chương 9-Kiểu liệu tệp 20/32 Ví dụ - Quản lý sinh viên 12/12/17 Viết chương trình quản lý sinh viên Mỗi sinh viên cần quản lý thơng tin: mã sinh viên họ tên Viết chương trình cho phép lựa chọn chức năng: Nhập danh sách sinh viên từ bàn phím ghi lên tập tin SinhVien.dat Đọc liệu từ tập tin SinhVien.dat hiển thị danh sách lên hình Tìm kiếm họ tên sinh viên dựa vào mã sinh viên nhập từ bàn phím Chương 9-Kiểu liệu tệp 21/32 Ví dụ - Quản lý sinh viên (tt) #include #include #include typedef struct { char Ma[10]; char HoTen[40]; } SinhVien; void WriteFile(char *FileName) { FILE *f; int n,i; SinhVien sv; f=fopen(FileName,"wb"); printf("Nhap bao nhieu sinh vien?"); scanf("%d",&n); fflush(stdin); 12/12/17 Chương 9-Kiểu liệu tệp 22/32 Ví dụ - Quản lý sinh viên (tt) for(i=1;i