Download as pdf or txt
Download as pdf or txt
You are on page 1of 48

Trng i hc Khoa hc T nhin

Khoa Cng ngh thng tin


B mn Cng ngh phn mm

NHP MN LP TRNH
ThS. ng Bnh Phng
dbphuong@fit.hcmus.edu.vn

TP TIN

VC

&
BB

Ni dung

Khi nim dng (stream)

Khi nim v phn loi tp tin

Cc thao tc x l cn bn

Mt s hm qun l tp tin

Tp tin

VC

&
BB

Nhp xut

Khi nim
C lu d liu (bin, mng, cu trc, ) trong
b nh RAM.
D liu c np vo RAM v gi ra ngoi
chng trnh thng qua cc thit b (device)
Thit b nhp (input device): bn phm, con chut
Thit b xut (output device): mn hnh, my in
Thit b va nhp va xut: tp tin

Cc thit b u thc hin mi x l thng


qua cc dng (stream).
Tp tin

VC

&
BB

Stream (dng)

Khi nim
L mi trng trung gian giao tip (nhn/
gi thng tin) gia chng trnh v thit b.
Mun nhn/gi thng tin cho mt thit b
ta s gi thng tin cho stream ni vi thit b
(c lp thit b).
Stream l dy byte d liu
Chy vo chng trnh gi l stream nhp.
Chy ra chng trnh gi l stream xut.

Tp tin

VC

&
BB

Stream (dng)

Phn loi
Stream vn bn (text)
Ch cha cc k t.
T chc thnh tng dng, mi dng ti a 255 k
t, kt thc bi k t cui dng \0 hoc k t
sang dng mi \n.

Stream nh phn (binary)


Cha cc byte.
c c v ghi chnh xc tng byte.
X l d liu bt k, k c d liu vn bn.
c s dng ch yu vi cc tp tin trn a.
Tp tin

VC

&

Stream (dng)

BB

Cc stream chun nh ngha sn


Tn

Stream

Thit b tng ng

stdin

Nhp chun

Bi phm

stdout

Xut chun

Mn hnh

stderr

Li chun

Mn hnh

stdprn (MS-DOS)

In chun

My in (LPT1:)

stdaux (MS-DOS)

Ph chun

Cng ni tip COM 1:

V d (hm fprintf xut ra stream xc nh)

Xut
Xut
Xut
Xut

ra
ra
ra
ra

mn hnh:
my in:
thit b bo li:
tp tin (stream fp):

fprintf(stdout, Hello);
fprintf(stdprn, Hello);
fprintf(stderr, Hello);
fprintf(fp, Hello);
Tp tin

VC

&
BB

Tp tin

Nhu cu
D liu gii hn v c lu tr tm thi
Nhp: g t bn phm.
Xut: hin th trn mn hnh.
Lu tr d liu: trong b nh RAM.

Mt thi gian, khng gii quyt c bi


ton vi s d liu ln.
Cn mt thit b lu tr sao cho d liu vn
cn khi kt thc chng trnh, c th s dng
nhiu ln v kch thc khng hn ch.
Tp tin

VC

&
BB

Tp tin

Khi nim
Tp hp thng tin (d liu) c t chc theo
mt dng no vi mt tn xc nh.
Mt dy byte lin tc ( gc lu tr).
c lu tr trong cc thit b lu tr ngoi
nh a mm, a cng, USB
Vn tn ti khi chng trnh kt thc.
Kch thc khng hn ch (ty vo thit b lu tr)

Cho php c d liu (thit b nhp) v ghi


d liu (thit b xut).
Tp tin

VC

&
BB

Tp tin

Phn loi
Theo ngi s dng: quan tm n ni dung
tp tin nn s phn loi theo phn m rng
.EXE, .COM, .CPP, .DOC, .PPT,
Theo ngi lp trnh: t to cc stream tng
minh kt ni vi tp tin xc nh nn s
phn loi theo cch s dng stream trong C
tp tin kiu vn bn (ng vi stream
vn bn) v tp tin kiu nh phn (ng vi
stream nh phn).
Tp tin

VC

&
BB

Phn loi tp tin

