You are on page 1of 10

Lp trnh cn bn

Chng 10 KIU TP TIN


Hc xong chng ny, sinh vin s nm r cc vn sau: Mt s khi nim v tp tin? Cc bc thao tc vi tp tin. Mt s hm truy xut tp tin vn bn. Mt s hm truy xut tp tin nh phn.

I. MT S KHI NIM V TP TIN


i vi cc kiu d liu ta bit nh kiu s, kiu mng, kiu cu trc th d liu c t chc trong b nh trong (RAM) ca my tnh nn khi kt thc vic thc hin chng trnh th d liu cng b mt; khi cn chng ta bt buc phi nhp li t bn phm. iu va mt thi gian va khng gii quyt c cc bi ton vi s liu ln. gii quyt vn , ngi ta a ra kiu tp tin (file) cho php lu tr d liu b nh ngoi (a). Khi kt thc chng trnh th d liu vn cn do chng ta c th s dng nhiu ln. Mt c im khc ca kiu tp tin l kch thc ln vi s lng cc phn t khng hn ch (ch b hn ch bi dung lng ca b nh ngoi). C 3 loi d liu kiu tp tin: o Tp tin vn bn (Text File): l loi tp tin dng ghi cc k t ln a, cc k t ny c lu tr di dng m Ascii. im c bit l d liu ca tp tin c lu tr thnh cc dng, mi dng c kt thc bng k t xung dng (new line), k hiu \n; k t ny l s kt hp ca 2 k t CR (Carriage Return - V u dng, m Ascii l 13) v LF (Line Feed - Xung dng, m Ascii l 10). Mi tp tin c kt thc bi k t EOF (End Of File) c m Ascii l 26 (xc nh bi t hp phm Ctrl + Z). Tp tin vn bn ch c th truy xut theo kiu tun t. o Tp tin nh kiu (Typed File): l loi tp tin bao gm nhiu phn t c cng kiu: char, int, long, cu trc v c lu tr trn a di dng mt chui cc byte lin tc. o Tp tin khng nh kiu (Untyped File): l loi tp tin m d liu ca chng gm cc cu trc d liu m ngi ta khng quan tm n ni dung hoc kiu ca n, ch lu n cc yu t vt l ca tp tin nh ln v cc yu t tc ng ln tp tin m thi. Bin tp tin: l mt bin thuc kiu d liu tp tin dng i din cho mt tp tin. D liu cha trong mt tp tin c truy xut qua cc thao tc vi thng s l bin tp tin i din cho tp tin . Con tr tp tin: Khi mt tp tin c m ra lm vic, ti mi thi im, s c mt v tr ca tp tin m ti vic c/ghi thng tin s xy ra. Ngi ta hnh dung c mt con tr ang ch n v tr v t tn n l con tr tp tin.
Trang 105

Lp trnh cn bn

Sau khi c/ghi xong d liu, con tr s chuyn dch thm mt phn t v pha cui tp tin. Sau phn t d liu cui cng ca tp tin l du kt thc tp tin EOF (End Of File).

II. CC THAO TC TRN TP TIN


Mun thao tc trn tp tin, ta phi ln lt lm theo cc bc: o Khai bo bin tp tin. o M tp tin bng hm fopen(). o Thc hin cc thao tc x l d liu ca tp tin bng cc hm c/ghi d liu. o ng tp tin bng hm fclose(). y, ta thao tc vi tp tin nh cc hm c nh ngha trong th vin stdio.h.

II.1. Khai bo bin tp tin


C php: FILE <Danh sch cc bin con tr> Cc bin trong danh sch phi l cc con tr v c phn cch bi du phy(,). V d: FILE *f1,*f2;

II.2. M tp tin
C php: FILE *fopen(char *Path, const char *Mode) Trong : - Path: chui ch ng dn n tp tin trn a. - Type: chui xc nh cch thc m tp tin s m. Cc gi tr c th ca Mode: Ch r w a rb wb ab r+ w+ a+ r+b w+b a+b ngha M tp tin vn bn c To ra tp tin vn bn mi ghi Ni vo tp tin vn bn M tp tin nh phn c To ra tp tin nh phn ghi Ni vo tp tin nh phn M mt tp tin vn bn c/ghi To ra tp tin vn bn c ghi Ni vo hay to mi tp tin vn bn c/ghi M ra tp tin nh phn c/ghi To ra tp tin nh phn c/ghi Ni vo hay to mi tp tin nh phn

- Hm fopen tr v mt con tr tp tin. Chng trnh ca ta khng th thay i gi tr ca con tr ny. Nu c mt li xut hin trong khi m tp tin th hm ny tr v con tr NULL. V d: M mt tp tin tn TEST.txt ghi.
FILE *f; f = fopen(TEST.txt, w); if (f!=NULL) { /* Cc cu lnh thao tc vi tp tin*/

Trang 106

Lp trnh cn bn
/* ng tp tin*/ }

Trong v d trn, ta c s dng cu lnh kim tra iu kin xc nh m tp tin c thnh cng hay khng?. Nu m tp tin ghi, nu tp tin tn ti ri th tp tin s b xa v mt tp tin mi c to ra. Nu ta mun ghi ni d liu, ta phi s dng ch a. Khi m vi ch c, tp tin phi tn ti ri, nu khng mt li s xut hin.

II.3. ng tp tin
Hm fclose() c dng ng tp tin c m bi hm fopen(). Hm ny s ghi d liu cn li trong vng m vo tp tin v ng li tp tin. C php: int fclose(FILE *f) Trong f l con tr tp tin c m bi hm fopen(). Gi tr tr v ca hm l 0 bo rng vic ng tp tin thnh cng. Hm tr v EOF nu c xut hin li. Ngoi ra, ta cn c th s dng hm fcloseall() ng tt c cc tp tin li. C php: int fcloseall() Kt qu tr v ca hm l tng s cc tp tin c ng li. Nu khng thnh cng, kt qu tr v l EOF.

II.4. Kim tra n cui tp tin hay cha?


C php: int feof(FILE *f) ngha: Kim tra xem chm ti cui tp tin hay cha v tr v EOF nu cui tp tin c chm ti, ngc li tr v 0.

II.5 Di chuyn con tr tp tin v u tp tin - Hm rewind()


Khi ta ang thao tc mt tp tin ang m, con tr tp tin lun di chuyn v pha cui tp tin. Mun cho con tr quay v u tp tin nh khi m n, ta s dng hm rewind().
C php: void rewind(FILE *f)

III. TRUY CP TP TIN VN BN


III.1. Ghi d liu ln tp tin vn bn
III.1.1 Hm putc() Hm ny c dng ghi mt k t ln mt tp tin vn bn ang c m lm vic. C php: int putc(int c, FILE *f) Trong , tham s c cha m Ascii ca mt k t no . M ny c ghi ln tp tin lin kt vi con tr f. Hm ny tr v EOF nu gp li. III.1.2 Hm fputs() Hm ny dng ghi mt chui k t cha trong vng m ln tp tin vn bn. C php: int puts(const char *buffer, FILE *f)
Trang 107

Lp trnh cn bn

Trong , buffer l con tr c kiu char ch n v tr u tin ca chui k t c ghi vo. Hm ny tr v gi tr 0 nu buffer cha chui rng v tr v EOF nu gp li. III.1.3 Hm fprintf() Hm ny dng ghi d liu c nh dng ln tp tin vn bn. C php: fprintf(FILE *f, const char *format, varexpr) Trong : format: chui nh dng (ging vi cc nh dng ca hm printf()), varexpr: danh sch cc biu thc, mi biu thc cch nhau du phy (,).

nh dng %d %[.s ch s thp phn] f

ngha

