Bài giảng Nhập môn lập trình - Bài: Tập tin - Đặng Bình Phương

Trường Đại học Khoa học Tự nhiên  
Khoa Công nghệ thông tin  
Bộ môn Công nghệ phần mềm  
NHẬP MÔN LẬP TRÌNH  
ThS. Đặng Bình Phương  
TẬP TIN  
1
&
VC  
Nội dung  
BB  
1
2
3
Khái niệm dòng (stream)  
Khái niệm và phân loại tập tin  
Các thao tác xử lý căn bản  
4
Một số hàm quản lý tập tin  
2
Tập tin  
&
VC  
Nhập xuất  
BB  
Khái niệm  
. C lưu dữ liệu (biến, mảng, cấu trúc, …) trong  
bộ nhớ RAM.  
. Dữ liệu được nạp vào RAM và gửi ra ngoài  
chương trình thông qua các thiết bị (device)  
• Thiết bị nhập (input device): bàn phím, con chuột  
• Thiết bị xuất (output device): màn hình, máy in  
• Thiết bị vừa nhập vừa xuất: tập tin  
. Các thiết bị đều thực hiện mọi xử lý thông  
qua các dòng (stream).  
3
Tập tin  
&
VC  
Stream (dòng)  
BB  
Khái niệm  
. Là môi trường trung gian để giao tiếp (nhận/  
gửi thông tin) giữa chương trình và thiết bị.  
Muốn nhận/gửi thông tin cho một thiết bị  
ta sẽ gửi thông tin cho stream nối với thiết bị  
đó (độc lập thiết bị).  
. Stream là dãy byte dữ liệu  
• “Chảy” vào chương trình gọi là stream nhập.  
• “Chảy” ra chương trình gọi là stream xuất.  
4
Tập tin  
&
VC  
Stream (dòng)  
BB  
Phân loại  
. Stream văn bản (text)  
• Chỉ chứa các ký tự.  
• Tổ chức thành từng dòng, mỗi dòng tối đa 255 ký  
tự, kết thúc bởi ký tự cuối dòng „\0‟ hoặc ký tự  
sang dòng mới „\n‟.  
. Stream nhị phân (binary)  
• Chứa các byte.  
• Được đọc và ghi chính xác từng byte.  
• Xử lý dữ liệu bất kỳ, kể cả dữ liệu văn bản.  
• Được sử dụng chủ yếu với các tập tin trên đĩa.  
5
Tập tin  
&
VC  
Stream (dòng)  
BB  
Các stream chuẩn định nghĩa sẵn  
Tên  
Stream  
Thiết bị tương ứng  
stdin  
stdout  
stderr  
Nhập chuẩn Bài phím  
Xuất chuẩn Màn hình  
Lỗi chuẩn  
Màn hình  
stdprn (MS-DOS) In chuẩn  
stdaux (MS-DOS) Phụ chuẩn  
Máy in (LPT1:)  
Cổng nối tiếp COM 1:  
Ví dụ (hàm fprintf xuất ra stream xác định)  
. Xuất ra màn hình:  
. Xuất ra máy in:  
. Xuất ra thiết bị báo lỗi:  
fprintf(stdout, “Hello”);  
fprintf(stdprn, “Hello”);  
fprintf(stderr, “Hello”);  
. Xuất ra tập tin (stream fp): fprintf(fp, “Hello”);  
6
Tập tin  
&
VC  
Tập tin  
BB  
Nhu cầu  
. Dữ liệu giới hạn và được lưu trữ tạm thời  
• Nhập: gõ từ bàn phím.  
• Xuất: hiển thị trên màn hình.  
• Lưu trữ dữ liệu: trong bộ nhớ RAM.  
Mất thời gian, không giải quyết được bài  
toán với số dữ liệu lớn.  
. Cần một thiết bị lưu trữ sao cho dữ liệu vẫn  
còn khi kết thúc chương trình, có thể sử dụng  
nhiều lần và kích thước không hạn chế.  
7
Tập tin  
&
VC  
Tập tin  
BB  
Khái niệm  
. Tập hợp thông tin (dữ liệu) được tổ chức theo  
một dạng nào đó với một tên xác định.  
. Một dãy byte liên tục (ở góc độ lưu trữ).  
. Được lưu trữ trong các thiết bị lưu trữ ngoài  
như đĩa mềm, đĩa cứng, USB…  
• Vẫn tồn tại khi chương trình kết thúc.  
• Kích thước không hạn chế (tùy vào thiết bị lưu trữ)  
. Cho phép đọc dữ liệu (thiết bị nhập) và ghi  
dữ liệu (thiết bị xuất).  
8
Tập tin  
&
VC  
Tập tin  
BB  
Phân loại  
. Theo người sử dụng: quan tâm đến nội dung  
tập tin nên sẽ phân loại theo phần mở rộng  
.EXE, .COM, .CPP, .DOC, .PPT, …  
. Theo người lập trình: tự tạo các stream tường  
minh để kết nối với tập tin xác định nên sẽ  
phân loại theo cách sử dụng stream trong C  
tập tin kiểu văn bản (ứng với stream  
văn bản) và tập tin kiểu nhị phân (ứng với  
stream nhị phân).  
9
Tập tin  
&
VC  
Phân loại tập tin  
BB  
Tập tin kiểu văn bản (stream văn bản)  
. Dãy các dòng kế tiếp nhau.  
. Mỗi dòng dài tối đa 255 ký tự và kết thúc  
bằng ký hiệu cuối dòng (end_of_line).  
. Dòng không phải là một chuỗi vì không được  
kết thúc bởi ký tự „\0‟.  
. Khi ghi „\n‟ được chuyển thành cặp ký tự CR  
(về đầu dòng, mã ASCII 13) và LF (qua dòng,  
mã ASCII 10).  
. Khi đọc thì cặp CR-LF được chuyển thành „\n‟.  
10  
Tập tin  
&
VC  
Phân loại tập tin  
BB  
Tập tin kiểu nhị phân (stream nhị phân)  
. Dữ liệu được đọc và ghi một cách chính xác,  
không có sự chuyển đổi nào cả.  
. Ký tự kết thúc chuỗi „\0‟ và end_of_line không  
có ý nghĩa là cuối chuỗi và cuối dòng mà  
được xử lý như mọi ký tự khác.  
11  
Tập tin  
&
VC  
Quy tắc đặt tên tập tin  
BB  
• Không bắt buộc.  
• Thường có 3 ký tự.  
• Thường do chương  
trình ứng dụng tạo  
tập tin tự đặt  
Tên  
(name)  
Mở rộng  
(extension)  
.
• Bắt buộc phải có.  
• Hệ điều hành MS-DOS: dài tối đa 8 ký tự.  
• Hệ điều hành Windows: dài tối đa 128 ký tự.  
• Gồm các ký tự A đến Z, số 0 đến 9, ký tự khác  
như #, $, %, ~, ^, @, (, ), !, _, khoảng trắng.  
12  
Tập tin  
&
VC  
Định vị tập tin  
BB  
Đường dẫn  
. Chỉ đến một tập tin không nằm trong thư mục  
hiện hành. Ví dụ: c:\data\list.txt chỉ tập tin  
list.txt nằm trong thư mục data của ổ đĩa C.  
. Trong chương trình, đường dẫn này được ghi  
trong chuỗi như sau: “c:\\data\\list.txt”  
. Dấu „\‟ biểu thị ký tự điều khiển nên để thể  
hiện nó ta phải thêm một dấu „\‟ ở trước.  
Nhưng nếu chương trình yêu cầu nhập đường  
dẫn từ bàn phím thì chỉ nhập một dấu „\‟.  
13  
Tập tin  
&
VC  
Quy trình thao tác với tập tin  
BB  
1. Mở tập tin: tạo một stream nối kết với tập tin  
cần mở, stream được quản lý bởi biến con trỏ  
đến cấu trúc FILE  
. Cấu trúc được định sẵn trong STDIO.H  
. Các thành phần của cấu trúc này được dùng  
trong các thao tác xử lý tập tin.  
2. Sử dụng tập tin (sau khi đã mở được tập tin)  
. Đọc dữ liệu từ tập tin đưa vào chương trình.  
. Ghi dữ liệu từ chương trình lên tập tin.  
3. Đóng tập tin (sau khi sử dụng xong).  
14  
Tập tin  
&
VC  
Hàm mở tập tin  
BB  
FILE *fopen(const char *filename, const char *mode)  
Mở tập tin có tên (đường dẫn) là chứa trong  
filename với kiểu mở mode (xem bảng).  
Thành công: con trỏ kiểu cấu trúc FILE  
Thất bại: NULL (sai quy tắc đặt tên tập  
tin, không tìm thấy ổ đĩa, không tìm thấy  
thư mục, mở tập tin chưa có để đọc, …)  
FILE* fp = fopen(“taptin.txt”, “rt”);  
if (fp == NULL)  
printf(“Khong mo duoc tap tin!”);  
15  
Tập tin  
 