Tp tin kiu vn bn (stream vn bn)


Dy cc dng k tip nhau.
Mi dng di ti a 255 k t v kt thc
bng k hiu cui dng (end_of_line).
Dng khng phi l mt chui v khng c
kt thc bi k t \0.
Khi ghi \n c chuyn thnh cp k t CR
(v u dng, m ASCII 13) v LF (qua dng,
m ASCII 10).
Khi c th cp CR-LF c chuyn thnh \n.
Tp tin

10

VC

&
BB

Phn loi tp tin

Tp tin kiu nh phn (stream nh phn)


D liu c c v ghi mt cch chnh xc,
khng c s chuyn i no c.
K t kt thc chui \0 v end_of_line khng
c ngha l cui chui v cui dng m
c x l nh mi k t khc.

Tp tin

11

VC

&
BB

Quy tc t tn tp tin

Tn
(name)

M rng
(extension)

Khng bt buc.
Thng c 3 k t.
Thng do chng
trnh ng dng to
tp tin t t

Bt buc phi c.
H iu hnh MS-DOS: di ti a 8 k t.
H iu hnh Windows: di ti a 128 k t.
Gm cc k t A n Z, s 0 n 9, k t khc
nh #, $, %, ~, ^, @, (, ), !, _, khong trng.
Tp tin

12

VC

&
BB

nh v tp tin

ng dn
Ch n mt tp tin khng nm trong th mc
hin hnh. V d: c:\data\list.txt ch tp tin
list.txt nm trong th mc data ca a C.
Trong chng trnh, ng dn ny c ghi
trong chui nh sau: c:\\data\\list.txt
Du \ biu th k t iu khin nn th
hin n ta phi thm mt du \ trc.
Nhng nu chng trnh yu cu nhp ng
dn t bn phm th ch nhp mt du \.
Tp tin

13

VC

&
BB

Quy trnh thao tc vi tp tin

1. M tp tin: to mt stream ni kt vi tp tin


cn m, stream c qun l bi bin con tr
n cu trc FILE
Cu trc c nh sn trong STDIO.H
Cc thnh phn ca cu trc ny c dng
trong cc thao tc x l tp tin.
2. S dng tp tin (sau khi m c tp tin)
c d liu t tp tin a vo chng trnh.
Ghi d liu t chng trnh ln tp tin.
3. ng tp tin (sau khi s dng xong).
Tp tin

14

VC

&
BB

Hm m tp tin
FILE *fopen(const char *filename, const char *mode)

M tp tin c tn (ng dn) l cha trong


filename vi kiu m mode (xem bng).
Thnh cng: con tr kiu cu trc FILE
Tht bi: NULL (sai quy tc t tn tp
tin, khng tm thy a, khng tm thy
th mc, m tp tin cha c c, )
FILE* fp = fopen(taptin.txt, rt);
if (fp == NULL)
printf(Khong mo duoc tap tin!);

Tp tin

15

VC

&

i s m tp tin (mode)

BB

i s ngha
b

M tp tin kiu nh phn (binary)

M tp tin kiu vn bn (text) (mc nh)

M tp tin ch c d liu t tp tin. Tr v


NULL nu khng tm thy tp tin.

M tp tin ch ghi d liu vo tp tin. Tp


tin s c to nu cha c, ngc li d liu
trc s b xa ht.

M tp tin ch thm (append) d liu vo


cui tp tin. Tp tin s c to nu cha c.

r+

Ging mode r v b sung thm tnh nng ghi


d liu v tp tin s c to nu cha c.

w+

Ging mode w v b sung thm tnh nng c.

a+

Ging mode a v b sung thm tnh nng c.


Tp tin

16

VC

&
BB

c v ghi d liu (stdio.h)

Thc hin c/ghi d liu theo cc cch sau:


Nhp/xut theo nh dng
Hm: fscanf, fprintf
Ch dng vi tp tin kiu vn bn.

Nhp/xut tng k t hay dng ln tp tin


Hm: getc, fgetc, fgets, putc, fputs
Ch nn dng vi kiu vn bn.

c/ghi trc tip d liu t b nh ln tp tin


