Obiective: nsu#irea lucrului cu fi#iere text &n limbajul C. nsu#irea lucrului cu func(ii &n limbajul C. Fi#iere text. Lucrul cu fi#iere text &n limbajul C presupune parcurgerea urm)toarelor etape: 1. Deschiderea fi#ierului 2. Prelucr)ri asupra fi#ierului (citiri, scrieri) 3. nchiderea fi#ierului 1. Deschiderea unui fi#ier se realizeaz) cu func(ia fopen. n continuare este prezentat prototipul func(iei fopen: FILE *fopen(char *nume_fis,char *mod), unde nume_fis este un #ir de caractere care con(ine numele fi#ierului iar mod este un #ir de caractere care va preciza opera(iile ce vor fi efectuate asupra fi#ierului precum #i tipul de fi#ier. Dac) opera(ia de deschidere a fi#ierului a decurs corect, pointerul &ntors de fopen este diferit de NULL. Dac), din diverse motive, deschiderea nu s-a putut efectua corect, fopen va &ntoarce NULL, fapt ce trebuie testat &nainte de a trece la alte prelucr)ri. Ex: FILE *fis_in; fis_in=fopen(in.txt!,!rt!); if(fis_in==NULL) { printf(Eroare la deschiderea fisierului "in.txt#); getch(); } 2 Prelucr)ri asupra fi#ierului. Opera(ii de citire, scriere. a) Citirea din fi#ier a1) Citirea unui caracter. Aceasta se realizeaz) utiliz,nd func(ia fgetc. Prototipul: int fgetc(FILE *f) Ex: char c; FILE *fis_in; //$$$ c=fgetc(fis_in); //$$$ Ex: Afi#area con(inutului unui fi#ier text #include<stdio.h> #include<conio.h> void main(void) { FILE *fin; char c; clrscr(); fin=fopen("in.txt","rt"); //deschiderea fisierului, pentru citire if(fin==NULL) //se testeaza daca deschiderea fisierului s-a efectuat cu succes { printf("Eroare la deschiderea fisierului in.txt"); getch(); return; } while((c=fgetc(fin))!=EOF) //citirea din fisier putc(c,stdout); //afisarea caracterului citit din fisier fclose(fin); //inchiderea fisierului getch(); } a2) Citirea unui #ir de caractere. Aceasta se realizeaz) utiliz,nd func(ia fgets. Prototipul: char* fgets(char *s, int n, FILE *f) Ex: char sir[50]; FILE *fis_in; //$$$. fgets(sir,50,fis_in); //citirea in tabloul s a maxim 50 caractere //$$$. a3) Func(ia fscanf. Aceast) func(ie este similar) func(iei scanf, cu precizarea c) datele nu sunt citite de la tastatur), ci dintr-un fi#ier. Func(ia fscanf returneaz) num)rul de valori citite din fi#ier. Prototipul: int fscanf(FILE *f, char *format, $) Dac) primul argument al func(iei este stdin atunci datele vor fi citite din fi#ierul standard de intrare (tastatura). Ex: int n,m; FILE *fis_in; //$$$ fscanf(fis_in,!%d%d!,&n,&m); //$$$. b) Scrierea &n fi#ier b1) Scrierea unui caracter &ntr-un fi#ier. Aceasta se realizeaz) utiliz,nd func(ia fputc. Prototipul: int fputc(int c, FILE *f); Ex: char c; c=%a%; FILE *fis_out; //$$$. fputc(c,fis_out); //$$$. Ex: Copierea con(inutului unui fi#ier de intrare &ntr-un fi#ier de ie#ire. #include<stdio.h> #include<conio.h> void main(void) { FILE *fin,*fout; char c; clrscr(); fin=fopen("in.txt","rt"); //deschiderea fisierului de intrare, pentru citire if(fin==NULL) //se testeaza daca deschiderea fisierului s-a efectuat cu succes { printf("Eroare la deschiderea fisierului in.txt"); getch(); return; } fout=fopen("out.txt","wt"); //deschiderea fisierului de iesire, pentru scriere if(fout==NULL) //se testeaza daca deschiderea fisierului s-a efectuat cu succes { printf("Eroare la deschiderea fisierului out.txt"); getch(); return; } while((c=fgetc(fin))!=EOF) fputc(c,fout); //scrierea in fisierul de iesire, a caracterului citit din fisierul de intrare fclose(fin); //inchiderea fisierului de intrare fclose(fout); //inchiderea fisierului de iesire printf("Copierea fisierului in.txt in fisierul out.txt s-a realizat cu succes"); printf("\nApasati o tasta pentru a reveni in program !"); getch(); } b2) Scrierea unui #ir de caractere &ntr-un fi#ier. Aceasta se realizeaz) utiliz,nd func(ia fputs. Prototipul: fputs (const char *s, FILE *f) Ex: char sir[100]; FILE *fis_out; //$$$. strcpy(sir,!Acest sir va fi scris in fisier!); fputs(sir,fis_out); //$$$.. b3) Functia fprintf. Prototipul: int fprintf(FILE *f, char *format, $) Dac) primul argument al func(iei fprintf este stdout atunci datele vor fi scrise la ie#irea standard(monitor) Ex: int n,m; n=2; m=4; FILE *fis_out; //$$$. fprintf(fis_out,!%d %d!,n,m); //$$$. 3. nchiderea fi#ierului se realizeaz) cu func(ia fclose. Prototipul: int fclose(FILE *f) Ex: FILE *fis_in; //$$$. fclose(fis_in); //$$$. Tema de realizat n timpul laboratorului 1. Testa%i toate exemplele prezentate. 2. Scrie%i un program C care va afi#a meniul urm&tor #i va efectua prelucr&rile corespunz&toare. C. Citeste de la tastatur& numele unui fisier text F. Citeste din fisier un sir de elemente intregi A. Afiseaza sirul citit M. Inmulteste fiecare element din sir cu o constanta I. Informa%ii autor X. Ie#ire