Ghi s nguyn Ghi s thc c <s ch s thp phn> theo quy tc lm trn s. %o Ghi s nguyn h bt phn %x Ghi s nguyn h thp lc phn %c Ghi mt k t %s Ghi chui k t %e hoc %E hoc %g Ghi s thc dng khoa hc (nhn 10 m x) hoc %G V d: Vit chng trnh ghi chui k t ln tp tin vn bn D:\\Baihat.txt
#include<stdio.h> #include<conio.h> int main() { FILE *f; clrscr(); f=fopen("D:\\Baihat.txt","r+"); if (f!=NULL) { fputs("Em oi Ha Noi pho.\n",f); fputs("Ta con em, mui hoang lan; ta con em, mui hoa sua.",f); fclose(f); } getch(); } return 0;

Ni dung tp tin Baihat.txt khi c m bng trnh son tho vn bn Notepad.

Trang 108

Lp trnh cn bn

III.2. c d liu t tp tin vn bn


III.2.1 Hm getc() Hm ny dng c d liu t tp tin vn bn ang c m lm vic. C php: int getc(FILE *f) Hm ny tr v m Ascii ca mt k t no (k c EOF) trong tp tin lin kt vi con tr f. III.2.2 Hm fgets() C php: char *fgets(char *buffer, int n, FILE *f) Hm ny c dng c mt chui k t t tp tin vn bn ang c m ra v lin kt vi con tr f cho n khi c n k t hoc gp k t xung dng \n (k t ny cng c a vo chui kt qu) hay gp k t kt thc EOF (k t ny khng c a vo chui kt qu). Trong : - buffer (vng m): con tr c kiu char ch n cng nh ln cha cc k t nhn c. - n: gi tr nguyn ch di ln nht ca chui k t nhn c. - f: con tr lin kt vi mt tp tin no . - K t NULL (\0) t ng c thm vo cui chui kt qu lu trong vng m. - Hm tr v a ch u tin ca vng m khi khng gp li v cha gp k t kt thc EOF. Ngc li, hm tr v gi tr NULL. III.2.3 Hm fscanf() Hm ny dng c d liu t tp tin vn bn vo danh sch cc bin theo nh dng. C php: fscanf(FILE *f, const char *format, varlist) Trong : format: chui nh dng (ging hm scanf()); varlist: danh sch cc bin mi bin cch nhau du phy (,). V d: Vit chng trnh chp tp tin D:\Baihat.txt trn sang tp tin D:\Baica.txt.
#include<stdio.h> #include<conio.h> int main() { FILE *f1,*f2; clrscr(); f1=fopen("D:\\Baihat.txt","rt"); f2=fopen("D:\\Baica.txt","wt"); if (f1!=NULL && f2!=NULL) { int ch=fgetc(f1); while (! feof(f1)) { fputc(ch,f2); ch=fgetc(f1); }

Trang 109

Lp trnh cn bn
fcloseall(); } getch(); return 0; }

IV. TRUY CP TP TIN NH PHN


IV.1 Ghi d liu ln tp tin nh phn - Hm fwrite()
C php: size_t fwrite(const void *ptr, size_t size, size_t n, FILE *f) Trong : - ptr: con tr ch n vng nh cha thng tin cn ghi ln tp tin. - n: s phn t s ghi ln tp tin. - size: kch thc ca mi phn t. - f: con tr tp tin c m. - Gi tr tr v ca hm ny l s phn t c ghi ln tp tin. Gi tr ny bng n tr khi xut hin li.

IV.2 c d liu t tp tin nh phn - Hm fread()


C php: size_t fread(const void *ptr, size_t size, size_t n, FILE *f)

Trong : - ptr: con tr ch n vng nh s nhn d liu t tp tin. - n: s phn t c c t tp tin. - size: kch thc ca mi phn t. - f: con tr tp tin c m. - Gi tr tr v ca hm ny l s phn t c c t tp tin. Gi tr ny bng n hay nh hn n nu chm n cui tp tin hoc c li xut hin..

IV.3 Di chuyn con tr tp tin - Hm fseek()