Hm: fread, fwrite
Ch dng vi tp tin kiu nh phn.
Tp tin

17

VC

&
BB

Hm xut theo nh dng


int fprintf(FILE *fp, char *fnt, )

Ghi d liu c chui nh dng fnt (ging


hm printf) vo stream fp.
Nu fp l stdout th hm ging printf.
Thnh cng: tr v s byte ghi c.
Tht bi: tr v EOF (c gi tr l -1, c
nh ngha trong STDIO.H, s dng trong
tp tin c kiu vn bn)
int i = 2912; int c = P; float f = 17.06;
FILE* fp = fopen(taptin.txt, wt);
if (fp != NULL)
fprintf(fp, %d %c %.2f\n, i, c, f);
Tp tin

18

VC

&
BB

Hm nhp theo nh dng


int fscanf(FILE *fp, char *fnt, )

c d liu c chui nh dng fnt (ging


hm scanf) t stream fp.
Nu fp l stdin th hm ging printf.
Thnh cng: tr v s thnh phn c v
lu tr c.
Tht bi: tr v EOF.
int i;
FILE* fp = fopen(taptin.txt, rt);
if (fp != NULL)
fscanf(fp, %d, &i);
Tp tin

19

VC

&
BB

Hm nhp theo nh dng

V d
Mt tp tin cha nhiu dng, mi dng l
thng tin mi sinh vin theo nh dng sau:
<MSSV>-<Tn>(<Phi>)tab<NTNS>tab<TB>
V d: 0312078-H. P. Trang(Nu) 17/06/85 8.5

c chui thng tin phc hp


%[chui]: c cho n khi khng gp k t
no trong chui th dng.
%[^chui]: c cho n khi gp mt trong
nhng k t trong chui th dng.
Tp tin

20

VC

&
BB

Hm Tch 2 Mng
typedef struct SSinhVien {
char m_szMSSV[8];
// 0312078
char m_szHoTen[30];
// H. P. Trang
char m_cGioiTinh[4];
// Nu
char m_szNTNS[9];
// 17/06/85
float m_fDiemTB;
// 8.5
};
void main() {
SSinhVien sv;
FILE *fp = fopen(dssv.txt, rt);
if (fp != NULL) {
fscanf(fp, %[^-]-%[^(](%[^)])\t%[^\t]\t%f,
sv.m_szMSSV, sv.m_szHoTen, &sv.m_cGioiTinh,
sv.m_szNTNS, &sv.m_fDiemTB);
fclose(fp);
}
}
21
Tp tin

VC

&
BB

Hm nhp k t
int getc(FILE *fp) v int fgetc(FILE *fp)

c mt k t t stream fp.
getc l macro cn fgetc l phin bn hm
ca macro getc.
Thnh cng: tr v k t c c sau khi
chuyn sang s nguyn khng du.
Tht bi: tr v EOF khi kt thc stream fp
hoc gp li.
char ch;
FILE* fp = fopen(taptin.txt, rt);
if (fp != NULL)
ch = getc(fp); // ch = fgetc(fp);
Tp tin

22

VC

&
BB

Hm nhp chui
Int fgets(char *str, int n, FILE *fp)

c mt dy k t t stream fp vo vng
nh str, kt thc khi n-1 k t hoc gp
k t xung dng.
Thnh cng: tr v str.
Tht bi: tr v NULL khi gp li hoc gp
k t EOF.
char s[20];
FILE* fp = fopen(taptin.txt, rt);
if (fp != NULL)
fgets(s, 20, fp);
Tp tin

23

VC

&
BB

Hm xut k t
int putc(int ch, FILE *fp) v int fputc(in ch, FILE *fp)

Ghi k t ch vo stream fp.


putc l macro cn fputc l phin bn hm
ca macro putc.
Thnh cng: tr v k t ch.
Tht bi: tr v EOF.
FILE* fp = fopen(taptin.txt, rt);
if (fp != NULL)
putc(a, fp); // hoc fputc(a, fp);

Tp tin

24

VC

&
BB

Hm xut chui
int fputs(const char *str, FILE *fp)

Ghi chui k t str vo stream fp. Nu fp l


