Sunteți pe pagina 1din 5

Informatica clasa a X-a

Exploatarea fiierelor TEXT


1. Noiunea de fiier
Prin fiier se nelege o structur de date pstrat n memoria extern a calculatorului , cu componente numite nregistrri, ce pot avea o dimensiune fix sau variabil, cel de-al doilea caz impunnd existena unor marcaje speciale numite separatori de nregistrri. Fi ierele pot fi clasificate dup mai multe criterii. !in punct de vedere al accesului la componente se mpart n" - fiere cu acces secvenial ale cror nregistrri pot fi prelucrate numai n ordinea n care sunt stocate n fi ier - fiiere cu acces direct ale cror componente pot fi prelucrate n orice ordine. #n cazul n care prelucrarea nu se face secvenial, nainte de fiecare operaie de citire$scriere trebuie furnizat informaia necesar selectrii componentei ce urmeaz a fi prelucrat !in punct de vedere al coninutului, fi ierele se mpart n dou categorii" - fiiere text care conin numai caractere structurate pe linii de lungime variabil - fiiere inare n care informaia este vzut ca o colecie de octei Fi ierul text are urmtoarele caracteristici" %ste o colecie de linii de text. &iniile de text au lungimi diferite. Fiecare linie de text reprezint o nregistrare. ' adar, fi ierul text este un fi ier cu nregistrri de lungime variabil. #n cadrul unei nregistrri (linie de text), entitatea prelucrat este octetul. *oninutul unui octet este interpretat ca fiind codul '+*,, al unui caracter. &iniile de text sunt separate de marcajul newline (-\n.) care se genereaz la apsarea tastei Enter. Fi ierul text se termin prin marcajul eof (end of file) care se genereaz prin apsarea tastelor Ctrl+Z i care are codul '+*,, /0. 1arcajele newline i eof sunt inserate automat n fi ier la crearea lui prin operaia de scriere. Entitatea prelucrat ntr-o operaie de citire sau de scriere este octetul. +electarea octetului asupra cruia acioneaz operaia de citire sau de scriere se face prin mecanismul pointerului ctre octet (pointer de fi ier=indicatorul de poziie curent), care este o variabil de memorie n care se pstreaz adresa octetului curent. Putem s ne nc2ipuim acest pointer ca pe un cursor care se deplaseaz cu o poziie dup fiecare operaie de citire sau scriere. Fi ierele text pot fi citite i modificate cu orice editor de text.

!. "relucrarea fiierelor
&ucrul cu fisiere se face prin intermediul clasei ifstream pentru citire respectiv ofstream pentru scriere. Pentru a le utiliza, aplicatiile trebuie sa includa biblioteca de funcii 3fstream.#$. Prelucrarea unui fi ier se face prin mai multe operaii" declarare% desc#idere (pentru citire sau scriere), citire% scriere% nc#idere. &a nivel de program fi ierul este recunoscut printr-o variabil asociat, numit identificator de fiier &id'f(.

/.4. )eclararea fiierelor


+e face utiliznd sintaxa" ifstream id5f 6 ofstream id5f 6 sau se include n operaiile de desc2idere a fi ierelor.

!.!. )esc#iderea fiierelor pentru citire*scriere


)esc#iderea fi ierului pentru citire se face cu" fstream id5f(. 7cale889nume5fisier., ios""in)6 $$ ios""input :permite desc2iderea unui fi ier pentru citire sau ifstream id5f(.nume5fisier.)6 )esc#iderea fi ierului pentru scriere se face cu" fstream id5f(. 7cale889nume5fisier., mod)6 sau ofstream id5f(.nume5fisier.)6 $$se poate specifica, opional, modul de desc2idere. 1odul de desc2idere este un parametru format din urmtoarele combinaii" ios""out (output ) !esc2idere fi ier pentru operaii de scriere ios""ate (at end) +eteaz poziia iniial la sfr itul fi ierului. !ac fi ierul nu exist : se creaz.

Informatica clasa a X-a ios""app

