Bài giảng về File trong C
Chia sẻ bởi Trần Văn Chung |
Ngày 29/04/2019 |
71
Chia sẻ tài liệu: Bài giảng về File trong C thuộc Bài giảng khác
Nội dung tài liệu:
CHƯƠNG V:
DỮ LIỆU KIỂU FILE
Kiểu File là tập hợp dữ liệu có cùng kiểu được lưu dưới dạng một tên nào đó trên ổ đĩa cứng hay ổ đĩa mềm trong bội nhớ ngoài
I. Định nghĩa kiểu File
I.1 Khái niệm
a. Kiểu văn bản:(Text File):
Là loại tập tin dùng để ghi các ký tự lên đĩa, các ký tự này được lưu trữ dưới dạng mã Ascii
Điểm đặc biệt là 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 ‘ ’; 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).
I.2 Phân Loại kiểu File
b. Tập tin định kiểu (Typed File): là loại tập tin bao gồm nhiều phần tử có cùng kiểu: char, int, long, cấu trúc… và được lưu trữ trên đĩa dưới dạng một chuỗi các byte liên tục.
c.Tập tin không định kiểu (Untyped File): là loại tập tin mà dữ liệu của chúng gồm các cấu trúc dữ liệu mà người ta không quan tâm đến nội dung hoặc kiểu của nó, chỉ lưu ý đến các yếu tố vật lý của tập tin như độ lớn và các yếu tố tác động lên tập tin mà thôi.
a. Biến tập tin: 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. Dữ liệu chứa trong một tập tin được truy xuất qua các thao tác với thông số là biến tập tin đại diện cho tập tin đó
I.3. Biến và con trỏ
b. Con trỏ tập tin: Khi một tập tin được mở ra để làm việc, tại mỗi thời điểm, sẽ có một vị trí của tập tin mà tại đó việc đọc/ghi thông tin sẽ xảy ra.
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;
II. CÁC THAO TÁC TRÊN TẬP TIN
II.1. Khai báo biến tập tin
Cú pháp: FILE *fopen(char *Path, const char)
Trong đó:
-char Path: Chuỗi chỉ đường dẫn đến tập tin trên đĩa.
- const char : chuỗi xác định cách thức mà tập tin sẽ mở.
II.2. Mở tập tin
Chế độ Ý 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
Ví dụ: Lệnh sau đây tạo ra tập tin mới để ghi.
….
Flie *f;
f = fopen(“TEST.txt”, “w”);
…..
Cú pháp: int fclose(FILE *f)
Trong đó f là con trỏ tập tin được mở bởi hàm fopen(). Giá trị trả về của hàm là 0 báo rằng việc đóng tập tin thành công. Hàm trả về EOF nếu có xuất hiện lỗi.
Ngoài ra, ta còn có thể sử dụng hàm fcloseall() để đóng tất cả các tập tin lại.
Cú pháp: int fcloseall()
Kết quả trả về của hàm là tổng số các tập tin được đóng lại. Nếu không thành công, kết quả trả về là EOF.
II.3. Đóng tập tin
Cú pháp: int feof(FILE *f)
Ý nghĩa: Kiểm tra xem đã chạm tới cuối tập tin hay chưa và trả về EOF nếu cuối tập tin được chạm tới, ngược lại trả về 0.
II.4. Kiểm tra đến cuối tập tin hay chưa?
Cú pháp: void rewind(FILE *f);
Tác dụng: Khi ta đang thao tác một tập tin đang mở, con trỏ tập tin luôn di chuyển về phía cuối tập tin. Dùng hàm rewind(FILE *f) nếu muốn cho con trỏ quay về đầu tập tin như khi mở nó
II.5 Di chuyển con trỏ tập tin về đầu tập tin
III.1.1 Hàm putc()
Hàm này được dùng để ghi một ký tự lên một tập tin văn bản đang được mở để làm việc.
Cú pháp: int putc(int c, FILE *f)
Trong đó, tham số c chứa mã Ascii của một ký tự nào đó. Mã này được ghi lên tập tin liên kết với con trỏ f. Hàm này trả về EOF nếu gặp lỗi.
III. TRUY CẬP TẬP TIN VĂN BẢN.
III.1. Ghi dữ liệu lên tập tin văn bản
III.1.2 Hàm fputs()
Hàm này dùng để ghi một chuỗi ký tự chứa trong vùng đệm lên tập tin văn bản.
Cú pháp: int puts(const char *buffer, FILE *f)
Trong đó, buffer là con trỏ có kiểu char chỉ đến vị trí đầu tiên của chuỗi ký tự được ghi vào. Hàm này trả về giá trị 0 nếu buffer chứa chuỗi rỗng và trả về EOF nếu gặp lỗi.
III.1.3 Hàm fprintf()
Hàm này dùng để ghi dữ liệu có định dạng lên tập tin văn bản.
Cú pháp: fprintf(FILE *f, const char *format, varexpr)
Trong đó: format: chuỗi định dạng (giống với các định dạng của hàm printf()), varexpr: danh sách các biểu thức, mỗi biểu thức cách nhau dấu phẩy (,).
Định dạng Ý nghĩa
%d Ghi số nguyên
%[.số chữ số thập phân] f Ghi số thực có theo quy tắc làm tròn số.
%o Ghi số nguyên hệ bát phân
%x Ghi số nguyên hệ thập lục phân
%c Ghi một ký tự
%s Ghi chuỗi ký tự
%e hoặc %E hoặc %g hoặc %G Ghi số thực dạng khoa học (nhân 10 mũ x)
Ví dụ: Viết chương trình ghi chuỗi ký tự lên tập tin văn bản D:\Baihat.txt
#include
#include
int main()
{
FILE *f;
clrscr();
f=fopen("D:\Baihat.txt","r+");
if (f!=NULL)
{
fputs("Em oi Ha Noi pho. ",f);
fputs("Ta con em, mui hoang lan; ta con em, mui hoa sua.",f);
fprintf(“%d”,2008);
fclose(f);
}
getch();
return 0;
}
III.2.1 Hàm getc()
Hàm này dùng để đọc dữ liệu từ tập tin văn bản đang được mở để làm việc.
Cú pháp: int getc(FILE *f)
Hàm này trả về mã Ascii của một ký tự nào đó (kể cả EOF) trong tập tin liên kết với con trỏ f.
III.2. Đọc dữ liệu từ tập tin văn bản
III.2.2 Hàm fgets()
Cú pháp: char *fgets(char *buffer, int n, FILE *f)
Hàm này được dùng để đọc một chuỗi ký tự từ tập tin văn bản đang được mở ra và liên kết với con trỏ f cho đến khi đọc đủ n ký tự hoặc gặp ký tự xuống dòng ‘ ’ (ký tự này cũng được đưa vào chuỗi kết quả) hay gặp ký tự kết thúc EOF (ký tự này không được đưa vào chuỗi kết quả).
Trong đó:
- buffer (vùng đệm): con trỏ có kiểu char chỉ đến cùng nhớ đủ lớn chứa các ký tự nhận được.
- n: giá trị nguyên chỉ độ dài lớn nhất của chuỗi ký tự nhận được.
- f: con trỏ liên kết với một tập tin nào đó.
- Ký tự NULL (‘ ’) tự động được thêm vào cuối chuỗi kết quả lưu trong vùng đêm.
- Hàm trả về địa chỉ đầu tiên của vùng đệm khi không gặp lỗi và chưa gặp ký tự kết thúc EOF. Ngược lại, hàm trả về giá trị NULL.
III.2.3 Hàm fscanf()
Hàm này dùng để đọc dữ liệu từ tập tin văn bản vào danh sách các biến theo định dạng.
Cú pháp: fscanf(FILE *f, const char *format, varlist)
Trong đó: format: chuỗi định dạng (giống hàm scanf());
varlist: danh sách các biến mỗi biến cách nhau dấu phẩy (,).
Ví dụ: Viết chương trình chép tập tin D:Baihat.txt ở trên sang tập tin D:Baica.txt.
#include
#include
int main()
{
FILE *f1,*f2;
clrscr();
f1=fopen("D:\Baihat.txt","rt"); f2=fopen("D:\Baica.txt","wt");
if (f1!=NULL && f2!=NULL)
{
int ch=fgetc(f1);
while (! feof(f1))
{
fputc(ch,f2); ch=fgetc(f1);
}
fcloseall();
}
getch(); return 0;
}
I.
I.
I.
I.
I.
I.
I.
DỮ LIỆU KIỂU FILE
Kiểu File là tập hợp dữ liệu có cùng kiểu được lưu dưới dạng một tên nào đó trên ổ đĩa cứng hay ổ đĩa mềm trong bội nhớ ngoài
I. Định nghĩa kiểu File
I.1 Khái niệm
a. Kiểu văn bản:(Text File):
Là loại tập tin dùng để ghi các ký tự lên đĩa, các ký tự này được lưu trữ dưới dạng mã Ascii
Điểm đặc biệt là 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 ‘ ’; 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).
I.2 Phân Loại kiểu File
b. Tập tin định kiểu (Typed File): là loại tập tin bao gồm nhiều phần tử có cùng kiểu: char, int, long, cấu trúc… và được lưu trữ trên đĩa dưới dạng một chuỗi các byte liên tục.
c.Tập tin không định kiểu (Untyped File): là loại tập tin mà dữ liệu của chúng gồm các cấu trúc dữ liệu mà người ta không quan tâm đến nội dung hoặc kiểu của nó, chỉ lưu ý đến các yếu tố vật lý của tập tin như độ lớn và các yếu tố tác động lên tập tin mà thôi.
a. Biến tập tin: 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. Dữ liệu chứa trong một tập tin được truy xuất qua các thao tác với thông số là biến tập tin đại diện cho tập tin đó
I.3. Biến và con trỏ
b. Con trỏ tập tin: Khi một tập tin được mở ra để làm việc, tại mỗi thời điểm, sẽ có một vị trí của tập tin mà tại đó việc đọc/ghi thông tin sẽ xảy ra.
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;
II. CÁC THAO TÁC TRÊN TẬP TIN
II.1. Khai báo biến tập tin
Cú pháp: FILE *fopen(char *Path, const char)
Trong đó:
-char Path: Chuỗi chỉ đường dẫn đến tập tin trên đĩa.
- const char : chuỗi xác định cách thức mà tập tin sẽ mở.
II.2. Mở tập tin
Chế độ Ý 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
Ví dụ: Lệnh sau đây tạo ra tập tin mới để ghi.
….
Flie *f;
f = fopen(“TEST.txt”, “w”);
…..
Cú pháp: int fclose(FILE *f)
Trong đó f là con trỏ tập tin được mở bởi hàm fopen(). Giá trị trả về của hàm là 0 báo rằng việc đóng tập tin thành công. Hàm trả về EOF nếu có xuất hiện lỗi.
Ngoài ra, ta còn có thể sử dụng hàm fcloseall() để đóng tất cả các tập tin lại.
Cú pháp: int fcloseall()
Kết quả trả về của hàm là tổng số các tập tin được đóng lại. Nếu không thành công, kết quả trả về là EOF.
II.3. Đóng tập tin
Cú pháp: int feof(FILE *f)
Ý nghĩa: Kiểm tra xem đã chạm tới cuối tập tin hay chưa và trả về EOF nếu cuối tập tin được chạm tới, ngược lại trả về 0.
II.4. Kiểm tra đến cuối tập tin hay chưa?
Cú pháp: void rewind(FILE *f);
Tác dụng: Khi ta đang thao tác một tập tin đang mở, con trỏ tập tin luôn di chuyển về phía cuối tập tin. Dùng hàm rewind(FILE *f) nếu muốn cho con trỏ quay về đầu tập tin như khi mở nó
II.5 Di chuyển con trỏ tập tin về đầu tập tin
III.1.1 Hàm putc()
Hàm này được dùng để ghi một ký tự lên một tập tin văn bản đang được mở để làm việc.
Cú pháp: int putc(int c, FILE *f)
Trong đó, tham số c chứa mã Ascii của một ký tự nào đó. Mã này được ghi lên tập tin liên kết với con trỏ f. Hàm này trả về EOF nếu gặp lỗi.
III. TRUY CẬP TẬP TIN VĂN BẢN.
III.1. Ghi dữ liệu lên tập tin văn bản
III.1.2 Hàm fputs()
Hàm này dùng để ghi một chuỗi ký tự chứa trong vùng đệm lên tập tin văn bản.
Cú pháp: int puts(const char *buffer, FILE *f)
Trong đó, buffer là con trỏ có kiểu char chỉ đến vị trí đầu tiên của chuỗi ký tự được ghi vào. Hàm này trả về giá trị 0 nếu buffer chứa chuỗi rỗng và trả về EOF nếu gặp lỗi.
III.1.3 Hàm fprintf()
Hàm này dùng để ghi dữ liệu có định dạng lên tập tin văn bản.
Cú pháp: fprintf(FILE *f, const char *format, varexpr)
Trong đó: format: chuỗi định dạng (giống với các định dạng của hàm printf()), varexpr: danh sách các biểu thức, mỗi biểu thức cách nhau dấu phẩy (,).
Định dạng Ý nghĩa
%d Ghi số nguyên
%[.số chữ số thập phân] f Ghi số thực có
%o Ghi số nguyên hệ bát phân
%x Ghi số nguyên hệ thập lục phân
%c Ghi một ký tự
%s Ghi chuỗi ký tự
%e hoặc %E hoặc %g hoặc %G Ghi số thực dạng khoa học (nhân 10 mũ x)
Ví dụ: Viết chương trình ghi chuỗi ký tự lên tập tin văn bản D:\Baihat.txt
#include
#include
int main()
{
FILE *f;
clrscr();
f=fopen("D:\Baihat.txt","r+");
if (f!=NULL)
{
fputs("Em oi Ha Noi pho. ",f);
fputs("Ta con em, mui hoang lan; ta con em, mui hoa sua.",f);
fprintf(“%d”,2008);
fclose(f);
}
getch();
return 0;
}
III.2.1 Hàm getc()
Hàm này dùng để đọc dữ liệu từ tập tin văn bản đang được mở để làm việc.
Cú pháp: int getc(FILE *f)
Hàm này trả về mã Ascii của một ký tự nào đó (kể cả EOF) trong tập tin liên kết với con trỏ f.
III.2. Đọc dữ liệu từ tập tin văn bản
III.2.2 Hàm fgets()
Cú pháp: char *fgets(char *buffer, int n, FILE *f)
Hàm này được dùng để đọc một chuỗi ký tự từ tập tin văn bản đang được mở ra và liên kết với con trỏ f cho đến khi đọc đủ n ký tự hoặc gặp ký tự xuống dòng ‘ ’ (ký tự này cũng được đưa vào chuỗi kết quả) hay gặp ký tự kết thúc EOF (ký tự này không được đưa vào chuỗi kết quả).
Trong đó:
- buffer (vùng đệm): con trỏ có kiểu char chỉ đến cùng nhớ đủ lớn chứa các ký tự nhận được.
- n: giá trị nguyên chỉ độ dài lớn nhất của chuỗi ký tự nhận được.
- f: con trỏ liên kết với một tập tin nào đó.
- Ký tự NULL (‘ ’) tự động được thêm vào cuối chuỗi kết quả lưu trong vùng đêm.
- Hàm trả về địa chỉ đầu tiên của vùng đệm khi không gặp lỗi và chưa gặp ký tự kết thúc EOF. Ngược lại, hàm trả về giá trị NULL.
III.2.3 Hàm fscanf()
Hàm này dùng để đọc dữ liệu từ tập tin văn bản vào danh sách các biến theo định dạng.
Cú pháp: fscanf(FILE *f, const char *format, varlist)
Trong đó: format: chuỗi định dạng (giống hàm scanf());
varlist: danh sách các biến mỗi biến cách nhau dấu phẩy (,).
Ví dụ: Viết chương trình chép tập tin D:Baihat.txt ở trên sang tập tin D:Baica.txt.
#include
#include
int main()
{
FILE *f1,*f2;
clrscr();
f1=fopen("D:\Baihat.txt","rt"); f2=fopen("D:\Baica.txt","wt");
if (f1!=NULL && f2!=NULL)
{
int ch=fgetc(f1);
while (! feof(f1))
{
fputc(ch,f2); ch=fgetc(f1);
}
fcloseall();
}
getch(); return 0;
}
I.
I.
I.
I.
I.
I.
I.
* Một số tài liệu cũ có thể bị lỗi font khi hiển thị do dùng bộ mã không phải Unikey ...
Người chia sẻ: Trần Văn Chung
Dung lượng: |
Lượt tài: 1
Loại file:
Nguồn : Chưa rõ
(Tài liệu chưa được thẩm định)