Dữ liệu kiểu tập tin

9 380 0
Dữ liệu kiểu tập tin

Đang tải... (xem toàn văn)

Thông tin tài liệu

Chỉång VIII : Dỉỵ liãûu kiãøu táûp tin (File) Trang 94 Ch−¬ng VIII. DỈỴ LIÃÛU KIÃØU TÁÛP TIN (FILE) I. Khại niãûm: Âãø lỉu trỉỵ vénh viãùn dỉỵ liãûu ta phi lỉu trỉỵ lãn thiãút bë nhåï ngoi ca mạy tênh nhỉ âéa, bàng tỉì, . Khi lỉu nhỉ váûy thç nhọm dỉỵ liãûu âọ gi l táûp tin (file). File l mäüt kiãøu dỉỵ liãûu cọ cáúu trục, bao gäưm táûp håüp cạc pháưn tỉí dỉỵ liãûu cọ cng kiãøu âỉåüc nhọm lải våïi nhau tảo thnh mäüt dy. Mäüt file gäưm cạc byte âỉåüc ghi trong cạc bäü nhåï ngoi (âéa tỉì, bàng tỉì .). File cọ tãn v âäü di ca nọ chênh bàòng säú byte ca dy. Mäüt táûp tin báút k cọ thãø âỉåüc áún âënh l táûp tin vàn bn, cng cọ thãø l táûp tin nhë phán. Viãûc áún âënh nhỉ váûy phủ thüc vo mủc âêch sỉí dủng táûp tin v phủ thüc vo cạch khai bạo kiãøu truy cáûp khi måí táûp tin. - Táûp tin dỉỵ liãûu nhë phán : Dỉỵ liãûu trãn file nhë phán giäúng nhỉ åí trong bäü nhåï - Táûp tin dỉỵ liãûu vàn bn : Khạc våïi file nhë phán khi xỉí lê m chuøn dng : + Khi ghi giạ trë LF thç chuøn thnh 2 giạ trë l CR v LF. + Khi âc 2 giạ trë CR v LF thç chuøn thnh LF. Trong âọ CR (m 13) : vãư âáưu dng; LF (m 10) : xúng dng. Cạc bỉåïc xỉí lê file : - Khai bạo biãún file FILE *con_tr_file; - Måí âãø ghi hồûc âc con_tr_file=fopen(tãn_file, kiãøu_xỉí_lê ); - Ghi hồûc âc file - Âọng file fclose(con_tr_file); Cọ 5 tãûp chøn : stdin, stdout, stdprn, stderr, stdlog II. Cạc hm xỉí lê táûp tin trong C : II.1. Cạc hm dng chung cho c 2 kiãøu nhë phán v vàn bn. • Hm fopen: Máùu : FILE *fopen(const char *tãn_file,const char *kiãøu_xỉí_lê); Trong âọ : tãn_file: l âỉåìng dáùn tåïi file trãn âéa. kiãøu_xỉí_lê : l xáu våïi cạc nghéa sau : Kiãøu Âäúi våïi táûp tin vàn bn Âäúi våïi táûp tin nhë phán nghéa “r” “rt” “rb” Måí file â täưn tải âãø âc, nãúu khäng tr vãư läùi “w” “wt” “wb” Måí file måïi âãø ghi, nãúu file â täưn tải nọ s bë xọa “a” “at” “ab” Måí file âãø ghi bäø sung, nãúu chỉa täưn tải thç tảo file måïi “r+” “r+t” “r+b” Måí file âãø âc/ghi, nãúu file khäng täưn tải s bạo läùi “w+” “w+t” “w+b” Måí file måïi âãø âc/ghi, nãúu â täưn tải nọ s bë xọa “a+” “a+t” “a+b” Måí file âãø âc/ghi bäø sung, nãúu chỉa täưn tải thç tảo file måïi Chỉång VIII : Dỉỵ liãûu kiãøu táûp tin (File) Trang 95 Cäng dủng: dng âãø måí táûp tin, nãúu thnh cäng s tr vãư con tr kiãøu FILE ỉïng våïi táûp tin vỉìa måí, nãúu cọ läùi tr vãư NULL. Chụ : Trong cạc kiãøu âc ghi, cáưn lm sảch vng âãûm trỉåïc khi chuøn tỉì âc sang ghi hồûc ghi sang âc nhåì hm fflush hồûc hm dëch chuøn vë trê con tr. • Hm fclose: Máùu : int fclose(FILE *tãn_tr_file); Trong âọ : tãn_tr_file l con tr tỉång ỉïng våïi táûp tin cáưn âọng. Cäng dủng : dng âãø âọng táûp tin, bao gäưm cạc cäng viãûc : - Âáøy dỉỵ liãûu cn trong vng âãûm lãn âéa (khi ghi) - Xọa vng âãûm (khi âc) - Gii phọng biãún tãn_tr_file, nãúu thnh cäng tr vãư giạ trë 0, nãúu khäng : EOF • Hm fcloseall: Máùu : int fcloseall(void); Cäng dủng : âọng táút c cạc táûp tin âang måí, nãúu thnh cäng tr vãư giạ trë bàòng säú táûp tin âọng âỉåüc, nãúu khäng tr vãư giạ trë EOF. • Hm fflush: Máùu : int fflush(FILE * tãn_tr_file); Trong âọ : tãn_tr_file l con tr tỉång ỉïng våïi táûp tin âang xỉí lê. Cäng dủng : lm sảch vng âãûm ca táûp tin, nãúu thnh cäng tr vãư giạ trë 0, nãúu khäng tr vãư EOF • Hm fflushall: Máùu : int fflushall(void); Cäng dủng : lm sảch táút c vng âãûm ca cạc táûp tin âang måí, nãúu thnh cäng tr vãư giạ trë bàòng säú táûp tin âỉåüc lm sảch, nãúu khäng tr vãư giạ trë EOF. • Hm ferror Máùu : int ferror(FILE * tãn_tr_file); Trong âọ : tãn_tr_file l con tr tỉång ỉïng våïi táûp tin âang xỉí lê. Cäng dủng : kiãøm tra läùi thao tạc trãn táûp tin, nãúu khäng cọ läùi tr vãư giạ trë 0, nãúu cọ läùi tr vãư giạ trë khạc 0. • Hm perror: Máùu : void perror(const char *s); Trong âọ s l con tr tr tåïi chùi kê tỉû Cäng dủng : in chùi s v thäng bạo läùi. • Hm feof: Máùu : int feof(FILE * tãn_tr_file); Trong âọ : tãn_tr_file l con tr tỉång ỉïng våïi táûp tin âang xỉí lê. Cäng dủng : kiãøm tra kãút thục táûp tin, tr vãư giạ trë khạc 0 nãúu gàûp cúi táûp tin khi âc, nãúu khäng tr vãư giạ trë 0. • Hm unlink: Máùu : int unlink(FILE * tãn_tr_file); Trong âọ : tãn_tr_file l con tr tỉång ỉïng våïi táûp tin cáưn xọa. Cäng dủng : xọa táûp tin trãn âéa, nãúu thnh cäng tr vãư giạ trë 0, nãúu khäng : EOF Chổồng VIII : Dổợ lióỷu kióứu tỏỷp tin (File) Trang 96 Haỡm remove: Mỏựu : remove(const char * tón_troớ_file); Trong õoù : tón_troớ_file laỡ con troớ tổồng ổùng vồùi tỏỷp tin cỏửn xoùa. Cọng duỷng : xoùa tỏỷp tin trón õộa, haỡm naỡy laỡ mọỹt macro goỹi tồùi haỡm unlink. Caùc haỡm naỡy duỡng cho caớ 2 kióứu nhở phỏn vaỡ vn baớn nhổng coù vaỡi õióứm khaùc nhau. Haỡm rename: Mỏựu : rename(const char *f1,const char *f2); Cọng duỷng : ọứi tón tóỷp f1 thaỡnh tóỷp f2 Haỡm putc vaỡ fputc: Mỏựu : int putc(int ch, FILE *con_troớ_file); int fputc(int ch, FILE *con_troớ_file); trong õoù ch laỡ mọỹt sọỳ nguyón, con_troớ_file laỡ con troớ tổồng ổùng vồùi tỏỷp tin õang xổớ lờ. Cọng duỷng : ghi lón tỏỷp tin kờ tổỷ coù maợ bũng m=ch%256 (ch õổồỹc xem nhổ khọng dỏỳu). Nóỳu thaỡnh cọng traớ vóử giaù trở maợ kờ tổỷ õổồỹc ghi, nóỳu khọng traớ vóử giaù trở EOF. Haỡm getc vaỡ fgetc: Mỏựu : int getc(FILE *con_troớ_file); int fgetc(FILE *con_troớ_file); trong õoù con_troớ_tỏỷp tin laỡ con troớ tổồng ổùng vồùi tỏỷp tin õang xổớ lờ. Cọng duỷng : õoỹc kờ tổỷ tổỡ tỏỷp tin, nóỳu hóỳt tỏỷp tin thỗ traớ vóử EOF. II.2. Caùc haỡm di chuyóứn con troớ chố vở trờ: Caùc file õang mồớ coù 1 con troớ chố vở trờ (File Position Locator) duỡng õóứ xaùc õởnh vở trờ õoỹc ghi trón file. Haỡm rewind: Mỏựu : rewind(FILE f); Cọng duỷng : Trồớ vóử õỏửu tóỷp õang mồớ. Haỡm ftell: Mỏựu : long ftell(FILE f); Cọng duỷng : Cho bióỳt vở trờ hióỷn taỷi cuớa con troớ tóỷp (vở trờ tờnh theo byte, bừt õỏửu tổỡ 0, cho -1L nóỳu coù lọựi) Haỡm fseek: Mỏựu : int fseek(f, long n, int xuatphat); Cọng duỷng : Dởch chuyóứn n byte kóứ tổỡ vở trờ xuỏỳt phaùt (cho khaùc 0 nóỳu coù lọựi) + fseek(f,0,SEEK_SET); trồớ vóử õỏửu tóỷp + fseek(f,0,SEEK_END); trồớ vóử cuọỳi tóỷp + fseek(f,k,SEEK_CUR); dởch chuyóứn k byte kóứ tổỡ vở trờ con troớ hióỷn thồỡi. II.3. Caùc haỡm nhỏỷp xuỏỳt kióứu vn baớn: Haỡm fprintf: int frintf(FILE *f, const char *õk,dsõs); Cọng duỷng : Ghi giaù trở danh saùch caùc õọỳi sọỳ (dsõs) lón tóỷp f theo khuọn daỷng õổồỹc chố õởnh trong chuọựi õióửu khióứn (õk). Chổồng VIII : Dổợ lióỷu kióứu tỏỷp tin (File) Trang 97 Haỡm fscanf: int fscanf(FILE *f, const char *õk, dsõs); Cọng duỷng : oỹc dổợ lióỷu tổỡ tóỷp f theo khuọn daỷng õổồỹc xaùc õởnh trong chuọựi õióửu khióứn õk vaỡ kóỳt quaớ õổồỹc lổu vaỡo trong danh saùch caùc õọỳi sọỳ (dsõs). Haỡm fputs: int fputs(const char *s, FILE *f); Trong õoù : s laỡ con troớ troớ õóỳn õởa chố õỏửu cuớa mọỹt chuọựi kyù tổỷ f laỡ con troớ tóỷp. Cọng duỷng : Ghi chuọựi s lón tóỷp f (dỏỳu \0 khọng ghi lón tóỷp). Khi thaỡnh cọng haỡm traớ vóử kyù tổỷ cuọỳi cuỡng õổồỹc ghi lón tóỷp. Khi coù lọựi haỡm cho EOF. Haỡm fgets: char *fgets(char *s, int n, FILE *f); Trong õoù : s laỡ con troớ troớ õóỳn vuỡng nhồù õuớ lồùn õóứ chổùa chuọựi kyù tổỷ õoỹc tổỡ tóỷp n laỡ õọỹ daỡi cổỷc õaỷi cuớa daợy cỏửn õoỹc f laỡ con troớ tóỷp. Cọng duỷng : oỹc daợy kyù tổỷ tổỡ tóỷp f vaỡ chổùa vaỡo vuỡng nhồù s. Khi thaỡnh cọng, haỡm traớ laỷi õởa chố vuỡng nhỏỷn kóỳt quaớ. Khi coù lọựi hoỷc gỷp cuọỳi tóỷp, haỡm cho giaù trở NULL. Vờ duỷ : #include <stdio.h> #include <ctype.h> void main() { FILE *f; char ch; f=fopen("a.txt","w"); do putc(toupper(ch=getchar()),f); while(ch!='\n'); fclose(f); } Vờ duỷ: #include <stdio.h> #include <ctype.h> void main() { FILE *f; char ch; if((f=fopen("a.txt","r"))==NULL) printf("\nKhong mo duoc file"); else do putchar(ch=getc(f)); while(ch!='\n'); fclose(f); } Chổồng VIII : Dổợ lióỷu kióứu tỏỷp tin (File) Trang 98 Vờ duỷ : Vióỳt chổồng trỗnh nhỏỷp theo kióứu vn baớn #include <stdio.h> #include <conio.h> void main() { FILE *f; int i,n; float a; f=fopen("a.txt","w"); printf("Nhap n :");scanf("%d",&n); fprintf(f,"%d\n",n); for(i=0;i<n;i++) { scanf("%f",&a); fprintf(f,"%f\n",a); } fclose(f); getch(); } Vờ du: Vióỳt chổồng trỗnh xuỏỳt theo kióứu vn baớn #include <stdio.h> #include <conio.h> void main() { FILE *f; int i,n; float a; f=fopen("a.txt","r"); fscanf(f,"%d",&n); for(i=0;i<n;i++) { fscanf(f,"%f",&a); printf("\n%f",a); } fclose(f); getch(); } Vờ duỷ 3: Mồớ mọỹt tóỷp vn baớn vaỡ in ra tỏửn suỏỳt xuỏỳt hióỷn cuớa baớng chổợ caùi #include <stdio.h> #include <conio.h> #include <alloc.h> #include <string.h> #define N 256 void main() Chổồng VIII : Dổợ lióỷu kióứu tỏỷp tin (File) Trang 99 { int i; FILE *f; static unsigned tso[26]; char *s; clrscr(); f=fopen("a.txt","rt"); s=(char *)malloc(N); while (!feof(f)) { fgets(s,N,f); strupr(s); for(i=0;i<strlen(s);i++) if ((s[i]>'A') && (s[i]<='Z')) tso[s[i]-'A']++; } free(s); printf("\n Cac chu cai trong tap tin :"); for(i=0;i<26;i++) if (tso[i]) printf("\n %d chu %c",tso[i],i+'A'); getch(); } II.4. Caùc haỡm nhỏỷp xuỏỳt kióứu nhở phỏn: Haỡm putw: int putw(int n, FILE *f); Cọng duỷng : Ghi giaù trở n lón tóỷp f dổồùi daỷng 2 byte. Nóỳu thaỡnh cọng haỡm traớ vóử sọỳ nguyón cỏửn ghi. Khi coù lọựi haỡm traớ vóử EOF. Haỡm getw: int getw(FILE *f); Cọng duỷng : oỹc mọỹt sọỳ nguyón 2 byte tổỡ tóỷp f. Nóỳu thaỡnh cọng haỡm traớ vóử sọỳ nguyón õổồỹc õoỹc. Khi coù lọựi hoỷc gỷp cuọỳi tóỷp haỡm traớ vóử EOF. Haỡm fwrite: int fwrite(void *ptr, int size, int n, FILE *f); Cọng duỷng : Ghi n mỏựu tin, mọựi mỏựu tin coùù kờch thổồùc size byte tổỡ vuỡng nhồù ptr lón tóỷp f. Haỡm fread: int fread(void *ptr, int size,int n, FILE *f); Cọng duỷng : oỹc n mỏựu tin, mọựi mỏựu tin coù kờch thổồùc size byte tổỡ tóỷp f vaỡ chổùa vaỡo vuỡng nhồù ptr Chổồng VIII : Dổợ lióỷu kióứu tỏỷp tin (File) Trang 100 Vờ duỷ: Copy tóỷp tổỡ tóỷp nguọửn sang tóỷp õờch #include <stdio.h> #include <conio.h> #include <stdlib.h> #define N 1 void main() { int i; char t1[20],t2[20],a[N]; FILE *f1,*f2; printf("Nhap ten tep nguon:"); scanf("%s",t1); printf("Nhap ten tep dich:"); scanf("%s",t2); f1=fopen(t1,"rb"); if (f1==NULL) { printf("Tep %s khong ton tai",t1); getch(); exit(1); } f2=fopen(t2,"wb"); while ((fread(a,1,N,f1)) >0) fwrite(a,1,N,f2); fclose(f1);fclose(f2); getch(); } Vờ duỷ2: Vióỳt chổồng trỗnh ghi cỏỳu truùc lón õộa #include <stdio.h> #include <conio.h> #include <ctype.h> #include <stdlib.h> void main() { char so[20]; FILE *f; struct person { char ten[25]; int maso; int diem; } sv; clrscr(); if ((f=fopen("a.txt","wb"))==NULL) { printf("Khong mo duoc tep"); getch(); exit(1); Chổồng VIII : Dổợ lióỷu kióứu tỏỷp tin (File) Trang 101 } do { fflush(stdin); printf("Nhap ho ten :");gets(sv.ten); printf("Ma so :");scanf("%d",&sv.maso); printf("Diem :");scanf("%d",&sv.diem); fwrite(&sv,sizeof(sv),1,f); printf("Tiep tuc khong (C/K)?"); } while(toupper(getch())=='C'); fclose(f); } Vờ duỷ3: Vióỳt chổồng trỗnh õoỹc cỏỳu truùc tổỡ õộa #include <stdio.h> #include <conio.h> #include <stdlib.h> void main() { char so[20]; FILE *f; struct person { char ten[25]; int maso; int diem; } sv; clrscr(); if ((f=fopen("a.txt","rb"))==NULL) { printf("Khong mo duoc tep"); getch(); exit(1); } while(fread(&sv,sizeof(sv),1,f)==1) { printf("\n Ten %s",sv.ten); printf(" Ma so %d",sv.maso); printf(" Diem %d",sv.diem); } fclose(f); getch(); } Chỉång VIII : Dỉỵ liãûu kiãøu táûp tin (File) Trang 102 Vê dủ : Âc säú liãûu vo 2 ma tráûn(n*n) tỉì hai tãûp “a.txt” v “b.txt”. Tênh C=A*B v ghi vo tãûp “c.txt” #include <stdio.h> FILE *f; int n, a[10][10], b[10][10], c[10][10]; void main() { int i, j, k; printf("Nhap n"); scanf("%d",&n); f=fopen("a.txt","rb"); for(i=0; i<n;i++) for(j=0;j<n;j++) fscanf(f,"%d",&a[i][j]); fclose(f); f=fopen("b.txt","rb"); for(i=0; i<n;i++) for(j=0;j<n;j++) fscanf(f,"%d",&b[i][j]); fclose(f); for(i=0; i<n;i++) for(j=0;j<n;j++) { c[i][j]=0; for(k=0;k<n;k++) c[i][j]+=a[i][k]*b[k][j]; } f=fopen("c.txt", "wb"); for(i=0; i<n;i++) for(j=0;j<n;j++) fprintf(f," %d",c[i][j]); fclose(f); } III. Bi táûp: 1. Kiãøm tra hai tãûp cọ näüi dung nhỉ nhau khäng 2. Näúi hai tãûp thnh mäüt tãûp tin måïi 3. Loải b cạc cáu chụ thêch trong chỉång trçnh C. 4. Kiãøm tra läùi cụ phạp nhỉ cạc dáúu ngồûc (), [], {}, ‘ ’, “ ”, cạc chụ thêch. . táûp tin báút k cọ thãø âỉåüc áún âënh l táûp tin vàn bn, cng cọ thãø l táûp tin nhë phán. Viãûc áún âënh nhỉ váûy phủ thüc vo mủc âêch sỉí dủng táûp tin. trong õoù con_troớ_tỏỷp tin laỡ con troớ tổồng ổùng vồùi tỏỷp tin õang xổớ lờ. Cọng duỷng : õoỹc kờ tổỷ tổỡ tỏỷp tin, nóỳu hóỳt tỏỷp tin thỗ traớ vóử EOF.

Ngày đăng: 02/10/2013, 20:20

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan