Tải bản đầy đủ (.pdf) (33 trang)

Ch09 file

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (623.12 KB, 33 trang )

Chương 09
TẬP TIN

Trần Quang
© 2016

Chương 09: File

Kỹ thuật lập trình
1


Tập tin (file)




Tất cả các biến dữ liệu của chương trình được lưu
trong bộ nhớ RAM của máy tính. Khi chương trình
kết thúc, tất cả các biến này sẽ bị xóa đi.
Để giữ các dữ liệu này lại khi chương trình kết
thúc, ta cần lưu chúng dưới dạng tập tin (file) vào
các thiết bị lưu trữ như ổ cứng, CD, DVD, v.v.

Trần Quang
© 2016

Chương 09: File

Kỹ thuật lập trình
2




Mơ hình tập tin


Tập tin là một dãy các bytes dữ liệu kết thúc bằng
ký tự đặc biệt EOF






EOF (End Of File): là giá trị đặc biệt, không trùng
với bất cứ giá trị của byte dữ liệu nào.
EOF: khi dùng các hàm đọc dữ liệu trả về EOF là
biết kết thúc tập tin.
(Nhiều hệ thống EOF = -1)


1

2

3

EOF
N

N bytes dữ liệu của một file


Trần Quang
© 2016

Chương 09: File

Kỹ thuật lập trình
3


Các loại tập tin


Tập tin văn bản (text)






Các byte trong mơ hình tập tin chứa các ký tự đọc
được (có nghĩa) bởi con người
Tập tin có thể mở ra để đọc và thay đổi bởi chương
trình soạn thảo văn bản như NOTEPAD.

Tập tin nhị phân (binary)





Trần Quang
© 2016

Được tạo bởi chương trình nào đó, khơng dành cho
con người đọc và hiểu trực tiếp bằng NOTEPAD
Các tập tin này phải dùng chương trình dành riêng
nào đó mới đọc và diễn dịch được. Ví dụ file .doc
của MS Word, file ảnh .jpg, file thực thi .exe, …
Chương 09: File

Kỹ thuật lập trình
4


Quy trình xử lý tập tin
1. Khai báo con trỏ tập tin
2. Mở tập tin


Dùng hàm: fopen

3. Thao tác với tập tin




Đọc hay ghi dữ liệu
Mỗi lần đọc hay ghi dữ liệu, con trỏ đánh dấu trong
tập tin tự động tăng đến phần tử tiếp theo


4. Đóng tập tin


Trần Quang
© 2016

Dùng hàm fclose

Chương 09: File

Kỹ thuật lập trình
5


Con trỏ đánh dấu trong tập tin
N bytes dữ liệu của một file
1

2

3



N
EOF

Sau khi mở tập tin thành công, con trỏ đánh dấu tự động
chỉ đến byte đầu tiên của tập tin


1

2

3



N
EOF

Sau khi đọc 1 byte dữ liệu, ví dụ sử dụng hàm fgetc()
Trần Quang
© 2016

Chương 09: File

Kỹ thuật lập trình
6


Con trỏ đánh dấu trong tập tin

1

2

3

N




EOF

Sau khi đã đọc xong N bytes,
con trỏ đánh dấu chỉ đến EOF
Lần đọc dữ liệu kế tiếp hàm đọc sẽ trả về
giá trị EOF cho biết đã kết thúc tập tin

Trần Quang
© 2016

Chương 09: File

Kỹ thuật lập trình
7


Khai báo con trỏ tập tin (FILE *)




Biến (con trỏ) trong chương trình dùng để gắn kết
với tập tin trên đĩa được định nghĩa với kiểu đặc
biệt theo cú pháp sau:
FILE *<tên biến>
Ví dụ:
FILE *fp;

Kiểu FILE là kiểu cấu trúc do C định nghĩa sẵn
trong <stdio.h>

Trần Quang
© 2016

Chương 09: File

Kỹ thuật lập trình
8


Mở tập tin

fopen (<filename>, <mode> );




Ví dụ: FILE *fp;
fp = fopen("c:\\test.txt", "r");
filename là tên tập tin trên đĩa, chú ý dùng \\ trong
đường dẫn

Trần Quang
© 2016

Chương 09: File

Kỹ thuật lập trình

9


Chế độ mở tập tin
Chế độ
r
w
a

r+
w+
a+
Trần Quang
© 2016

Mơ tả
Mở tập tin để đọc.
Mở tập tin để ghi. Nếu tập tin đã tồn tại, xóa tồn bộ
nội dung tập tin đó.
Nối tập tin. Mở tập tin đã có sẵn hoặc tạo mới tập tin,
ghi vào cuối tập tin nếu đã tồn tại.
Mở tập tin cho phép đọc lẫn ghi. Không tạo mới tập
tin nếu tập tin chưa có sẵn.
Mở tập tin cho phép đọc lẫn ghi. Tạo mới tập tin nếu
tập tin chưa có sẵn.
Nối tập tin, cho phép đọc tập tin. Mở tập tin đã có
sẵn hoặc tạo mới tập tin, ghi vào cuối tập tin đó.
Chương 09: File

