intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

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

Chia sẻ: Bautroibinhyen27 Bautroibinhyen27 | Ngày: | Loại File: PPTX | Số trang:35

81
lượt xem
6
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

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.

Chủ đề:
Lưu

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

  1. Lập trình C Chương 6. Thao tác trên 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
  2. Nội dung • Khái niệm • Khai báo • Các thao tác trên tập tin • Bài tập 2
  3. KHÁI NIỆM
  4. Khái niệm • File cho phép lưu trữ dữ liệu ở bộ nhớ ngoài (đĩa) • File  có  thể  lưu  dữ  liệu  kích  thước  lớn  với  số  lượng các phần tử không hạn chế (chỉ bị hạn chế  bởi dung lượng của bộ nhớ ngoài) 4
  5. Khái niệm • Biến File: là một biến thuộc kiểu dữ liệu tập tin dùng để đại diện cho một tập tin • Con trỏ tập tin: Xác định vị trí trong tập tin khi thao tác đọc /ghi • Phân loại File: • File text • File nhị phân 5
  6. File text • Dùng để ghi các ký tự lên đĩa dưới dạng mã Ascii • Dữ liệu của tập tin được lưu trữ thành các dòng, mỗi dòng được kết thúc bằng ký tự xuống dòng (new line), ký hiệu ‘\n’ • Mỗi tập tin được kết thúc bởi ký tự EOF (End Of File) có mã Ascii là 26 (xác định bởi tổ hợp phím Ctrl + Z) 6
  7. File nhị phân • Một dãy các bytes liên tục • Nội dung dữ liệu được mã hóa 7
  8. CÁC THAO TÁC TRÊN FILE
  9. Các thao tác khi thao tác trên File 1. Khai báo con trỏ file 2. Mở file 3. Thao tác đọc/ ghi trên file 4. Đóng file 9
  10. Khai báo con trỏ file • Cú pháp: FILE ; • Các biến trong danh sách phải là các con trỏ và được phân cách bởi dấu phẩy(,) • Ví dụ: FILE *f1, *f2; 10
  11. Mở file • Cú pháp: FILE *fopen(char *path, const char *mode) • Trong đó: • path: chuỗi chỉ đường dẫn đến tập tin trên đĩa • mode: chuỗi xác định cách thức mà tập tin sẽ mở • Hàm fopen trả về một con trỏ tập tin. Nếu có lỗi xuất hiện trong khi mở tập tin thì trả về con trỏ NULL 11
  12. Các thông tin Mode Mode  Ý nghĩa  r  Mở tập tin văn bản để đọc  w  Tạo ra tập tin văn bản mới để ghi  a  Nối vào tập tin văn bản  rb  Mở tập tin nhị phân để đọc  wb  Tạo ra tập tin nhị phân để ghi  ab  Nối vào tập tin nhị phân  r+  Mở một tập tin văn bản để đọc/ghi  w+  Tạo ra tập tin văn bản để đọc ghi  a+  Nối vào hay tạo mới tập tin văn bản để  đọc/ghi  r+b  Mở ra tập tin nhị phân để đọc/ghi  w+b  Tạo ra tập tin nhị phân để đọc/ghi  a+b  Nối vào hay tạo mới tập tin nhị phân  12
  13. Ví dụ tạo mới file text “test.txt” ở ổ đĩa D: FILE *f; f = fopen(“D:\\test.txt”, “w”); if (f!=NULL) { /* Các câu lệnh để thao tác với tập tin*/ /* Đóng tập tin*/ } 13
  14. Đóng tập tin • Cú pháp: int fclose(FILE *f) • Trong đó f là con trỏ tập tin được mở bởi hàm fopen() • Trả về 0: đóng tập tin thành công • Trả về EOF nếu có xuất hiện lỗi • Đóng tất cả các tập tin lại: int fcloseall() 14
  15. Thao tác trên File text STT TÊN HÀM Ý NGHĨA SỬ DUNG ̣ VÍ DỤ ̣ ̣ ĐOC TÂP TIN ̣ ̣ fscanf(FILE *, đinh dang, ca ́c  fscanf(f, “%d”,  1 Đọc dữ liêu t ̣ ừ tâp tin ̣ tham biến) &x);  ̣ Đoc chuô ̃i ký tự từ tâp  ̣ fgets(chuỗi, kích thước tối  tin với kích thước tối  char s[80]; 2 đa, FILE *) ̣ đa cho phép, hoăc găp  ̣ fgets(s, 80, f);  ký tự xuống dòng char c=getc(f);  3 getc(FILE *) ̣ Đoc ky ́ tự từ tâp tin ̣   ̣ GHI TÂP TIN ̣ ̣ fprintf(FILE *, đinh dang,  1 các tham biến) Ghi dữ liêu va ̣ ̣ ̀o tâp tin fprintf(f, “%d”, x);   fputs(chuỗi, FILE *) Ghi chuỗi ký tự vào tâp  ̣ 2 fputs(“Vi du”, f);   tin 15
  16. Ví dụ Tạo tập tin văn bản “so.out” gồm n số nguyên, các số của dãy được tạo ngẫu nhiên có giá trị không vượt quá M (n, M đọc từ tập tin “so.inp”). Kết quả chương trình là 1 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ố trên một dòng File so.out 3 File so.inp 5 3 7 10 2 16
  17. # define in “SO.INP” int main() # define out “SO.OUT” { void DocFile(int &n, int &M) int n, M; { srand((unsigned  int)time(NULL)); FILE *fi; DocFile(n, M); fi = fopen(in, "r"); GhiFile(n, M); fscanf(fi, "%d%d", &n, &M); return 0; fclose(fi); } void GhiFile(int n, int M) } { FILE *fo; fo = fopen(out, "w"); fprintf(fo, "%d\n", n); for (; n > 0; n­­) fprintf(fo, "%d\n", rand()%(M ­ 1) + 1); fclose(fo); 17 }
  18. Bài tập Viết các hàm sau: 1. Tạo mảng 1 chiều số nguyên a (giá trị ngẫu nhiên < 100) có kích thước n (0
  19. Bài tập Cho file “test.inp” có cấu trúc như sau • Dòng đầu tiên là số nguyên n • Dòng tiếp theo là n giá trị nguyên cách nhau bởi khoảng trắng Hãy viết các hàm tìm phần tử có giá trị lớn nhất, phần tử nhỏ nhất, số lượng phần tử chẵn, lẻ. Sau đó lưu vào file “kq.out” gồm các dòng sau: • Dòng 1: So lon nhat la: … • Dòng 2: So nho nhat la: … • Dòng 3: So phan tu chan la: … • Dòng 4: So phan tu le la: … 19
  20. Thao tác trên File nhị phân Ý NGHĨA SỬ  STT TÊN HÀM VÍ DỤ DUNG̣ ̣ ĐOC TÂP TIṆ ptr: vùng nhớ đê ̉ lưu dữ liêu đoc ̣ ̣ int a[30], b, n; size: kích thước  fread(a,  1 fread(&ptr, size, len, FILE *) mỗi ô nhớ (tính  sizeof(int), n , f); bằng byte) Fread(&b,  ̣ ̀i dữ liêu  len: đô da ̣ sizeof(int), 1 , f); cần đoc̣ ̣ GHI TÂP TIN Tham số tương tự  fwrite(a,  1 fwrite(&prt, size, len, FILE *) như hàm fread sizeof(int), n , f); 20
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
3=>0