&
VC  
Đối số mở tập tin (mode)  
BB  
Đối số Ý nghĩa  
b
t
Mở tập tin kiểu nhị phân (binary)  
Mở tập tin kiểu văn bản (text) (mặc định)  
r
Mở tập tin chỉ để đọc dữ liệu từ tập tin. Trả về  
NULL nếu không tìm thấy tập tin.  
w
Mở tập tin chỉ để ghi dữ liệu vào tập tin. Tập  
tin sẽ được tạo nếu chưa có, ngược lại dữ liệu  
trước đó sẽ bị xóa hết.  
a
Mở tập tin chỉ để thêm (append) dữ liệu vào  
cuối tập tin. Tập tin sẽ được tạo nếu chưa có.  
r+  
Giống mode r và bổ sung thêm tính năng ghi  
dữ liệu và tập tin sẽ được tạo nếu chưa có.  
w+  
a+  
Giống mode w và bổ sung thêm tính năng đọc.  
Giống mode a và bổ sung thêm tính năng đọc.  
16  
Tập tin  
&
VC  
Đọc và ghi dữ liệu (stdio.h)  
BB  
Thực hiện đọc/ghi dữ liệu theo các cách sau:  
. Nhập/xuất theo định dạng  
• Hàm: fscanf, fprintf  
• Chỉ dùng với tập tin kiểu văn bản.  
. Nhập/xuất từng ký tự hay dòng lên tập tin  
• Hàm: getc, fgetc, fgets, putc, fputs  
• Chỉ nên dùng với kiểu văn bản.  
. Đọc/ghi trực tiếp dữ liệu từ bộ nhớ lên tập tin  
• Hàm: fread, fwrite  
• Chỉ dùng với tập tin kiểu nhị phân.  
17  
Tập tin  
 