(append) !esc2idere pentru adugare la sfr it de fi ier6 fi ierul trebuie s existe. (truncate) !ac fi ierul desc2is pentru operaii de scriere exist deja, coninutul lui anterior este ios""trunc ters i nlocuit cu cel nou. ios""nocreate Fi ierul desc2is trebuie s existe (el nu poate fi creat). ios""noreplace Fi ierul este desc2is, iar coninutul lui nu poate fi nlocuit. +itirea din fi iere text se face astfel" id'f$$v1,$$v!$$...$$vn-. unde v4, v/,....vn sunt identificatori de variabile elementare de orice tip. Pentru citirea unui caracter din fi ier se folose te" id'f.get&c(. unde c este o variabil de tip caracter n care se va memora caracterul citit din fi ier. Pentru citirea unui ir de caractere de pe o linie din fi ier se folose te" id'f.getline&s% nr(. unde s este o variabil de tip tablou n care se vor memora caracterele citite din fi ier, iar nr este lungimea irului de caractere. /crierea n fi iere text se face astfel" id'f00v1,00v!00...00vn-. unde v4, v/,....vn sunt identificatori de variabile elementare de orice tip sau de constante. Pentru scrierea unui caracter ntr-un fi ier se poate folosi i sintaxa" id'f.put&c(. unde c este o variabil de tip caracter al crei coninut se va scrie n fi ier.

!.1.

2erificarea operaiei de desc#idere

+e face cu secvena" if(!id_f.is_open()) { cout<<fisierul nu poate fi deschis pentru scriere; exit(1); } #n caz de succes, funcia id_f.is_open() returneaz un pointer la noul flux de comunicare desc2is (o valoare nenul)6 altfel returneaz valoarea nul.

!.3.

4nc#iderea unui fiier

#nc2iderea fi ierelor este esenial i se face cu sintaxa" id_f.close();

!.5.

6uncia de verificare a sf7ritului unui fiier

Pentru a verifica dac poziia curent de citire$scriere a ajuns la sfr itul unui fi ier se folose te funcia id_f.eof(),care ntoarce valoarea ; dac poziia curent nu este la sfr itul fi ierului i o valoare diferit de ; dac poziia actual indic sfr itul de fi ier.

1. Exemple de prelucrare a fiierelor


Exemplul 1: *opierea unui fi ier n alt fi ier caracter cu caracter. #include<fstrea .h! #include<stdli".h! #oid ain() { char c ; ifstrea f(in.txt); ofstrea $(out.txt); //se declara doua variabile fisier // se incearca deschiderea fisierului sursa if( !f.is_open()) //ntoarce pointer nul { cout<<% fisierul nu poate fi deschis pentru citire %; exit(1); } // se incearca deschiderea fisierului destinatie

Informatica clasa a X-a if(!$.is_open()) //ntoarce pointer nul { cout<<% fisierul nu poate fi deschis pentru scriere %; exit(1); } // se copie cte un caracter din sursa si se scrie // in destinatie f.$et(c); &hile(!f.eof()) { $.put(c); f.$et(c);} f.close(); $.close(); // se nchid fiierele deschise } Exemplul 2: +e numr cte caractere de fiecare tip (litere, cifre i neafi abile) sunt ntr-un fi ier text. #include<fstrea .h! #include<stdli".h! #include<ct'pe.h! #oid ain() { int l,c,$; char ch; l(c($(); ifstrea f(in.txt); //se declara o variabil fisier // se incearca deschiderea fisierului if(!f.is_open()) //ntoarce pointer nul { cout<<% fisierul nu poate fi deschis pentru citire %; exit(1); } do{ f.$et(ch); //citete un caracter din fiier if(isalpha(ch)) l**; // caracterul este o litera if(isdi$it(ch)) c**; // caracterul este o cifra if(!isprint(ch)) $**; // caracterul nu este afisabil }&hile(!f.eof()); //pn se ntlnete EOF cout<<+n nu arul de litere este <<l; cout<<+n nu arul de cifre este <<c; cout<<+n nu arul de caractere neafisa"il este <<$; f.close(); *opierea unui fi ier text n altul, linie cu linie.

} Exemplul 3:

#include<fstrea .h! #include<stdli".h! #oid ain() { char linie,-).; ifstrea f(%in.txt%); ofstrea $(%out.txt"); //se declara o variabil fisier // se verific deschiderea fisierului surs if(!f.is_open()) //ntoarce pointer nul { cout<<% fisierul nu poate fi deschis pentru citire %; exit(1); } // se verific deschiderea fisierului destinatie if(!$.is_open()) //ntoarce pointer nul { cout<<% fisierul nu poate fi deschis pentru scriere %;

Informatica clasa a X-a exit(1); } &hile(!f.eof()) { f.$etline(linie,-)); //citete o linie din f $<<linie<<endl; //scrie linia n } f.close(); $.close(); }

Exemplul : *itirea unui ir de n numere ntregi din fi ier (n cunoscut) i afi area lui pe ecran. Pe prima linie din fi ier este memorat valoarea lui n, iar pe urmtoarea linie sunt memorate cele n valori separate prin spaiu. #include<fstrea .h! #include<stdli".h! #oid ain() { int n, x,i; ifstrea f(%in.txt%); f!!n; //citesc n din pri!a linie a fisierului for(i(1;i<(n;i**) { f!!x; // citesc pe rnd fiecare nu!r din fiier cout<<x<<% %; // afie" pe ecran nu!erele din fiier separate prin spa#ii } f.close(); } Exemplul !: *itirea unui vector de n numere ntregi din fi ier (n8199) i afi area lui pe ecran. Pe prima linie din fi ier este memorat valoarea lui n, iar pe urmtoarea linie sunt memorate cele n valori separate prin spaiu. #include<fstrea .h! #include<stdli".h! #oid ain() { int n, x,/).,i; ifstrea f(%in.txt%); f!!n; //citesc n din pri!a linie a fisierului for(i(1;i<(n;i**) { f!!x,i.; // citesc pe rnd fiecare ele!ent al vectorului din fiier cout<<x,i.<<% %; // afie" pe ecran ele!entele vectorului separate prin spa#ii } f.close(); } Exemplul ": *itirea unei matrici a cu m linii i n coloane din fi ier ( m%n8!9). Pe prima linie din fi ier se gsesc valorile m i n separate prin spaiu. Pe urmtoarele m linii se gsesc cte n valori separate prin spaiu reprezentnd elementele matricii. #include<fstrea .h! #include<stdli".h! #oid ain() { int ,n,x,1).,1).,i,0; ifstrea f(%in.txt%); f!! !!n; //citesc ! i n din pri!a linie a fiierului for(i(1;i<( ;i**) { for(0(1;0<(n;0**) { f!!x,i.,0.; //citesc din fiier ele!entele fiecrei linii din

Informatica clasa a X-a !atrice cout<<x,i.,0.<<% %; //afie" ele!entele fiecrei linii din !atrice separate prin spa#ii } cout<<endl; //trec la linia ur!toare } f.close(); }

Exemplul #: +crierea elementelor unei matrici ptratice nxn de numere ntregi ntr-un fi ier text, fiecare linie din matrice se va scrie pe o linie din fi ier, valorile fiind separate prin spaiu. #include<fstrea .h! #include<stdli".h! #oid ain() { int ,n,x,1).,1).,i,0; ifstrea f(%in.txt%); ofstrea $(%out.txt%); f!! !!n; for(i(1;i<( ;i**) { for(0(1;0<(n;0**) { f!!x,i.,0.; $<<x,i.,0.<<% %; // scriu n fiier ele!entele fiecrei linii din !atrice separate prin spa#ii } $<<endl; } f.close(); } Exemplul $: +e calculeaz produsul primelor n numere naturale. <umrul natural nenul n se cite te din fi ierul date.in, iar produsul se va afi a n fi ierul date.out. #include<fstrea .h! #include<stdli".h! #oid ain() { unsi$ned n,i,p(1; ifstrea f(%in.txt%); ofstrea $(%out.txt%); f!!n; for(i(1;i<(n;i**) p1(i; $<<%produsul pri elor %<<n<<% nu ere naturale este %<<p; f.close(); }

S-ar putea să vă placă și