Documente Academic
Documente Profesional
Documente Cultură
Fiiere
Toate programele scrise pn acum au fost interactive, primindu-i datele de intrare de la
tastatur, iar afiarea rezultatelor s-a fcut ntotdeauna pe ecran. De multe ori ns, cnd volumul
datelor de intrare este mare sau formatul lor complicat, este de dorit ca acestea s fie editate
nainte de rularea programului i salvate ntr-un fiier de unde s fie preluate de program n timpul
execuiei. n acest fel, nu mai este nevoie ca datele s fie reintroduse de fiecare dat cnd se
execut programul. De asemenea, rezultatele calculate de un program pot s fie scrise ntr-un
fiier. n acest fel, rezultatele unui program pot fi imediat utilizate ca date de intrare pentru alt
program.
n general, prin fiier se nelege o colecie ordonat de nregistrri care sunt pstrate pe
diferite suporturi externe (n general discuri). Un fiier are o nregistrare care marcheaz sfritul
de fiier. Sfritul de fiier poate fi referit prin constanta simbolic EOF (End Of File).
Prelucrarea fiierelor prin program implic de obicei o secven de operaii specifice. Orice
fiier trebuie deschis nainte de a putea fi prelucrat. Prelucrrile care se fac cel mai frecvent asupra
fiierelor sunt consultarea ( citirea nregistrrilor din fiier) i crearea sau actualizarea fiierului
prin scrierea de noi nregistrri n fiier. La sfritul prelucrrilor, fiierul trebuie nchis. Toate
aceste operaii se realizeaz prin funcii din biblioteca standard a limbajului C.
Prelucrarea fiierelor n limbajul C se poate face la dou nivele: nivelul inferior de
prelucrare a fiierelor, care utilizeaz direct funcii ale sistemului de operare, i nivelul superior de
prelucrare care conine funcii specializate specifice limbajului C. n acest capitol vor fi tratate
doar funciile de prelucrare a fiierelor din aceast ultim categorie. Aceste funcii ofer mai multe
faciliti dect funciile de nivel inferior i sunt mai uor de utilizat.
n funcie de modul de interpretare a datelor, fiierele pot fi prelucrate ca fiiere text sau ca i
fiiere binare.
115
116
char * mod);
117
De exemplu, dac se dorete deschiderea fiierului date.txt pentru citire, se poate utiliza o
secven ca i cea de mai jos:
FILE *fs;
...
if ((fs=fopen("date.txt", "r"))==NULL) {
printf("nu se poate deschide fisierul !\n");
exit(1);
}
Exist variabilele predefinite stdin, stdout, stderr care sunt pointeri spre tipul FILE
i permit ca funciile de nivel superior de prelucrare a fiierelor s poat trata intrarea standard,
ieirea standard i ieirea standard pentru erori la fel ca i restul fiierelor. Singura deosebire e c
programatorul nu trebuie s deschid sau s nchid aceste fiiere, ele fiind deschise automat la
lansarea n execuie a programului i nchise la apelul funciei exit la terminarea programului.
119
Copierea se face citind cte un caracter din fiierul fs, atta timp ct acesta este diferit de
marcajul de sfrit de fiier, EOF. Caracterul este imediat scris n fiierul fd. La sfrit se nchid
ambele fiiere.
!separator(c);
120
121
122
EOF.
123
int nota;
int n1=0, n2=0, n3=0, n4=0;
printf("Introd numele fisierului");
gets(numefis);
pf=fopen(numefis, "r");
if (pf==NULL) {
printf("Nu pot deschide fisierul %s \n", numefis);
exit(1);
}
while (!feof(pf)) {
fscanf(pf, "%s %s %d", nume, pren, ¬a);
if ((nota==10)||(nota==9)) n1++;
else if ((nota >=6)&&(nota <=8)) n2++;
else if (nota ==5) n3++;
else n4++;
}
fclose(pf);
printf("%d %d %d %d", n1, n2, n3, n4);
}
124
caractere. Rezult c fiierele de tip text nu sunt adecvate pentru a stoca pe disc baze de date
eficiente.
n fiierele organizate ca date binare, octeii nu sunt considerai ca fiind coduri de
caractere. Se consider c o nregistrare este o colecie de date structurate numite articole. La o
citire se transfer ntr-o zon tampon un numr de articole care au lungime fix. Analog, la scriere
se transfer din zona tampon un numr de articole de lungime fix.
125
126
Se aloc o zon de memorie buf capabil s conin MAX octei. Operaia de citire din
fiierul surs este realizat de instruciunea
dim=fread(buf, 1, MAX, fs);
Aceasta transfer din fiierul fs cel mult MAX articole de 1 octet nspre zona buf. n general,
operaia de citire va transfera exact MAX octei, mai puin n ultima iteraie a ciclului cnd este
posibil ca numrul octeilor care au mai rmas de transferat s fie mai mic. Numrul exact de
octei ciii este returnat de funcia fread n variabila dim. Funcia fwrite va scrie primii dim
octei din zona buf n fiierul destinaie.
127
128
este textul coninut ntre acolade. Programul va genera un fiier text n care rubricile sunt
completate cu informaiile introduse.
De exemplu, ablonul unei cereri de concediu poate fi un fiier cu urmtorul coninut:
Domnule Director,
Subsemnatul {Nume} {Prenume} va rog sa-mi aprobati
plecarea in concediu de odihna in perioada
{data start}- {data sfarsit}.
Cu respect,
Nume:
Prenume:
data start:
data sfarsit:
Domnule Director,
Subsemnatul Popescu Ion va rog sa-mi aprobati
plecarea in concediu de odihna in perioada
11.07.2004 - 01.08.2004.
Cu respect,
11. S se scrie un program care adaug ntr-un fiier text personal.txt datele despre
angajaii unei firme. Datele se citesc de la tastatur i conin urmtoarele: numele,
prenumele, adresa, data nasterii, data angajrii, funcia, salariul.
12. S se scrie un program care afieaz datele pstrate n fiierul personal.txt creat n
exerciiul anterior.
129
13. Se citesc dintr-un fiier text numele i notele obinute de studeni la examen. Fiierul
conine linii de forma
nume
nota
pret
130