17.04.2013 Views

Florian Moraru PROGRAMAREA CALCULATOARELOR în limbajul C

Florian Moraru PROGRAMAREA CALCULATOARELOR în limbajul C

Florian Moraru PROGRAMAREA CALCULATOARELOR în limbajul C

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!