Kỹ thuật lập trình - Tuần 7: Dữ liệu dạng tệp tin

Cho text file (d:\input2.dat) nội dung sau: – dòng đầu ghi: m n – m dòng tiếp theo: ghi n giá trị của ma trận A(m,n) – Dòng tiếp theo ghi: p q – q dòng tiếp theo: ghi p giá trị của ma trận B(p,q) • Viết chương trình (15 phút) cho phép: – Đọc vào ma trận A, B từ file d:\input2.dat – Ghi kết quả là ma trận tổng B = A + B ra text file d:\output2.dat

pdf19 trang | Chia sẻ: huyhoang44 | Lượt xem: 617 | Lượt tải: 0download
Bạn đang xem nội dung tài liệu Kỹ thuật lập trình - Tuần 7: Dữ liệu dạng tệp tin, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
10/11/2016 1 Tuần 7 - Dữ liệu dạng tệp tin (File) Giáo viên: Hà Đại Dương duonghd@mta.edu.vn Kỹ thuật lập trình 10/11/2016 1 Đã học • Dữ liệu: vào, ra cho chương trình – Kiểu: Nguyên, Thực; Tổ chức: Mảng, Con trỏ, Xâu – Nhập: Từ bàn phím; – Ra: màn hình. • Vấn đề: Giả sử cần quản lý điểm của SV 1 lớp có 100 SV, theo như trên: – Mỗi lần cần: Nhập từ bàn phím 100 SV: Họ tên ? 10/11/2016 2 Nhập 1 lần lưu vào MT để sử dụng cho các lần sau Lưu dữ liệu trên máy tính • Ví dụ: Danh sách sinh viên • Lưu trữ ở đâu? • Lưu trữ như thế nào? 10/11/2016 3 10/11/2016 2 Nội dung 1. Một số khái niệm cơ bản – Tệp tin (File) – Thư mục (Folder) 2. Các thao tác với File – Mở/Đóng – Di chuyển con trỏ 3. Đọc/Ghi File văn bản 4. Đọc/Ghi File nhị phân 10/11/2016 4 Một số khái niệm cơ bản 10/11/2016 5 Thư mục • Là cách tổ chức nơi lưu trữ dữ liệu trên ổ đĩa máy tính • Đặc trưng bởi: Vị trí và tên • Ví dụ 10/11/2016 6 10/11/2016 3 Cây thư mục 10/11/2016 7 Tệp tin (File) • Đối tượng chứa dữ liệu (hoặc chương trình máy tính) • Phân loại: – File dữ liệu, File chương trình – File văn bản, File ảnh, File âm thanh – File text, File nhị phân • Thể hiện bởi: – Vị trí của nó (ổ đĩa nào, thư mục gì? ) – Tên và phần mở rộng. 10/11/2016 8 Tệp tin (File) • Ví dụ: 10/11/2016 9 Vị trí Tên file Phần mở rộng 10/11/2016 4 Đường dẫn (Path) • Xâu ký tự chỉ ra vị trí của File • Bắt đầu bằng tên ổ đĩa • Tiếp đến là (tên) thư mục cha (nếu có) rồi đến (tên) thư mục con và tiếp tục. • Ví dụ: Đường dẫn đến thư mục KTLT trên ổ đĩa D: 10/11/2016 10 D:\GiangDay\20162017K1\KTLT Dữ liệu dạng tệp tin • Dữ liệu cho các chương trình trên máy tính chủ yếu dưới dạng tệp tin - Tệp tin dữ liệu (tệp dữ liệu), hay file dữ liệu. • File dữ liệu xét về cách lưu trữ có 2 dạng: – Text file (file văn bản - khác với document) và – Binary file (file nhị phân) 10/11/2016 11 Text file (File văn bản) 10/11/2016 12 10/11/2016 5 Text file là gì? • Text file là một dạng file dữ liệu mà nội dung của nó được lưu trữ thành từng dòng, có thể “đọc” được bằng những công cụ “thông thường”. • A text file (sometimes spelled "textfile": an old alternative name is "flatfile") is a kind of computer file that is structured as a sequence of lines of electronic text. (https://en.wikipedia.org/wiki/Text_file) 10/11/2016 13 Ví dụ • File dulieuvao.txt và nội dung của nó 10/11/2016 14 Làm việc với text file 1. Khai báo biến (kiểu FILE) 2. Mở/Đóng file 3. Một số thao tác khác – Di chuyển vị trí con trỏ dữ liệu – Lấy vị trí con trỏ dữ liệu – Kiểm tra dấu hiệu kết thúc file 4. Đọc/Ghi dữ liệu từ file 10/11/2016 15 10/11/2016 6 Khai báo biến file • Kiểu dữ liệu: FILE • Khai báo dạng con trỏ FILE *f 1, f2, ; – FILE: Kiểu dữ liệu – f: con trỏ kiểu FILE dùng để truy xuất dữ liệu (từ file). • Ví dụ: FILE f; 10/11/2016 16 Mở file - Hàm fopen() • Biến f sau khi được khai báo có thể dùng để truy xuất (đọc/ghi) dữ liệu trên 1 file nào đó thông qua thao tác mở file. • Hàm fopen() – Cú pháp: FILE *fopen(char *P, const char *M) – Trả về: con trỏ file (FILE *) – P: đường dẫn và tên file cần mở – M: phương thức (cách thức) mở file 10/11/2016 17 Mở file - Hàm fopen() Cú pháp: FILE *fopen(char *P, const char *M) • M: phương thức (cách thức) mở file – "r“: Opens for reading. If the file does not exist or cannot be found, the fopen call fails. – "w“: Opens an empty file for writing. If the given file exists, its contents are destroyed. – "a“: Opens for writing at the end of the file (appending) without removing the EOF marker before writing new data to the file; creates the file first if it doesn’t exist. 10/11/2016 18 10/11/2016 7 Mở file - Hàm fopen() Cú pháp: FILE *fopen(char *P, const char *M) • M: phương thức (cách thức) mở file – "r+“: Opens for both reading and writing. (The file must exist.) – "w+“: Opens an empty file for both reading and writing. If the given file exists, its contents are destroyed. – "a+“: Opens for reading and appending; (https://msdn.microsoft.com/enus/library/aa246392(v=vs.60).aspx) 10/11/2016 19 Mở file - Hàm fopen() Cú pháp: FILE *fopen(char *P, const char *M) • M: phương thức (cách thức) mở file – Sau các giá trị trên có thể thêm vào ký tự • t: chỉ rõ file cần mở là text file; • b: chỉ rõ file cần mở là binary file; (https://msdn.microsoft.com/enus/library/aa246392(v=vs.60).aspx) 10/11/2016 20 Mở file - Hàm fopen() – Cú pháp: FILE *fopen(char *P, const char *M) • Ví dụ: f=fopen(“D:\\GiangDay\\20162017K1\\KTLT\\ref\\ dulieuvao.txt”,”w+”); Diễn giải chính xác nội dung câu lệnh trên. 10/11/2016 21 10/11/2016 8 Đóng file • Đóng một file – Hàm: int fclose(FILE *f) • Đóng tất cả các file đang mở – Hàm: int fcloseall() 10/11/2016 22 Con trỏ dữ liệu • Con trỏ dữ liệu (con trỏ): Cho phép xác định vị trí (địa chỉ) mà các tác động đọc/ghi thực hiện trên file. • Sau khi mở (fopen) con trỏ dữ liệu ở đầu file. • Các thao tác đọc/ghi sẽ làm dịch chuyển con trỏ dữ liệu đi một khoảng bằng kích thước của khối dữ liệu đã đọc/ghi. 10/11/2016 23 Một số thao tác khác • Kiểm tra dấu hiệu kết thúc file – Hàm: int feof(FILE *f) • Lấy vị trí con trỏ dữ liệu (hiện thời) – Hàm: long ftell(FILE *f) • Di chuyển con trỏ dữ liệu về đầu file – Hàm: void rewind(FILE *f) 10/11/2016 24 10/11/2016 9 Một số thao tác khác • Di chuyển con trỏ dữ liệu về vị trí bất kỳ – Hàm: int fseek(FILE *f, long offset, int whence) – Trong đó • offset: số byte cần dịch chuyển con trỏ dữ liệu liệu tính từ vị trí whence. • whence: – SEEK_SET (0): Vị trí làm mốc để tính là đầu tệp tin – SEEK_CUR (1): Vị trí làm mốc để tính là vị trí hiện thời – SEEK_END (2): Vị trí làm mốc để tính là cuối tệp tin 10/11/2016 25 Ghi dữ liệu vào file • Ghi 1 ký tự – Hàm: int fputc(int c, FILE *f) • Ghi 1 xâu ký tự – Hàm: int fputs(const char *buffer, FILE *f) – Hàm: fprintf(FILE *f, const char *format, varexpr) 10/11/2016 26 Ví dụ 1 10/11/2016 27 10/11/2016 10 Đọc dữ liệu từ file • Đọc 1 ký tự – Hàm: int fgetc(FILE *f) • Đọc 1 xâu ký tự – Hàm: char *fgets(char *buffer, int n, FILE *f) – Hàm: fscanf(FILE *f, const char *format, varlist) 10/11/2016 28 Ví dụ 2 10/11/2016 29 Ví dụ 3 • Soạn thảo 1 file text bằng công cụ notepad với nội dung sau: – dòng đầu ghi: m n – m dòng tiếp theo: mỗi dòng ghi n giá trị của ma trận A(m,n) • Ví dụ: Mô tả ma trận: 3x3 và dữ liệu trên file text 10/11/2016 30 10/11/2016 11 Ví dụ 3 • Ghi file dữ liệu trên vào file: d:\input.dat • Viết chương trình cho phép đọc ma trận từ file d:\input.dat và in ma trận đọc được lên màn hình. • Chương trình 10/11/2016 31 10/11/2016 32 Ví dụ 3 • Kết quả 10/11/2016 33 10/11/2016 12 Ví dụ 4 • Cho text file (d:\input2.dat) nội dung sau: – dòng đầu ghi: m n – m dòng tiếp theo: ghi n giá trị của ma trận A(m,n) – Dòng tiếp theo ghi: p q – q dòng tiếp theo: ghi p giá trị của ma trận B(p,q) • Viết chương trình (15 phút) cho phép: – Đọc vào ma trận A, B từ file d:\input2.dat – Ghi kết quả là ma trận tổng B = A + B ra text file d:\output2.dat 10/11/2016 34 Binary file (File nhị phân) 10/11/2016 35 Binary file là gì? • File nhị phân: File dữ liệu trên máy tính được lưu trữ dưới dạng các mã nhị phân (cách gọi này nhằm phân biệt với text file). • A binary file is a computer file that is not a text file. The term "binary file" is often used as a term meaning "non-text file". Text file itself is a binary file and all computer files are binary file. (https://en.wikipedia.org/wiki/Binary_file) 10/11/2016 36 10/11/2016 13 Ví dụ • Dữ liệu trên file nhị phân có thể nhìn như sau: 10/11/2016 37 Làm việc với binary file 1. Khai báo biến (kiểu FILE): TT text file 2. Mở/Đóng file: TT text file 3. Một số thao tác khác: TT text file – Di chuyển vị trí con trỏ dữ liệu – Lấy vị trí con trỏ dữ liệu – Kiểm tra dấu hiệu kết thúc file 4. Đọc/Ghi dữ liệu từ file: Sử dụng các hàm khác với text file. 10/11/2016 38 Khai báo biến file • Kiểu dữ liệu: FILE • Khai báo dạng con trỏ FILE *f 1, f2, ; – FILE: Kiểu dữ liệu – f: con trỏ kiểu FILE dùng để truy xuất dữ liệu (từ file). • Ví dụ: FILE f; 10/11/2016 39 10/11/2016 14 Mở file - Hàm fopen() Cú pháp: FILE *fopen(char *P, const char *M) • M: phương thức (cách thức) mở file – Sau các giá trị trên có thể thêm vào ký tự • t: chỉ rõ file cần mở là text file; • b: chỉ rõ file cần mở là binary file; (https://msdn.microsoft.com/enus/library/aa246392(v=vs.60).aspx) 10/11/2016 40 Đóng file • Đóng một file – Hàm: int fclose(FILE *f) • Đóng tất cả các file đang mở – Hàm: int fcloseall() 10/11/2016 41 Ghi dữ liệu vào file nhị phân • Hàm fwrite() – Cú pháp: fwrite(const void *p, size_t s, size_t n, FILE *f); – Trong đó: • p: Con trỏ đến vùng dữ liệu cần ghi • s: kích thước mỗi phần tử • n: số phần tử ghi vào file • f: con trỏ file cần ghi. 10/11/2016 42 10/11/2016 15 Ví dụ 5 • Ghi các thông số sau đây: 15, 10, 2016, 31.5 16, 10, 2016, 33.8 Vào file d:\nhietdongay.dat 10/11/2016 43 10/11/2016 44 Ví dụ 5 • Nội dung file d:\nhietdongay.dat mở trong VS như sau: 10/11/2016 45 10/11/2016 16 Đọc dữ liệu từ file nhị phân • Hàm fread() – Cú pháp: fread(const void *p, size_t s, size_t n, FILE *f); – Trong đó: • p: Con trỏ quản lý dữ liệu đọc được • s: kích thước mỗi phần tử • n: số phần tử đọc từ file • f: con trỏ file cần đọc. 10/11/2016 46 Ví dụ 6 • Đọc dữ liệu từ file d:\nhietdongay.dat (đã biết cách lưu trữ) – 3 số nguyên, 1 số float – 3 số nguyên, 1 số float 10/11/2016 47 Ví dụ 6 10/11/2016 48 10/11/2016 17 Ví dụ 6 • Nội dung file d:\nhietdongay.dat 15, 10, 2016, 31.5 16, 10, 2016, 33.8 10/11/2016 49 Ví dụ 7 • Viết chương trình cho phép nhập vào danh sách bao gồm họ tên sinh viên và điểm trung bình tốt nghiệp từ bàn phím, hãy ghi danh sách đó vào tệp tin d:\sinhvien.dat dạng nhị phân. • Viết chương trình (15 phút) 10/11/2016 50 Lưu ý • Có thể xem và đọc được nội dung text file bất kỳ. • Với file nhị phân để đọc được nội dung cần biết cách lưu trữ dữ liệu của nó. 10/11/2016 51 10/11/2016 18 Bài tập 10/11/2016 52 Bài tập 1. Giả sử text file D:\SinhvienHT.dat chứa danh sách họ tên SV, tên mỗi sinh viên được viết trên 1 dòng. Viết chương trình đọc file D:\Sinhvien.dat chuẩn hoá tên SV và ghi danh sách tên SV đã chuẩn hoá ra file D:\SinhvienCH.dat. 10/11/2016 53 Bài tập 2. Sửa lại chương trình trong ví dụ 7 để có thể xem được danh sách sinh viên đã có trong tệp d:\sinhvien.dat, có thể thêm nhập thêm sinh viên vào danh sách đó. 10/11/2016 54 10/11/2016 19 Bài tập về nhà 1. Tìm hiểu một số khái niệm liên quan đến việc tổ chức lưu trữ dữ liệu trên máy tính – FAT32 – NTFS – Thư mục (Folder, Directory) – Tệp tin(File) – Đường dẫn (Path) 10/11/2016 55 Bài tập về nhà 2. Trình bày chi tiết hai khái niệm: Text file và Plain text. 3. Xem lại và thử nghiệm tất cả các hàm liên quan đến file trong C/C++. 10/11/2016 56

Các file đính kèm theo tài liệu này:

  • pdftuan_07_du_lieu_dang_tep_tin_5268.pdf