Xử lý tập tin gồm các mẫu tin
Mở tập tin bằng hàm fopen với tùy chọn “r+b”
để đọc và ghi
Đóng tập tin bằng hàm fclose
Có thể dùng hàm fseek để đưa bộ định vị đọc
ghi đến mẫu tin thích hợp
Dùng hàm ftell để ghi nhận lại vị trí của mẫu
tin mà sau này sẽ được cập nhật dữ liệu
Vẫn đọc và ghi bằng hàm fread và fwrite
Tạo một tập tin gồm các mẫu tin
Gồm 3 bước:
Tạo tập tin bằng hàm fopen() với tùy chọn “wb”
Gọi hàm fwrite() ghi dữ liệu từ biến bộ nhớ (là
biến kiểu mẫu tin) vào tập tin
Đóng tập tin bằng hàm fclose()
Tạo một tập tin gồm các mẫu tin
int TaoDanhSachHS(char *ten_tap_tin)
{
HOCSINH dshs[3] =
{
{"993236","Lam Vinh Khang",0,0,0},
{"993237","To My Hien",0,0,0},
{"993238","Van Si Ha",0,0,0}
};
FILE *fp;
fp = fopen(ten_tap_tin,"wb")
37 trang |
Chia sẻ: trungkhoi17 | Lượt xem: 468 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Bài giảng Lập trình với tập tin - Nguyễn Đông Hà, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Lập trình với tập tin
Nguyễn Đông Hà
Khoa CNTT – ĐH KHTN
Sưu tầm bởi: www.daihoc.com.vn
Lập trình với tập tin
Dữ liệu của chương trình được lưu trữ trong bộ
nhớ chính (các biến bộ nhớ), không được lưu
trữ cho lần chạy kế tiếp của chương trình
Mục đích chính của việc lập trình với tập tin là
nhằm để lưu trữ dữ liệu vào bộ nhớ phụ và
truy xuất trở lại khi cần thiết
Sưu tầm bởi: www.daihoc.com.vn
Phân loại tập tin
Tập tin văn bản
có thể xem nội dung bằng lệnh type của hệ điều
hành DOS
được soạn thảo bằng các chương trình soạn thảo
văn bản đơn giản như Notepad của Windows...
Tập tin nhị phân
không có dạng văn bản ASCII
ví dụ: tập tin mã thực thi trên hệ điều hành
(.exe,.com), tập tin văn bản phức hợp (.doc), tập
tin hình ảnh (.jpg)
Sưu tầm bởi: www.daihoc.com.vn
Kỹ thuật lập trình tập tin
Các thao tác với tập tin luôn gồm 3 bước
chính sau đây:
Mở tập tin để chuẩn bị làm việc
Đọc và ghi dữ liệu
Đóng tập tin
Sưu tầm bởi: www.daihoc.com.vn
Mở tập tin
Dùng hàm fopen để mở tập tin theo cú pháp sau:
FILE *fopen(const char *ten_tap_tin,
const char *tuy_chon);
Ví dụ:
/* Mo tap tin ten la text.txt de ghi */
fopen( “text.txt” , ”wt” );
Sưu tầm bởi: www.daihoc.com.vn
Mở tập tin
Các tùy chọn có thể có:
mở file để đọc và thêm vào phía sau file cũa+
mở file để đọc viết, xóa hoàn toàn phần dữ liệu cũw+
mở file để đọc viết, ghi đè lên phần dữ liệu đã cór+
mở file để thêm vào phía sau file đã tồn tạia
mở file để ghi, nếu file ko tồn tại, tạo file mới, nếu
đã tồn tại, ghi đè lên file cũ ko cần hỏi
w
mở file để đọc, nếu file ko tồn tại, fopen trả về
NULL
r
Sưu tầm bởi: www.daihoc.com.vn
Mở tập tin
Mặc định mở tập tin là tập tin văn bản, để mở
tập tin nhị phân, phần tùy chọn phải thêm vào
ký tự “b”, tức là “wb”, “rb”.. (b: binary)
Có thể thêm ký tự “t” vào phần tùy chọn cho
tập tin văn bản, mặc dù không ghi cũng được.
(t: text)
Sưu tầm bởi: www.daihoc.com.vn
Mở tập tin
Hàm fopen() trả về NULL nếu xảy ra lỗi:
Sử dụng tên tập tin không đúng quy tắc
Mở tập tin chưa sẵn sàng (đĩa chưa format, chưa
đóng ổ đĩa)
Mở tập tin không tồn tại
Bất cứ khi nào sử dụng hàm fopen, luôn phải
kiểm tra kết quả trả về xem có thực hiện thành
công hay không
Sưu tầm bởi: www.daihoc.com.vn
Các hàm đọc, ghi
Đọc các giá trị số (số nguyên, thực, 1 ký tự..)
int fscanf(FILE *tap_tin,
const char * format [ , argument , ...] );
Ví dụ
/* doc mot so nguyen dua vao bien n tu
tap tin duoc dai dien boi con tro ten la
fp */
fscanf(fp ,”%d” , &n);
Sưu tầm bởi: www.daihoc.com.vn
Các hàm đọc, ghi
Ví dụ
/* Doc mot chuoi ky tu chua toi da
20 ky tu tu tap tin duoc dai dien boi
con tro fp, dua vao bien chuoi ky tu ten
la dong */
fgets(dong,20,fp);
char * fgets (char * chuoi, int sokytu ,
FILE * tap_tin);
Đọc các giá trị chuỗi ký tự
Sưu tầm bởi: www.daihoc.com.vn
Các hàm đọc, ghi
Ghi
int fprintf (FILE * tap_tin,
const char * ma[ , bien , ...] );
Ví dụ
/* ghi mot so nguyen n ten tap tin duoc
dai dien boi con tro ten la fp */
fprintf(fp,"%d",n);
Sưu tầm bởi: www.daihoc.com.vn
Tạo tập tin văn bản mới
Gồm 3 bước:
Mở tập tin bằng hàm fopen() với tùy chọn “wt”
Ghi dữ liệu lên tập tin bằng hàm fprintf()
Đóng tập tin bằng hàm fclose()
Sưu tầm bởi: www.daihoc.com.vn
Tạo tập tin văn bản mới – ví dụ
void TaoTapTin()
{
FILE* fp;
int x = 10;
fp = fopen(“test.txt”,”wt”);
if(fp != NULL)
{
fprintf(fp, “Chao cac ban !\n”);
fprintf(fp,"x = %d", x);
fclose(fp);
}
else
printf(“Khong the tao tap tin”);
}
Sưu tầm bởi: www.daihoc.com.vn
Đọc dữ liệu từ tập tin văn bản có sẵn
Gồm 3 bước:
Mở tập tin bằng hàm fopen() với tùy chọn “rt”
Gọi hàm fscanf() hay fgets() để đọc dữ liệu từ tập
tin vào biến bộ nhớ
Đóng tập tin bằng hàm fclose()
Dùng hàm fscanf để đọc số nguyên, số thực
hay ký tự; dùng hàm fgets để đọc nguyên một
dòng của tập tin
Để kiểm tra đã đến cuối tập tin hay chưa, dùng
hàm feof
Sưu tầm bởi: www.daihoc.com.vn
Đọc dữ liệu từ tập tin văn bản – ví dụ
Sưu tầm bởi: www.daihoc.com.vn
#define MAXCHAR 255
void DocTapTin()
{
FILE* fp;
char dong[MAXCHAR+1];
fp = fopen(“test.txt”,”rt”);
if(fp != NULL)
{
while(!feof(fp)) /* chua cuoi tt*/
{
if(fgets(dong,MAXCHAR,fp)!=NULL)
printf(“%s”,dong);
}
fclose(fp);
}
else
printf(“Khong the mo tap tin”);
}
Sưu tầm bởi: www.daihoc.com.vn
#define MAXCHAR 255
void DocTapTin()
{
FILE* fp;
char dong[MAXCHAR+1];
fp = fopen(“test.txt”,”rt”);
if(fp != NULL)
{
while(!feof(fp)) /* chua cuoi tt*/
{
if(fgets(dong,MAXCHAR,fp)!=NULL)
printf(“%s”,dong);
}
fclose(fp);
}
else
printf(“Khong the mo tap tin”);
}
Sưu tầm bởi: www.daihoc.com.vn
Thêm dữ liệu vào cuối tập tin văn bản có sẵn
Gồm 3 bước:
Mở tập tin bằng hàm fopen() với tùy chọn “at”
Ghi dữ liệu thêm vào cuối tập tin bằng hàm
fprintf()
Đóng tập tin bằng hàm fclose()
Sưu tầm bởi: www.daihoc.com.vn
Ví dụ ghép 2 tập tin
/* Copy du lieu tu tap tin 2 vao phia sau tap
tin 1, tra ve 1 neu thanh cong, tra ve 0 neu
that bai */
int GhepHaiTapTin(char *tap_tin_1,
char *tap_tin_2)
{
FILE *fp1,*fp2;
char dong[MAXCHAR +1];
fp1 = fopen(tap_tin_1,"at");
fp2 = fopen(tap_tin_2,"rt");
if(fp1==NULL || fp2==NULL)
{
printf("Loi mo tap tin\n");
return 0;
}
Sưu tầm bởi: www.daihoc.com.vn
Ví dụ ghép 2 tập tin
fprintf(fp1,"\n");
while(!(feof(fp2)))
{
if(fgets(dong, MAXCHAR, fp2) !=NULL)
fprintf(fp1,dong);
}
fclose(fp1);
fclose(fp2);
return 1;
}
Sưu tầm bởi: www.daihoc.com.vn
Xử lý tập tin nhị phân
Gồm 3 bước:
Gọi hàm fopen() với tùy chọn có phối hợp với “b”
Gọi hàm fread() hay fwrite() để đọc dữ liệu từ tập
tin vào biến bộ nhớ (là biến kiểu mẫu tin) hay ghi
dữ liệu từ biến bộ nhớ vào tập tin
Đóng tập tin bằng hàm fclose()
Sưu tầm bởi: www.daihoc.com.vn
Các hàm đọc, ghi tập tin nhị phân
Đọc
Ví dụ
int fread (void * vungnho, size_t sobytedoc,
size_t solandoc, FILE * tap_tin);
/* Doc vung du lieu tren tap tin dai dien
boi con tro fp, co kich thuoc bang
(sizeof) kich thuoc cua 1 mau tin HOCSINH
dua vao bien mau tin hs */
fread(&hs,sizeof(HOCSINH),1,fp);
Sưu tầm bởi: www.daihoc.com.vn
Các hàm đọc, ghi tập tin nhị phân
Ví dụ
Ghi
/* Ghi mau tin hs len tap tin dai dien
boi con tro fp, co kich thuoc bang
(sizeof) kich thuoc cua 1 mau tin
HOCSINH*/
fwrite(&hs,sizeof(HOCSINH),1,fp);
size_t fwrite ( const void * vungnho,
size_t sobyteghi, size_t solanghi, FILE * tap_tin );
Sưu tầm bởi: www.daihoc.com.vn
Xử lý tập tin gồm các mẫu tin
Mở tập tin bằng hàm fopen với tùy chọn “r+b”
để đọc và ghi
Đóng tập tin bằng hàm fclose
Có thể dùng hàm fseek để đưa bộ định vị đọc
ghi đến mẫu tin thích hợp
Dùng hàm ftell để ghi nhận lại vị trí của mẫu
tin mà sau này sẽ được cập nhật dữ liệu
Vẫn đọc và ghi bằng hàm fread và fwrite
Sưu tầm bởi: www.daihoc.com.vn
Tạo một tập tin gồm các mẫu tin
Gồm 3 bước:
Tạo tập tin bằng hàm fopen() với tùy chọn “wb”
Gọi hàm fwrite() ghi dữ liệu từ biến bộ nhớ (là
biến kiểu mẫu tin) vào tập tin
Đóng tập tin bằng hàm fclose()
Sưu tầm bởi: www.daihoc.com.vn
Tạo một tập tin gồm các mẫu tin
int TaoDanhSachHS(char *ten_tap_tin)
{
HOCSINH dshs[3] =
{
{"993236","Lam Vinh Khang",0,0,0},
{"993237","To My Hien",0,0,0},
{"993238","Van Si Ha",0,0,0}
};
FILE *fp;
fp = fopen(ten_tap_tin,"wb");
Sưu tầm bởi: www.daihoc.com.vn
Tạo một tập tin gồm các mẫu tin
if(fp!=NULL)
{
fwrite(dshs,sizeof(HOCSINH),3,fp);
fclose(fp);
return 1;
}
else
{
printf("Khong the tao tap tin!\n");
return 0;
}
}
Sưu tầm bởi: www.daihoc.com.vn
Thêm mẫu tin vào tập tin có sẵn
Gồm 3 bước:
Gọi hàm fopen() với tùy chọn “ab”
Gọi hàm fwrite() ghi dữ liệu từ biến bộ nhớ (là
biến kiểu mẫu tin) vào tập tin
Đóng tập tin bằng hàm fclose()
Sưu tầm bởi: www.daihoc.com.vn
Đọc danh sách mẫu tin từ tập tin
Gồm 3 bước:
Gọi hàm fopen() với tùy chọn “rb”
Gọi hàm fread() để đọc dữ liệu từ tập tin vào biến
bộ nhớ (là biến kiểu mẫu tin)
Đóng tập tin bằng hàm fclose()
Sưu tầm bởi: www.daihoc.com.vn
Đọc danh sách mẫu tin từ tập tin
int DocDanhSachHS(char *ten_tap_tin)
{
FILE *fp;
HOCSINH hs;
int stt = 0;
fp = fopen(ten_tap_tin,"rb");
if(fp!=NULL)
{
/* Doc tap tin */
....
Sưu tầm bởi: www.daihoc.com.vn
Đọc danh sách mẫu tin từ tập tin
while(!feof(fp))
{
stt++;
if(fread(&hs, sizeof(HOCSINH),1,fp)==1)
printf("%5d %6s %20s %f %f %f\n",
stt, hs.maso, hs.hoten, hs.diem1,
hs.diem2,hs.diem3);
}
fclose(fp);
return 1;
}
else
{
printf("Khong the mo tap tin!\n");
return 0;
}
}
Sưu tầm bởi: www.daihoc.com.vn
Các hàm quản lý tập tin
Xóa tập tin
char ten_tap_tin[80];
printf(“Nhap ten tap tin muon xoa: ");
gets(ten_tap_tin);
if(remove(ten_tap_tin) == 0)
printf(“Da xoa tap tin”);
else
printf( “Loi xoa tap tin”);
int remove ( const char *ten_tap_tin);
Ví dụ
Sưu tầm bởi: www.daihoc.com.vn
Các hàm quản lý tập tin
Đổi tên tập tin
char ten_cu[80], ten_moi[80];
printf(“Nhap ten hien tai: ");
gets(ten_cu);
printf(“Nhap ten moi: ");
gets(ten_moi);
if (rename( ten_cu, ten_moi) == 0 )
printf(“Da doi ten tap tin”);
else
printf(“Loi doi ten tap tin”);
int rename( const char *ten_cu, const char *ten_moi );
Ví dụ
Sưu tầm bởi: www.daihoc.com.vn
Các hàm quản lý tập tin
Sao chép tập tin
Không có hàm sẵn trong thư viện. Phải tự viết
bằng cách đọc và ghi dữ liệu dạng nhị phân.
Tham khảo hàm CopyFile trong sách trang 75.
Sưu tầm bởi: www.daihoc.com.vn
Kỹ thuật lập trình tập tin
văn bảnđọc dữ liệu dòng ký tự
từ tập tin vào biến
chuỗi ký tự
fgets
văn bảnđọc dữ liệu từ tập tin
vào biến số nguyên,
thực, ký tự
fscanf
văn bảnghi dữ liệu vào tập tinfprintf
văn bản, nhị phânmở tập tin (tập tin mới
hoặc đã có sẵn)
fopen
Loại tập tinChức năngTên hàm
Sưu tầm bởi: www.daihoc.com.vn
Kỹ thuật lập trình tập tin
văn bản, nhị
phân
lấy vị trí hiện tạiftell
văn bản, nhị
phân
kiểm tra đã đến cuối tập
tin hay chưa
feof
văn bản, nhị
phân
đóng tập tin sau khi
thao tác
fclose
nhị phânghi dữ liệu vào tập tinfwrite
nhị phânđọc dữ liệu từ tập tin
vào biến
fread
Loại tập tinChức năngTên hàm
Sưu tầm bởi: www.daihoc.com.vn
Sưu tầm bởi: www.daihoc.com.vn
Các file đính kèm theo tài liệu này:
- bai_giang_lap_trinh_voi_tap_tin_nguyen_dong_ha.pdf