stdout th fputs ging hm puts, nhng puts
ghi k t xung dng.
Thnh cng: tr v k t cui cng ghi.
Tht bi: tr v EOF.
char s[] = Ky thuat lap trinh;
FILE* fp = fopen(taptin.txt, wt);
if (fp != NULL)
fputs(s, fp);
Tp tin

25

VC

&
BB

Hm xut trc tip


int fwrite(void *buf, int size, int count, FILE *fp)

Ghi count mu tin c kch thc mi mu


tin l size (byte) t vng nh buf vo
stream fp (theo kiu nh phn).
Thnh cng: tr v s lng mu tin
(khng phi s lng byte) ghi.
Tht bi: s lng nh hn count.
int a[] = {1, 2, 3};
FILE* fp = fopen(taptin.dat, wb);
if (fp != NULL)
fwrite(a, sizeof(int), 3, fp);
Tp tin

26

VC

&
BB

Hm nhp trc tip


int fread(void *buf, int size, int count, FILE *fp)

c count mu tin c kch thc mi mu


tin l size (byte) vo vng nh buf t
stream fp (theo kiu nh phn).
Thnh cng: tr v s lng mu tin
(khng phi s lng byte) tht s c.
Tht bi: s lng nh hn count khi kt
thc stream fp hoc gp li.
int a[5];
FILE* fp = fopen(taptin.dat, wb);
if (fp != NULL)
fread(a, sizeof(int), 3, fp);
Tp tin

27

VC

&
BB

Hm ng tp tin xc nh
int fclose(FILE *fp)

ng stream fp.
D liu trong stream fp s c vt (ghi
ht ln a) trc khi ng.
Thnh cng: tr v 0.
Tht bi: tr v EOF.
FILE* fp = fopen(taptin.txt, rt);

fclose(fp);

Tp tin

28

VC

&
BB

Hm ng tt c stream
int fcloseall()

ng tt c stream ang c m ngoi tr


cc stream chun stdin, stdout, stdprn,
stderr, stdaux.
Nn ng tng stream thay v ng tt c.
Thnh cng: tr v s lng stream c
ng.
Tht bi: tr v EOF.
FILE* fp1 = fopen(taptin1.txt, rt);
FILE* fp2 = fopen(taptin2.txt, wt);

fcloseall();
Tp tin

29

VC

&
BB

Vt d liu trong stream

Khi chng trnh kt thc, cc stream ang m


s c vt (flush) v ng li. Tuy nhin, ta
nn ng mt cc tng minh cc stream sau
khi s dng xong (nht l cc stream tp tin)
trnh cc s c xy ra trc khi chng trnh
kt thc bnh thng.
Ta c th vt d liu trong stream m khng
cn ng stream bng mt trong hai hm:
Vt stream fp xc nh: int fflush(FILE *fp);
Vt tt c stream ang m: int flushall();
Tp tin

30

VC

&
BB

Con tr ch v (position indicator)

Khi nim
c to t ng khi m tp tin.
Xc nh ni din ra vic c/ghi trong tp tin
V tr con tr ch v
Khi tp tin cha m: u tp tin (gi tr 0).
Khi m tp tin:
cui tp tin khi m chn (mode a hay a+)
u tp tin (hay gi tr 0) khi m vi cc mode
khc (w, w+, r, r+).
Tp tin

31

VC

&
BB

Truy xut tun t & ngu nhin

Truy xut tun t (sequentially access)


Phi c/ghi d liu t v tr con tr ch v n
v tr n-1 trc khi c d liu ti v tr n.
Khng cn quan tm n con tr ch v do con
tr ch v t ng chuyn sang v tr k tip
sau thao tc c/ghi d liu.
Truy xut ngu nhin (random access)
C th c/ghi ti v tr bt k trong tp tin
m khng cn phi c/ghi ton b d liu
trc quan tm n con tr ch v.
Tp tin

32

VC

&
BB

Hm t li v tr con tr ch v
void rewind(FILE *fp)

t li v tr con tr ch v v u (byte 0)
tp tin fp.

