Cùng tìm hiểu Tệp dữ liệu là nội dung bài 8 thuộc bộ Bài giảng Tin học đại cương Phần 2 hướng đến trình bày. Ở bài này các bạn sẽ được tìm hiểu về khái niệm và phân loại tệp; các thao tác với tệp.
TIN HỌC ĐẠI CƯƠNG Bài TỆP DỮ LIỆU Nguyễn Thành Kiên Bộ mơn Kỹ thuật máy tính Khoa Cơng nghệ thông tin – ĐHBK HN Bài TỆP DỮ LIỆU 8.1 Khái niệm phân loại tệp 8.2 Các thao tác với tệp 8.2.1 Khai báo 8.2.2 Mở tệp 8.2.3 Truy nhập tệp văn 8.2.4 Truy nhập tệp nhị phân 8.2.5 Đóng tệp Bài TỆP DỮ LIỆU 8.1 Khái niệm phân loại tệp 8.2 Các thao tác với tệp 8.2.1 Khai báo 8.2.2 Mở tệp 8.2.3 Truy nhập tệp văn 8.2.4 Truy nhập tệp nhị phân 8.2.5 Đóng tệp 8.1 Khái niệm phân loại tệp Khái niệm tệp liệu: Tệp liệu (File) tập hợp liệu có liên quan với có kiểu liệu Tệp lưu trữ thiết bị nhớ (đĩa mềm, đĩa cứng, CD-ROM…) với tên để phân biệt với Tệp phương tiện dùng để cất giữ liệu lâu dài 8.1 Khái niệm phân loại tệp Phân loại tệp: dựa theo chất liệu tệp, chia thành loại: Tệp văn (text file): tệp mà phần tử kí tự chữ cái, chữ số, dấu câu, dấu cách số kí tự điều khiển Tệp nhị phân (binary file): tệp mà phần tử số nhị phân mã hóa thơng tin Thơng tin mã hóa bit nhị phân số nguyên, số thực, cấu trúc liệu… Nếu thơng tin mã hóa kí tự tệp nhị phân trở thành tệp văn Vì tệp văn trường hợp riêng tệp nhị phân 8.1 Khái niệm phân loại tệp Tổ chức tệp 8.1 Khái niệm phân loại tệp Con trỏ tệp: Các phần tử tệp tạo thành dãy thời điểm ta truy cập vào phần tử tệp mà Con trỏ tệp (File positon locator) biến đệm để truy cập vào phần tử tệp, đánh dấu vị trí truy cập vào tệp thời điểm xác định Khi mở tệp trỏ tệp ln trỏ vào vị trí tệp Sau thao tác đọc ghi tệp, trỏ tệp tự động dịch chuyển phía cuối tệp Khoảng cách dịch chuyển (tính theo byte) số byte đọc từ tệp ghi lên tệp 8.1 Khái niệm phân loại tệp Quy trình thao tác với tệp: Các thao tác với tệp phải tuân thủ theo trình tự sau: Khai báo tệp Mở tệp để làm việc Truy nhập tệp Đóng tệp Bài TỆP DỮ LIỆU 8.1 Khái niệm phân loại tệp 8.2 Các thao tác với tệp 8.2.1 Khai báo 8.2.2 Mở tệp 8.2.3 Truy nhập tệp văn 8.2.4 Truy nhập tệp nhị phân 8.2.5 Đóng tệp Bài TỆP DỮ LIỆU 8.1 Khái niệm phân loại tệp 8.2 Các thao tác với tệp 8.2.1 Khai báo 8.2.2 Mở tệp 8.2.3 Truy nhập tệp văn 8.2.4 Truy nhập tệp nhị phân 8.2.5 Đóng tệp 10 8.2.3 Truy nhập tệp văn Ghi liệu lên tệp: fprintf() fputs() putc() 22 Hàm fprintf() Cú pháp khai báo: t fprintf(FILE* con_trỏ_tệp, xâu_định_dạng, [danh_sách_tham_số] Hàm fprintf() có chức hồn tồn tương tự hàm printf(), có chỗ khác hàm printf() ghi liệu lên thiết bị chuẩn (stdin, thơng thường hình) cịn fprintf() ghi liệu lên tệp định tham số con_trỏ_tệp Kết trả về: thực thành công, hàm fprintf() trả giá trị nguyên số bytes liệu ghi lên tệp Nếu thực khơng thành cơng hàm fprintf() trả giá trị EOF 23 Hàm fputs() Cú pháp khai báo: int fputs(char* xâu_kí_tự, FILE* con_trỏ_tệp); Hàm fputs() ghi nội dung xâu_kí_tự lên tệp tương ứng với con_trỏ_tệp, nhiên khác với hàm puts() chỗ khơng tự động ghi thêm kí tự xuống dòng lên tệp Giá trị trả về: thực thành cơng hàm fputs() trả kí tự cuối mà ghi lên tệp, cịn khơng thành cơng trả giá trị EOF 24 Hàm putc() Cú pháp khai báo: int putc(int ch, FILE* con_trỏ_tệp); Hàm putc()ghi nội dung kí tự chứa biến int ch (kí tự chứa byte thấp biến ch) lên tệp tương ứng với con_trỏ_tệp Giá trị trả về: thành công hàm putc() trả số nguyên (kiểu int) số thứ tự bảng mã ASCII kí tự ghi lên tệp Nếu khơng thành cơng trả giá trị EOF 25 Một số thao tác khác Hàm feof() int feof(FILE* con_trỏ_tệp); Hàm feof() dùng để kiểm tra xem duyệt đến vị trí cuối tệp hay chưa Hàm kiểm tra xem khối liệu đọc vào lần thực gần có phần tử EOF hay khơng, có hàm feof() trả giá trị khác 0, chưa trả giá trị 26 fseek(f,10,SEEK_SET); Một số thao tác khác Hàm fseek() int fseek(FILE* con_trỏ_tệp, long int n, int vị_trí_ban_đầu); Hàm fseek() dùng để dịch chuyển trỏ tệp từ vị_trí_ban_đầu khoảng cách có âm độ dài nnbytes Giá trị trả về: hàm fseek() trả giá trị việc dịch chuyển thành công, trả giá trị khác việc dịch chuyển Giá trị Ý nghĩa khơngTên thành cơng SEEK_SET Vị trí ban đầu đầu tệp SEEK_CUR Vị trí ban đầu vị trí thời trỏ vị trí làm việc tệp SEEK_END Vị trí ban đầu cuối tệp 27 Một số thao tác khác Hàm rewind() void rewind(FILE* con_trỏ_tệp); Hàm rewind() đưa trỏ tệp đầu tệp Với file_ptr biến trỏ tệp, hàm rewind(file_ptr) tương đương với fseek(file_ptr,0,SEEK_SET); Hàm rewind() khơng có giá trị trả 28 Bài TỆP DỮ LIỆU 8.1 Khái niệm phân loại tệp 8.2 Các thao tác với tệp 8.2.1 Khai báo 8.2.2 Mở tệp 8.2.3 Truy nhập tệp văn 8.2.4 Truy nhập tệp nhị phân 8.2.5 Đóng tệp 29 int a[3]; fread(a,2,3,f); double d; fread(&d,4,1,f); 8.2.4 Truy nhập tệp nhị phân Đọc liệu tệp int fread(void *địa_chỉ_biến, int số_byte, int số_mục, FILE* con_trỏ_tệp Hàm fread() đọc từ tệp khối liệu kích thước số_mục số_byte bytes, sau ghi khối liệu lên vùng nhớ có địa địa_chỉ_biến Kết trả về: việc đọc liệu từ tệp thực thành công, hàm fread() trả giá trị nguyên số mục (không phải số bytes) đọc từ tệp Nếu thực khơng thành cơng hàm fread() trả giá trị 30 8.2.4 Truy nhập tệp nhị phân Ghi liệu tệp nt fwrite(void *địa_chỉ_biến, int số_byte, int số_mục, FILE* Hàm fwrite() đọc từ nhớ khối liệu có địa bắt đầu địa_chỉ_biến có kích thước số_byte số_mục bytes, sau ghi khối liệu lên tệp Kết trả về: việc ghi liệu lên tệp thực thành công, hàm fwrite() trả giá trị nguyên số mục (không phải số bytes) ghi lên tệp Nếu thực khơng thành cơng hàm fwrite() trả giá trị 31 8.2.4 Truy nhập tệp nhị phân Dịch chuyển trỏ tệp Tương tự tệp văn bản, ta dùng hàm fseek() rewind() để dịch chuyển trỏ tệp tệp nhị phân Hàm fseek() dùng với tệp nhị phân khơng phải lưu ý dùng với tệp văn Nhận xét: Các hàm cặp hàm fread() – fwrite(), fscanf() – fprintf(), fputs() – fgets(), getc() – putc() có chức đối ngẫu 32 Bài TỆP DỮ LIỆU 8.1 Khái niệm phân loại tệp 8.2 Các thao tác với tệp 8.2.1 Khai báo 8.2.2 Mở tệp 8.2.3 Truy nhập tệp văn 8.2.4 Truy nhập tệp nhị phân 8.2.5 Đóng tệp 33 8.2.5 Đóng tệp Cú pháp: int fclose(FILE* ); Hàm fclose() trả lại giá trị đóng thành cơng, trả giá trị EOF khơng đóng tệp thành cơng 34 Bài tập Bài 1: Viết chương trình copy file: Nhập vào từ bàn phím xâu kí tự đường dẫn file nguồn file đích Copy nội dung file nguồn sang file đích Bài 2: Viết chương trình ghép nối nội dung file Nhập vào từ bàn phím xâu kí tự đường dẫn file nguồn file đích Ghép nội dung file nguồn vào cuối file đích 35 Bài tập Bài 3: Một tệp văn tên "thisinh.txt" lưu DL thí sinh có tổ chức sau: Dịng đầu tên lưu số lượng thí sinh Các dịng dịng lưu thơng tin thí sinh gồm có: số báo danh (10 kí tự), họ tên (30 kí tự), điểm thi (4 kí tự với kí tự đánh cho phần thập phân, kí tự cho dấu "." dùng để ngăn cách kí tự cho phần nguyên) Hãy viết chương trình Đọc liệu từ tệp "thisinh.txt" hiển thị hình danh sách thí sinh theo quy cách: So thu tu So bao danh Ho ten Điem thi Trong số thứ tự chiếm vị trí, số báo danh chiếm 10 vị trí, họ tên chiếm 30 vị trí, điểm thi chiếm vị trí với vị trí dành cho phần thập phân Sắp xếp thí sinh theo kết điểm thi tăng dần lưu vào tệp "thisinh2.txt" với quy cách giống quy cách tệp "thisinh.txt" 36 .. .Bài TỆP DỮ LIỆU 8. 1 Khái niệm phân loại tệp 8. 2 Các thao tác với tệp 8. 2.1 Khai báo 8. 2.2 Mở tệp 8. 2.3 Truy nhập tệp văn 8. 2.4 Truy nhập tệp nhị phân 8. 2.5 Đóng tệp Bài TỆP... LIỆU 8. 1 Khái niệm phân loại tệp 8. 2 Các thao tác với tệp 8. 2.1 Khai báo 8. 2.2 Mở tệp 8. 2.3 Truy nhập tệp văn 8. 2.4 Truy nhập tệp nhị phân 8. 2.5 Đóng tệp Bài TỆP DỮ LIỆU 8. 1 Khái... *f2; 11 Bài TỆP DỮ LIỆU 8. 1 Khái niệm phân loại tệp 8. 2 Các thao tác với tệp 8. 2.1 Khai báo 8. 2.2 Mở tệp 8. 2.3 Truy nhập tệp văn 8. 2.4 Truy nhập tệp nhị phân 8. 2.5 Đóng tệp 12 8. 2.2