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

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

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 (272.29 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

óng t p tin

4.


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 đ
t i đa s
Hàm tr
Hàm tr

đ
đ
v
v

c 1 chu i t file vào bi n str, n là s ký t
c
con tr t i string đ c đ c n u thành công
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


Hậm fprintf ( )



Hàm th vi n ghi t p tin theo đ nh d ng:

int fprintf (<file_ptr>, <format>, <argument, …> );




Vi c s d ng hàm fprintf() t ng t nh hàm
printf(), ch có khác ch nh ng gì in ra màn hình
s đ c ghi lên t p tin.
Ví d :
fprintf (fp, "%d%s%.0g\n", 10, "!= " , gt(10));
fprintf (fp, "%s%d\n", "S= ", x*2+3);

Tr n Quang
© 2016

Ch

ng 09: File

K thu t l p trình
21


Di chuy n con tr đ n 1 v trí m i
Cú pháp:
int fseek (FILE *fp, long sb, int xp);

Trong đó
 sb là s byte c n di chuy n.
 xp cho bi t v trí xu t phát mà vi c d ch chuy n
đ c b t đ u t đó. xp có th nh n các giá tr sau:
 SEEK_SET hay 0 : Xu t phát t
đ u file.
 SEEK_CUR hay 1: Xu t phát t
v trí hi n t i
c a con tr ch v trí.
 SEEK_END hay 2 : Xu t phát t
cu i file.


Tr n Quang
© 2016

Ch

ng 09: File

K thu t l p trình
22


Di chuy n con tr đ n 1 v trí m i


Ví d :
fseek(fp, 1, SEEK_SET);
a = fgetc(fp);

printf("%c ", a);
fseek(fp, 3, SEEK_CUR);
a = fgetc(fp);
printf("%c ", a);
fseek(fp, -1, SEEK_END);
a = fgetc(fp);
printf("%c ", a);

Tr n Quang
© 2016

Ch

ng 09: File

K thu t l p trình
23


Di chuy n con tr v đ u t p tin




Cú pháp:
int rewind (FILE *fp);
Ví d :
while (!feof(fp)) {
a = getc(fp); printf("%c", a);
}

printf("\n");
rewind(fp);
while (!feof(fp)) {
a = getc(fp); printf("%c", a);
}

Tr n Quang
© 2016

Ch

ng 09: File

K thu t l p trình
24


XẬc đ nh v trí hi n t i c a con tr




Cú pháp:
int ftell (FILE *fp);
Ví d :
printf ("%d ", ftell (fp));
fseek (fp, -1, SEEK_END);
a = fgetc (fp);
printf ("%c ", a);
printf ("%d ", ftell(fp));


Tr n Quang
© 2016

Ch

ng 09: File

K thu t l p trình
25


×