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

Bài giảng Nhập môn lập trình: Lập trình với tập tin - ThS. Nguyễn Đông Hà

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 (359.99 KB, 37 trang )

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 ln 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ó:

r
w
a
r+
w+
a+

mở file để đọc, nếu file ko tồn tại, fopen trả về
NULL
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

mở file để thêm vào phía sau file đã tồn tại
mở file để đọc viết, ghi đè lên phần dữ liệu đã có
mở file để đọc viết, xóa hồn tồn phần dữ liệu cũ
mở file để đọc và thêm vào phía sau file cũ

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
„

int

„

Đọc các giá trị số (số nguyên, thực, 1 ký tự..)
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
„

Đọc các giá trị chuỗi ký tự

char * fgets (char * chuoi, int sokytu ,
FILE * tap_tin);
„

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);

Sưu tầm bởi: www.daihoc.com.vn


Các hàm đọc, ghi
„

int

„


Ghi
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
„
int

„

Đọ c

fread (void * vungnho, size_t sobytedoc,
size_t solandoc, FILE * tap_tin);

Ví d ụ

/* 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
„

Ghi

size_t fwrite ( const void * vungnho,
size_t sobyteghi, size_t solanghi, FILE * tap_tin );

„

Ví d ụ

/* 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);


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


×