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

Nhp mn lp trnh

ThS. ng Bnh Phng (dbphuong@fit.hcmus.edu.vn)


Gii thiu v cc dng tp tin
H thng nhp xut trong lp trnh
Lp trnh thao tc trn tp tin vn bn th
S dng tp tin vn bn th lu tr
d liu ca chng trnh
Cc vn tm hiu m rng kin thc
ngh nghip
Thut ng v bi c thm ting Anh
10/7/2013 Khoa CNTT - H Khoa hc t nhin 2
Vic lp trnh vi tp tin nhm lu tr
d liu ca chng trnh vo b nh ph
v truy xut tr li d liu ny khi cn
thit. Thng thng d liu lu tr l cc
tp tin trn a.
V mt k thut lp trnh, ngi ta xem c
hai dng tp tin chnh l tp tin vn bn
th v tp tin tin nh phn.

10/7/2013 Khoa CNTT - H Khoa hc t nhin 4


y l dng tp tin vn bn c cu trc n gin
v thng dng nht, c th xem ni dung v sa
cha bng cc lnh ca h iu hnh hay nhng
chng trnh son tho vn bn n gin.
Thng thng c lu tr trn a di dng
.txt.
Hu ht m ngun chng trnh hin nay u lu
tr trn a di dng tp tin vn bn th.
Ni dung gm cc k t 8-bit
Cc k t thy c c m t 0x20 tr ln.
Cc k t iu khin c m nh hn 0x20.

10/7/2013 Khoa CNTT - H Khoa hc t nhin 5


C th lu cc k t Unicode hay k t
nhiu byte (multi-byte character).
Hai cu trc vn bn th m rng thng
dng nht l:
Unicode text: lu cc k t UTF-16.
UTF-8: lu cc k t di bin ng t 1
n 4 byte.

10/7/2013 Khoa CNTT - H Khoa hc t nhin 6


L cc tp tin khng c cu trc nh tp
tin vn bn th.
Mi tp tin bao gm mt dy cc byte d
liu, gm 2 dng:
Cc byte tun t khng lin quan nhau v
mt cu trc t chc tp tin.
c cu trc ha ty theo qui c ca phn
mm to ra tp tin.

10/7/2013 Khoa CNTT - H Khoa hc t nhin 7


Bao gm 3 bc chnh:
Bc 1. M tp tin, ngi lp trnh cn phi a
vo ng dn v tn tp tin chnh xc.
Bc 2. S dng tp tin (sau khi m tp tin
thnh cng).
c d liu t tp tin a vo bin b nh trong
chng trnh.
Ghi d liu t bin b nh trong chng trnh ln
tp tin.
Bc 3. ng tp tin (sau khi hon tt cc
cng vic cn thit).

10/7/2013 Khoa CNTT - H Khoa hc t nhin 9


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

10/7/2013 Khoa CNTT - H Khoa hc t nhin 10


i s ngha
b M tp tin kiu nh phn (binary)
t M tp tin kiu vn bn (text) (mc nh)
r M tp tin ch c d liu t tp tin. Tr v
NULL nu khng tm thy tp tin.
w 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.
a 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.

10/7/2013 Khoa CNTT - H Khoa hc t nhin 11


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.

10/7/2013 Khoa CNTT - H Khoa hc t nhin 12


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

10/7/2013 Khoa CNTT - H Khoa hc t nhin 13


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

10/7/2013 Khoa CNTT - H Khoa hc t nhin 14


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

10/7/2013 Khoa CNTT - H Khoa hc t nhin 15


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

10/7/2013 Khoa CNTT - H Khoa hc t nhin 16


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

10/7/2013 Khoa CNTT - H Khoa hc t nhin 17


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

10/7/2013 Khoa CNTT - H Khoa hc t nhin 18


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

10/7/2013 Khoa CNTT - H Khoa hc t nhin 19


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

10/7/2013 Khoa CNTT - H Khoa hc t nhin 20


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

10/7/2013 Khoa CNTT - H Khoa hc t nhin 21


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

10/7/2013 Khoa CNTT - H Khoa hc t nhin 22


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+).

10/7/2013 Khoa CNTT - H Khoa hc t nhin 23


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.

10/7/2013 Khoa CNTT - H Khoa hc t nhin 24


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

10/7/2013 Khoa CNTT - H Khoa hc t nhin 25


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

10/7/2013 Khoa CNTT - H Khoa hc t nhin 26


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

10/7/2013 Khoa CNTT - H Khoa hc t nhin 27


c ni dung tp tin c sn.
To tp tin ghi d liu.
Chnh sa ni dung tp tin c sn.
Ghi thm, ghp ni dung cc tp tin.
Nhng thao tc h tr
Kim tra tp tin c sn cha.
Kim tra tp tin cho php sa hay khng.
Xa, i tn tp tin.
10/7/2013 Khoa CNTT - H Khoa hc t nhin 29
Vn bn th thng c s dng lu
d liu ca chng trnh
D liu k t v chui.
D liu s trong tp tin vn bn.
D liu phc hp trong tp tin vn bn.

10/7/2013 Khoa CNTT - H Khoa hc t nhin 31


Cu trc ca tp tin HTML
Cc dng khc v tp tin vn bn th
c cu trc (RTF, TEX, XML)
Cu trc tp tin vn bn th m rng

10/7/2013 Khoa CNTT - H Khoa hc t nhin 33


binary file: tp tin nh phn.
end of file, EOF character: k hiu kt thc tp tin.
file processing: x l tp tin.
Hypertext Markup Language: ngn ng HTML dng lu tr tp tin
vn bn th c cu trc c dng cho cc trnh duyt web.
line: dng (vn bn).
multi-byte character: k t c lu tr bng nhiu byte.
random access: truy xut ngu nhin.
read only: ch c php c.
record (danh t): mu tin.
Rich Text Format: nh dng RTF, lu trn a di dng cc vn bn
ASCII c cu trc, dng lu tr cc vn bn phc hp c c thng tin
nh dng ln bn biu, hnh nh.
sequentially access: truy xut tun t.

10/7/2013 Khoa CNTT - H Khoa hc t nhin 35


stream: khi nim dng trong lp trnh bng ngn ng C/C++, ch dng
d liu nhp xut, c dng khi c ghi d liu tp tin hay thit b nhp
xut.
tab: k t tab (tng ng vi mt s khong trng khi hin th).
text file, plain text, ASNI text (hay ASCII text): ni chung v nh
dng vn bn n gin c son bng cc trnh son tho thng dng ca
cc h iu hnh.
Unicode text, UTF-8 text: cc nh dng vn bn th dn m rng, mi
k t chim nhiu byte lu tr trong b nh hay trn a.

10/7/2013 Khoa CNTT - H Khoa hc t nhin 36


Theory and Problems of Fundamentals of
Computing with C++, John R.Hubbard,
Schaums Outlines Series, McGraw-Hill, 1998.

10/7/2013 Khoa CNTT - H Khoa hc t nhin 37

You might also like