Khng
FILE* fp = fopen(taptin.txt, w+);
fprintf(fp, 0123456789);
rewind(fp);
fprintf(fp, *****);
Tp tin

33

VC

&
BB

Hm ti nh v con tr ch v
int fseek(FILE *fp, long offset, ing origin)

t v tr con tr ch v trong stream fp vi


v tr offset so vi ct mc origin (SEEK_SET
hay 0: u tp tin; SEEK_CUR hay 1: v tr
hin ti; SEEK_END hay 2: cui tp tin)
Thnh cng: tr v 0.
Tht bi: tr v gi tr khc 0.
FILE* fp = fopen(taptin.txt, w+);
fseek(fp, 0L, SEEK_SET); // rewind(fp);
fseek(fp, 0L, SEEK_END); // cui tp tin
fseek(fp, -2L, SEEK_CUR);// li li 2 v tr
Tp tin

34

VC

&
BB

Hm xc nh v tr con tr ch v
long ftell(FILE *fp)

Hm tr v v tr hin ti ca con tr ch v
(tnh t v tr u tin ca tp tin, tc l 0)
ca stream fp.
Thnh cng: tr v v tr hin ti ca con
tr ch v.
Tht bi: tr v -1L.
FILE* fp = fopen(taptin.txt, rb);
fseek(fp, 0L, SEEK_END);
long size = ftell(fp);
printf(Kich thuoc tap tin la %ld\n, size);
Tp tin

35

VC

&
BB

Du hiu kt thc tp tin

Khi bit kch thc tp tin


S dng fwrite lu n mu tin
kch thc = n * sizeof(1 mu tin);
S dng hm fseek kt hp hm ftell
Khi cha bit kch thc tp tin
Hng s EOF (=-1) (ch cho tp tin vn bn)
while ((c = fgetc(fp)) != EOF)
Hm int feof(FILE *fp) (cho c 2 kiu tp tin)
tr v s 0 nu cha n cui tp tin
tr v s khc 0 nu n cui tp tin.
Tp tin

36

VC

&
BB

Cc hm qun l tp tin

Hm nhp xut tp tin (File I/O function) l cc


cp phn trc
M v ng tp tin: fopen, fclose
Nhp/Xut tp tin:
Theo nh dng: fprintf, fscanf
Tng k t hay chui: fputc, fputs, fgetc, fgets
Trc tip t b nh: fwrite, fread

Hm qun l tp tin (File-Management function)


Xa tp tin: remove
i tn tp tin: rename
Tp tin

37

VC

&
BB

Hm xa tp tin
int remove(const char *filename)

Xa tp tin xc nh bi filename.

Thnh cng: tr v 0.
Tht bi: tr v -1.
if (remove(c:\\vc.txt) == 0)
printf(Tap tin vc.txt da bi xoa!);
else
printf(Ko xoa duoc tap tin vc.txt!);
Tp tin

38

VC

&
BB

Hm i tn tp tin

int rename(const char *oldname, const char *newname)

i tn tp tin oldname thnh newname.


Hai tp tin phi cng a nhng khng
cn thit phi cng th mc (c th s
dng di chuyn hay sao chp tp tin).
Thnh cng: tr v 0.
Tht bi: tr v -1.
if (rename(c:\\a.txt, c:\\BT\b.cpp) == 0)
printf(Doi ten tap tin thanh cong);
else
printf(Doi ten tap tin that bai);
Tp tin

39

VC

&
BB

Bi tp l thuyt

Bi 1: S khc nhau gia stream kiu vn bn


v stream kiu nh phn?
Stream vn bn t ng chuyn i k t \n
thnh cp k t CR-LF trong khi stream nh phn
khng thc hin vic chuyn i ny (xem mi
k t u nh nhau).
Bi 2: Cn phi lm g trc khi mun truy xut
tp tin?
M tp tin (to stream kt ni vi tp tin cn
m) bng hm fopen.
Tp tin

40

VC

&
BB

Bi tp l thuyt

Bi 3: Khi m tp tin bng fopen, ta cn phi


