Florian Moraru PROGRAMAREA CALCULATOARELOR în limbajul C
Florian Moraru PROGRAMAREA CALCULATOARELOR în limbajul C
Florian Moraru PROGRAMAREA CALCULATOARELOR în limbajul C
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
Functia "fgets" adaugã sirului citit un octet zero (<strong>în</strong> memorie) dar nu eliminã<br />
terminatorul de linie ‘\n’, spre deosebire de functia pereche “gets”. Functia "fputs" nu<br />
scrie <strong>în</strong> fisier octetul zero (necesar numai <strong>în</strong> memorie).<br />
Modul de raportare al ajungerii la sfârsit de fisier este diferit:<br />
- functia “fgetc” are rezultat negativ (constanta EOF= -1)<br />
- functia “fgets” are rezultat NULL (0).<br />
Exemplul urmãtor citeste un fisier text si scrie un alt fisier <strong>în</strong> care toate literele mari<br />
din textul citit sunt transformate <strong>în</strong> litere mari.<br />
// copiere fisier cu transformare in litere mari<br />
int main (int argc, char * argv[]) {<br />
FILE * f1, * f2; int ch;<br />
f1= fopen (argv[1],"r"); f2= fopen (argv[2],"w");<br />
if ( f1==0 || f2==0) {<br />
puts (" Eroare la deschidere fisiere \n");<br />
return;<br />
}<br />
while ( (ch=fgetc(f1)) != EOF) // citeste din f1<br />
fputc ( tolower(ch),f2); // scrie in f2<br />
fclose(f1); fclose(f2);<br />
}<br />
Detectarea sfârsitului de fisier se poate face si cu ajutorul functiei “feof” (Find End<br />
of File), dar cu atentie deoarece rezultatul lui “feof”se modificã dupã <strong>în</strong>cercarea de a<br />
citi dupã sfârsitul fisierului. In exemplul urmãtor, se va scrie <strong>în</strong> fisierul de iesire si –1,<br />
care este rezultatul ultimului apel al functiei “fgetc”:<br />
while ( ! feof(f1))<br />
fputc(fgetc(f1),f2);<br />
Solutia preferabilã pentru ciclul de citire-scriere caractere este urmãtoarea:<br />
while ( (ch=fgetc(f1)) != EOF)<br />
fputc ( ch, f2);<br />
In principiu se poate citi integral un fisier text <strong>în</strong> memorie, dar <strong>în</strong> practicã se citeste<br />
o singurã linie sau un numãr de linii succesive, <strong>în</strong>tr-un ciclu repetat pânã se terminã<br />
fisierul (pentru a se putea prelucra fisiere oricât de mari).<br />
Pentru actualizarea unui fisier text prin modificarea lungimii unor linii, stergerea<br />
sau insertia de linii se va scrie un alt fisier si nu se vor opera modificãrile direct pe<br />
fisierul existent. Exemplu:<br />
// inlocuieste in f1 sirul s1 prin sirul s2 si scrie rezultat in f2<br />
void subst (FILE * f1, FILE * f2, char * s1, char * s2) {<br />
char linie[80], *p;<br />
while ( fgets (linie,80,f1) != NULL) { // citeste o linie din f1