1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng Kỹ thuật lập trình Chương 6 Trần Minh Thái

35 343 0

Đ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

Thông tin cơ bản

Định dạng
Số trang 35
Dung lượng 121,75 KB

Nội dung

Bài giảng Kỹ thuật lập trình Chương 6 Thao tác trên tập tin cung cấp cho người học các kiến thức Khái niệm, khai báo, các thao tác trên tập tin. Cuối| Bài giảng có phần bài tập giúp người học có thể ôn tập và củng cố kiến thức đã học.

Lập trình C Chương Thao tác tập tin (3 tiết) Trần Minh Thái Email: minhthai@huflit.edu.vn Website: www.minhthai.edu.vn Cập nhật: 20/03/2017 Nội dung • Khái niệm • Khai báo • Các thao tác tập tin • Bài tập KHÁI NIỆM Khái niệm File cho phép lưu trữ liệu nhớ (đĩa) File lưu liệu kích thước lớn với số lượng phần tử không hạn chế (chỉ bị hạn chế dung lượng nhớ ngoài) Khái niệm • Biến File: biến thuộc kiểu liệu tập tin dùng để đại diện cho tập tin • Con trỏ tập tin: Xác định vị trí tập tin thao tác đọc /ghi • Phân loại File: • File text • File nhị phân File text • Dùng để ghi ký tự lên đĩa dạng mã Ascii • Dữ liệu tập tin lưu trữ thành dòng, dòng kết thúc ký tự xuống dòng (new line), ký hiệu ‘\n’ • Mỗi tập tin kết thúc ký tự EOF (End Of File) có mã Ascii 26 (xác định tổ hợp phím Ctrl + Z) File nhị phân • Một dãy bytes liên tục • Nội dung liệu mã hóa CÁC THAO TÁC TRÊN FILE Các thao tác thao tác File Khai báo trỏ file Mở file Thao tác đọc/ ghi file Đóng file Khai báo trỏ file • 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; 10 Các thao tác khác File Kiểm tra vị trí cuối File • Cú pháp: int feof(FILE *f) • Trả EOF cuối tập tin • Ngược lại trả Di chuyển trỏ vị trí đầu File • Cú pháp: void rewind(FILE *f) 21 ĐỌC, GHI KIỂU CẤU TRÚC TRÊN FILE Đọc kiểu cấu trúc file int fread (void *p, int size , int n, FILE *fp); • p: trỏ trỏ tới vùng nhớ chứa liệu đọc • size: kích thước mẫu tin (byte) • n: số mẫu tin cần đọc • fp: trỏ file Hàm trả giá trị = số mẫu tin thực đọc 23 Ghi kiểu cấu trúc file int fwrite (void *p, int size , int n , FILE *fp); • p: trỏ trỏ tới vùng nhớ chứa liệu cần ghi • size: kích thước mẫu tin (byte) • n: số mẫu tin cần ghi • fp: trỏ file Hàm trả giá trị = số mẫu tin thực ghi 24 Ví dụ Viết chương trình phát sinh ngẫu nhiên danh sách tọa độ điểm mặt phẳng Oxy (Giá trị trục tọa độ phát sinh khoảng [-50 50]) • Lưu danh sách vào file “dsToaDo.inp” • Đọc file “dsToaDo.inp” lưu vào file “toaDoDuong.out” tọa độ điểm thuộc phần tư thứ 25 Khai báo cấu trúc hàm struct structPoint { int x; int y; }; typedef structPoint MyPoint; void void void void void PhatSinh(MyPoint *a, int n); XuatMang(MyPoint *a, int n); LuuFile(MyPoint *a, int n, char *fileName); LuuToaDoDuong(char *fileIn, char *fileOut); XuatFile(char *fileName); 26 void PhatSinh(MyPoint *a, int n) { for (int i = 0; i < n; i++) { a[i].x = rand() % 51 - rand() % 51; a[i].y = rand() % 51 - rand() % 51; } } void XuatMang(MyPoint *a, int n) { for (int i = 0; i < n; i++) { printf("(%d, %d); ", a[i].x, a[i].y); } } void LuuFile(MyPoint *a, int n, char *fileName) { FILE *fp; fp = fopen(fileName, "wb"); for (int i = 0; i < n; i++) { fwrite(&a[i], sizeof(MyPoint), 1, fp); } fclose(fp); } void LuuToaDoDuong(char *fileIn, char *fileOut) { FILE *fIn, *fOut; fIn = fopen(fileIn, "rb"); fOut = fopen(fileOut, "wb"); MyPoint d; while (fread(&d, sizeof(MyPoint), 1, fIn) > 0) { if (d.x > && d.y > 0) fwrite(&d, sizeof(MyPoint), 1, fOut); } _fcloseall(); } void XuatFile(char *fileName) { FILE *fp; fp = fopen(fileName, "rb"); MyPoint d; while (fread(&d, sizeof(MyPoint), 1, fp) > 0) { printf("(%d, %d); ", d.x, d.y); } } int main() { MyPoint *a; int n; srand((unsigned int) time(NULL)); printf("So luong toa can phat sinh: "); scanf("%d", &n); a = (MyPoint *) malloc(n * sizeof(MyPoint)); PhatSinh(a, n); printf("\n***Danh sach toa duoc phat sinh:\n"); XuatMang(a, n); LuuFile(a, n, "dsToaDo.inp"); LuuToaDoDuong("dsToaDo.inp", "toaDoDuong.out"); //Kiem tra ket qua luu file printf("\n***Danh sach toa file:\n"); XuatFile("dsToaDo.inp"); printf("\n***Danh sach toa duong file:\n"); XuatFile("toaDoDuong.out"); free(a); getch(); return 0; } Các thao tác khác File • Xóa File remove (đường dẫn tập tin); • Đổi tên File rename (tên tập tin cũ, tên tập tin mới); • Cho biết vị trí trỏ File ftell (FILE *); 32 Các thao tác khác File Di chuyển trỏ File từ vị trí xuất phát cho trước fseek (FILE *, độ dời, vị trí xuất phát); Các vị trí: • SEEK_SET đầu tập tin (giá trị 0) • SEEK_END cuối tập tin (giá trị 2) • SEEK_CUR vị trí hiện hành (giá trị 1) Độ dời tính byte 33 Bài tập Trong tập ví dụ danh sách tọa độ điểm mặt phẳng, bổ sung thêm hàm thực yêu cầu sau: Nhập tọa độ điểm từ bàn phím Bổ sung tọa độ điểm vào cuối file “dsToaDo.inp” Nếu tọa độ điểm vừa nhập có tọa độ thuộc phần tư thứ bổ sung thêm vào cuối file “toaDoDuong.out” Xóa tọa độ điểm d cho trước (nếu có xuất hiện) file “dsToaDo.inp” “toaDoDuong.out” 34 Q&A 35 ... giá trị = số mẫu tin thực ghi 24 Ví dụ Viết chương trình phát sinh ngẫu nhiên danh sách tọa độ điểm mặt phẳng Oxy (Giá trị trục tọa độ phát sinh khoảng [-5 0 50]) • Lưu danh sách vào file “dsToaDo.inp”... *fileOut); XuatFile(char *fileName); 26 void PhatSinh(MyPoint *a, int n) { for (int i = 0; i < n; i++) { a[i].x = rand() % 51 - rand() % 51; a[i].y = rand() % 51 - rand() % 51; } } void XuatMang(MyPoint... “so.inp”) Kết quả chương trình là tập tin văn bản có dòng thứ nhất ghi số n; n dòng tiếp theo ghi các số tạo được, mỗi số một dòng File so.out File so.inp 10 16 # define in “SO.INP”

Ngày đăng: 15/05/2017, 10:28

TỪ KHÓA LIÊN QUAN