xc nh thng tin no v hm s tr v ci g?
Cn xc nh tn tp tin cn m v mode m
tp tin ny. Hm s tr v mt con tr n kiu
FILE, con tr ny c dng thay cho tp tin
trong chng trnh.
Bi 4: Ba phng php truy xut tp tin?
1. Theo nh dng.
2. Theo k t / chui k t.
3. Trc tip t b nh.
Tp tin

41

VC

&
BB

Bi tp l thuyt

Bi 5: Hai phng php c thng tin t tp


tin l g?
1. Truy xut tun t (theo th t)
2. Truy xut ngu nhin (ti v tr bt k)
Bi 6: Gi tr ca EOF?
-1 (nh ngha trong STDIO.H)
Bi 7: Ta dng hng k hiu EOF lm g?
c s dng vi cc tp tin kiu vn bn
nhm xc nh du hiu cui tp tin.
Tp tin

42

VC

&
BB

Bi tp l thuyt

Bi 8: Cch xc nh cui tp tin trong kiu vn


bn v kiu nh phn?
S dng hm foef cho c hai kiu tp tin.
Trong kiu vn bn c th s dng hng EOF.
Bi 9: Con tr ch v l g v cch thay i n?
Con tr ch v nh du v tr trong ca mt
tp tin, ni din ra cc thao tc c/ghi.
Thay i v tr con tr ch v bng hm rewind
(v u tp tin) v fseek (v v tr bt k).
Tp tin

43

VC

&
BB

Bi tp l thuyt

Bi 10: Nu m mt tp tin cha c (bng mode


w), cho bit gi tr ca con tr ch v lc u?
Con tr ch v ch n k t u tin ca tp
tin (v tr 0).
Bi 11: Vit lnh ng tt c cc stream tp tin.
fcloseall();
Bi 12: Trnh by hai cch khc nhau chuyn
con tr ch v v u tp tin fp.
1. rewind(fp);
2. fseek(fp, 0, SEEK_SET);
Tp tin

44

VC

&
BB

Bi tp l thuyt

Bi 13: on chng trnh sau c sai khng?


void main()
{
FILE *fp;
int c;
if ((fp = fopen(abc.xyz, rb)) == NULL)
printf(Khong mo duoc tap abc.xyz\n);
else
{
while ((c = fgetc(fp)) != EOF)
fprintf(stdout, %c, c);
fclose(fp);
}
}
Tp tin

45

VC

&
BB

Bi tp thc hnh

Bi 14: Vit chng trnh ghi 3 s nguyn a, b, c


c nhp t bn phm vo mt tp tin.
Bi 15: Vit chng trnh c 3 s nguyn a, b,
c t mt tp tin, sau gii phng trnh ax2+
bx + c = 0 ri ghi kt qu vo mt tp tin khc.
Bi 16: Vit chng trnh c n s nguyn t
mt tp tin cho trc, sau sp xp tng dn
ri ghi kt qu vo 1 tp tin khc. V d:
4

4
2 5 1 4

1 2 4 5
Tp tin

46

VC

&
BB

Bi tp thc hnh

Bi 17: Vit chng trnh ghi cc dng vn bn


c nhp t bn phm ln tp tin.
Bi 18: Vit chng trnh in ni dung mt tp tin
ln mn hnh.
Bi 19: Vit chng trnh m s k t ch ci
ca tp tin v xut kt qu ra mt tp tin khc.
Bi 20: Vit chng trnh m s t ca tp tin
v xut kt qu ra mt tp tin khc.
Bi 21: Vit chng trnh m s ln lp li ca
mt t trong mt tp tin.
Tp tin

47

VC

&
BB

Bi tp thc hnh

Bi 22: Vit chng trnh m tp tin vn bn


c trn a, sao chp n thnh mt tp tin vn
bn mi vi iu kin l cc ch thng i
thnh ch hoa, tt c cc k t khc khng i.
Bi 23: Vit chng trnh ghp 2 tp tin vn
bn, ni dung tp tin th hai c ghp sau tp
tin th nht.
Bi 24: Vit sao sao chp mt tp tin cho trc.
Bi 25: Vit chng trnh ghi mt danh sch cu
trc xung tp tin sau c ln kim tra li.
Tp tin

48

You might also like