Kỹ thuật lập trình

10


Kiểm tra việc mở tập tin
FILE *fp;
fp = fopen ("E:\\tmp\\vidu.txt", "r");
if (fp == NULL)
printf("Khong mo duoc file\n");
else {
// xử lý file
}
if (fp == NULL) {
printf("Khong mo duoc file\n");
return;
}
// xử lý file
Trần Quang
© 2016

Chương 09: File

Kỹ thuật lập trình
11


Đóng tập tin


Cú pháp:
int fclose (FILE *fp);

Ví dụ:
fclose(fp);

Trần Quang
© 2016

Chương 09: File

Kỹ thuật lập trình
12


Đọc 1 ký tự từ tập tin


Cú pháp:

int fgetc (FILE *fp);


Ví dụ:
char c;
FILE *fp;
fp = fopen ("E:\\tmp\\vidu.txt", "r");
c = fgetc (fp);

Trần Quang
© 2016

Chương 09: File


Kỹ thuật lập trình
13


Hàm kiểm tra cuối tập tin


Cú pháp:



int feof (FILE *fp)
Hàm trả về giá trị khác 0 nếu gặp cuối file khi đọc,
trái lại hàm cho giá trị 0.
Ví dụ:
char c;
FILE *fp;
fp = fopen("E:\\tmp\\vidu.txt", "r");
while ( !feof(fp) ) {
c = fgetc(fp);
printf("%c", c);
}

Trần Quang
© 2016

Chương 09: File

Kỹ thuật lập trình

14


Đọc tất cả các ký tự trong tập tin vào bộ đệm
Giả sử buffer đủ lớn để chứa toàn bộ dữ liệu từ tập tin
void readFile(FILE* fp, char* buffer){
int i = 0;
int ch = fgetc(fp);
while(ch != EOF){
CH = Đọc một ký tự
buffer[i] = ch;
ch = fgetc(fp);
CH <> EOF
i += 1;
true
Đưa CH vào bộ đệm
}
CH = Đọc một ký tự
buffer[i] = '\0';
}

Trần Quang
© 2016

Chương 09: File

false

Kỹ thuật lập trình
15



Ghi 1 ký tự vào tập tin


Cú pháp:

int fputc (char c, FILE *fp);
Ví dụ:
FILE *fp;
fp = fopen ("E:\\tmp\\vidu2.txt", "w");
fputc ('A', fp);

Trần Quang
© 2016

Chương 09: File

Kỹ thuật lập trình
16


Hàm fgets() – fputs()


Cú pháp:
char *fgets(char *str, int n, FILE *fp);








Dùng để đọc 1 chuỗi từ file vào biến str, n là số ký tự
tối đa sẽ đọc
Hàm trả về con trỏ tới string đọc được nếu thành công
Hàm trả về NULL nếu xảy ra lỗi hoặc gặp cuối file.

Cú pháp:
int fputs(const char *str, FILE *fp);



Trần Quang
© 2016

Dùng để ghi 1 chuỗi vào file
Hàm trả về giá trị không âm nếu ghi thành cơng
Chương 09: File

Kỹ thuật lập trình
17


fgets() – fputs()
Ví dụ:
char s[255];
FILE *fp;
printf ("Nhap vao 1 cau: ");

fgets (s, 255, stdin);
fp = fopen ("E:\\tmp\\vidu.txt","w+");
fputs (s, fp);

Trần Quang
© 2016

Chương 09: File

Kỹ thuật lập trình
18


fgets() – fputs()
Ví dụ:
char s[100];
FILE *fp;
fp = fopen ("E:\\tmp\\vidu.txt","w+");
if (fp==NULL) return 0;
fputs ("Tran van Hung\n", fp);
fputs ("Le Thi Thu Thao\n", fp);
rewind(fp);
fgets (s,100, fp);
printf ("%s", s);
// Tran Van Hung
Trần Quang
© 2016

Chương 09: File


Kỹ thuật lập trình
19


Hàm fscanf( )






Hàm thư viện đọc dữ liệu từ tập tin theo định dạng:
fscanf ( <file_ptr>, <format>, <argument, …> );
Việc sử dụng hàm fscanf() tương tự như hàm
scanf(), chỉ có khác ở chỗ những gì lẽ ra nhập từ
bàn phím sẽ được đọc vào từ tập tin.
Ví dụ:
fscanf (fp, "%d", &n);
fscanf (fp, "%f", &(sv1->diem_btl);

Trần Quang
© 2016

Chương 09: File

Kỹ thuật lập trình
20




Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×