Vic ghi hay c d liu t tp tin s lm cho con tr tp tin dch chuyn mt s byte, y chnh l kch thc ca kiu d liu ca mi phn t ca tp tin. Khi ng tp tin ri m li n, con tr lun v tr ngay u tp tin. Nhng nu ta s dng kiu m tp tin l a ghi ni d liu, con tr tp tin s di chuyn n v tr cui cng ca tp tin ny. Ta cng c th iu khin vic di chuyn con tr tp tin n v tr ch nh bng hm fseek(). C php: int fseek(FILE *f, long offset, int whence) Trong : - f: con tr tp tin ang thao tc. - offset: s byte cn dch chuyn con tr tp tin k t v tr trc . Phn t u tin l v tr 0. - whence: v tr bt u tnh offset, ta c th chn im xut pht l: 0 SEEK_SET V tr u tp tin
Trang 110

Lp trnh cn bn

V tr hin ti ca con tr tp tin 1 SEEK_CUR V tr cui tp tin 2 SEEK_END Kt qu tr v ca hm l 0 nu vic di chuyn thnh cng. Nu khng thnh cng, 1 gi tr khc 0 ( l 1 m li) c tr v.

IV.4 V d
V d 1: Vit chng trnh ghi ln tp tin CacSo.Dat 3 gi tr s (thc, nguyn, nguyn di). Sau c cc s t tp tin va ghi v hin th ln mn hnh.
#include<stdio.h> #include<conio.h> int main() { FILE *f; clrscr(); f=fopen("D:\\CacSo.txt","wb"); if (f!=NULL) { double d=3.14; int i=101; long l=54321; fwrite(&d,sizeof(double),1,f); fwrite(&i,sizeof(int),1,f); fwrite(&l,sizeof(long),1,f); /* Doc tu tap tin*/ rewind(f); fread(&d,sizeof(double),1,f); fread(&i,sizeof(int),1,f); fread(&l,sizeof(long),1,f); printf("Cac ket qua la: %f %d fclose(f); } getch(); return 0; }

%ld",d,i,l);

V d 2: Mi sinh vin cn qun l t nht 2 thng tin: m sinh vin v h tn. Vit chng trnh cho php la chn cc chc nng: nhp danh sch sinh vin t bn phm ri ghi ln tp tin SinhVien.dat, c d liu t tp tin SinhVien.dat ri hin th danh sch ln mn hnh, tm kim h tn ca mt sinh vin no da vo m sinh vin nhp t bn phm. Ta nhn thy rng mi phn t ca tp tin SinhVien.Dat l mt cu trc c 2 trng: m v h tn. Do , ta cn khai bo cu trc ny v s dng cc hm c/ghi tp tin nh phn vi kch thc mi phn t ca tp tin l chnh kch thc cu trc .
#include<stdio.h> #include<conio.h> #include<string.h> typedef struct { char Ma[10]; char HoTen[40];

Trang 111