&
VC  
Hàm xuất theo định dạng  
BB  
int fprintf(FILE *fp, char *fnt, …)  
Ghi dữ liệu có chuỗi định dạng fnt (giống  
hàm printf) vào stream fp.  
Nếu fp là stdout thì hàm giống printf.  
Thành công: trả về số byte ghi được.  
Thất bại: trả về EOF (có giá trị là -1, được  
định nghĩa trong STDIO.H, sử dụng trong  
tập tin có kiểu văn bản)  
int i = 2912; int c = „P‟; float f = 17.06;  
FILE* fp = fopen(“taptin.txt”, “wt”);  
if (fp != NULL)  
fprintf(fp, “%d %c %.2f\n”, i, c, f);  
18  
Tập tin  
&
VC  
Hàm nhập theo định dạng  
BB  
int fscanf(FILE *fp, char *fnt, …)  
Đọc dữ liệu có chuỗi định dạng fnt (giống  
hàm scanf) từ stream fp.  
Nếu fp là stdin thì hàm giống printf.  
Thành công: trả về số thành phần đọc và  
lưu trữ được.  
Thất bại: trả về EOF.  
int i;  
FILE* fp = fopen(“taptin.txt”, “rt”);  
if (fp != NULL)  
fscanf(fp, “%d”, &i);  
19  
Tập tin  
&
VC  
Hàm nhập theo định dạng  
BB  
Ví dụ  
. Một tập tin chứa nhiều dòng, mỗi dòng là  
thông tin mỗi sinh viên theo định dạng sau:  
• <MSSV>-<Tên>(<Phái>)tab<NTNS>tab<ĐTB>  
• Ví dụ: 0312078-H. P. Trang(Nu) 17/06/85 8.5  
Đọc chuỗi thông tin phức hợp  
. %[chuỗi]: đọc cho đến khi không gặp ký tự  
nào trong chuỗi thì dừng.  
. %[^chuỗi]: đọc cho đến khi gặp một trong  
những ký tự trong chuỗi thì dừng.  
20  
Tập tin  
Tải về để xem bản đầy đủ
pdf 48 trang baolam 23560 Free
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Nhập môn lập trình - Bài: Tập tin - Đặng Bình Phương", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfbai_giang_nhap_mon_lap_trinh_bai_tap_tin_dang_binh_phuong.pdf