Lp trnh cn bn
} SinhVien; void WriteFile(char *FileName) { FILE *f; int n,i; SinhVien sv; f=fopen(FileName,"ab"); printf("Nhap bao nhieu sinh vien? ");scanf("%d",&n); fflush(stdin); for(i=1;i<=n;i++) { printf("Sinh vien thu %i\n",i); printf(" - MSSV: ");gets(sv.Ma); printf(" - Ho ten: ");gets(sv.HoTen); fwrite(&sv,sizeof(sv),1,f); fflush(stdin); } fclose(f); printf("Bam phim bat ky de tiep tuc"); getch(); } void ReadFile(char *FileName) { FILE *f; SinhVien sv; f=fopen(FileName,"rb"); printf(" MSSV | Ho va ten\n"); fread(&sv,sizeof(sv),1,f); while (!feof(f)) { printf(" %s | %s\n",sv.Ma,sv.HoTen); fread(&sv,sizeof(sv),1,f); } fclose(f); printf("Bam phim bat ky de tiep tuc!!!"); getch(); } void Search(char *FileName) { char MSSV[10]; FILE *f; int Found=0; SinhVien sv; fflush(stdin); printf("Ma so sinh vien can tim: ");gets(MSSV); f=fopen(FileName,"rb"); while (!feof(f) && Found==0) { fread(&sv,sizeof(sv),1,f); if (strcmp(sv.Ma,MSSV)==0) Found=1; } fclose(f); if (Found == 1) printf("Tim thay SV co ma %s. Ho ten la: %s",sv.Ma,sv.HoTen);

Trang 112

Lp trnh cn bn
else printf("Tim khong thay sinh vien co ma %s",MSSV); printf("\nBam phim bat ky de tiep tuc!!!"); getch();

int main() { int c; for (;;) { clrscr(); printf("1. Nhap DSSV\n"); printf("2. In DSSV\n"); printf("3. Tim kiem\n"); printf("4. Thoat\n"); printf("Ban chon 1, 2, 3, 4: "); scanf("%d",&c); if(c==1) WriteFile("d:\\SinhVien.Dat"); else if (c==2) ReadFile("d:\\SinhVien.Dat"); else if (c==3) Search("d:\\SinhVien.Dat"); else break; } return 0; }

Ngoi ra th vin stdio.h cn nh ngha mt s hm khc cho php thao tc vi tp tin, sinh vin c th tham kho trong phn tr gip.

V. BI TP
V.1 Mc ch yu cu
Nm vng cch s dng kiu d liu tp tin. Phn bit n vi tt c cc kiu d liu c cu trc hc. Lm quen v bit cch thao tc trn tp tin. Vn dng cc kin thc hc vit cc chng trnh trong phn ni dung.

V.2 Ni dung
1. Vit chng trnh qun l mt tp tin vn bn theo cc yu cu: a- Nhp t bn phm ni dung mt vn bn sau ghi vo a. b- c t a ni dung vn bn va nhp v in ln mn hnh. c- c t a ni dung vn bn va nhp, in ni dung ln mn hnh v cho php ni thm thng tin vo cui tp tin . 2. Vit chng trnh cho php thng k s ln xut hin ca cc k t l ch (A..Z,a..z) trong mt tp tin vn bn. 3. Vit chng trnh m s t v s dng trong mt tp tin vn bn. 4. Vit chng trnh nhp t bn phm v ghi vo 1 tp tin tn l DMHH.DAT vi mi phn t ca tp tin l 1 cu trc bao gm cc trng: Ma (m hng: char[5]), Ten (Tn
Trang 113

Lp trnh cn bn

hng: char[20]).Kt thc vic nhp bng cch g ENTER vo Ma. Ta s dng tp tin ny gii m hng ha cho tp tin DSHH.DAT s cp trong bi 5. 5. Vit chng trnh cho php nhp t bn phm v ghi vo 1 tp tin tn DSHH.Dat vi mi phn t ca tp tin l mt cu trc bao gm cc trng : mh (m hng: char[5]), sl (s lng : int), dg ( n gi: float), st (S tin: float) theo yu cu: - Mi ln nhp mt cu trc - Trc tin nhp m hng (mh), a mh so snh vi Ma trong tp tin DMHH.DAT c to ra bi bi tp 1, nu mh=ma th in tn hng ngay bn cnh m hng. - Nhp s lng (sl). - Nhp n gi (dg). - Tnh s tin = s lng * n gi. Kt thc vic nhp bng cch nh ENTER vo m hng. Sau khi nhp xong yu cu in ton b danh sch hng ha c s gii m v tn hng theo mu sau:

| STT | MA HANG| TEN HANG | 1 | | 2 | a0101 b0101 |Duong cat trang |Sua co gai Ha Lan

| SO LG |DON GIA|SO TIEN| | | 25 10 | 10000.00 |250000.00 | | 40000.00 |400000.00 |

Trang 114

You might also like