Fisiere


 * __Fisier text __**= succesiune de caractere ASCII ce se incheie cu caracterul **EOF**.


 * __Accesul __** la caracterele scrise intr-un fisier text se poate face doar **secventia**l, si poate fi :
 * Acces pentru citire
 * Acces pentru scriere

Toate utilitarele necesare pentru accesarea fisierelor text din programe C++ se afla in biblioteca **fstream**

Pentru a putea accesa un fişier text dintr-un program C++ trebuie declarata o **__variabila,__** astfel :
 * Pentru a avea acces la afisare in fişier : **ofstream g;**
 * Pentru a avea acces la citirea din fişier : **ifstream f;**

Cand ne hotarâm sa accesam fisierul, mai intai trebuie sa-l **__"deschidem".__** De fapt, creem legatura logica intre variabila declarata pentru accesarea fisierului si zona de pe disc unde se gaseste fisierul. Dupa crearea acestei legaturi, ori de cate ori dorim sa accesam fisierul vom accesa de fapt variabila asociata lui. **__Exemplu: __** 1) initializare variabila de acces, la declarare:
 * ifstream f("intrare.txt"); **
 * ofstream g("iesire.txt"); **

2)initializare variabila de acces, dupa declarare

fișierul se caută pe calea specificată ||
 * **<span style="font-family: 'Times New Roman',serif; font-size: 16px;">ifstream f; **
 * f.open("intrare.txt");** || **ofstream g;**
 * g.open("iesire.txt");** || **f.open("c:\\teza\\unu.in");**

<span style="display: block; font-family: 'Times New Roman',serif; font-size: 16px; text-align: justify;">Cand ne hotarâm sa nu mai accesam fisierul va trebui sa-l **__"inchidem".__** De fapt, distrugem legatura logica intre variabila declarata pentru accesarea fisierului si zona de pe disc unde se gaseste fisierul. <span style="display: block; font-family: 'Times New Roman',serif; font-size: 16px; text-align: justify;">Exemplu: **f.close;** **g.close;**


 * __<span style="font-family: 'Times New Roman',serif; font-size: 16px;">Afisarea in fisier __**

<span style="display: block; font-family: 'Times New Roman',serif; font-size: 16px; text-align: justify;">Se face la fel ca si afisarea pe ecran numai ca metoda **cout** se inlocuieste cu numele variabilei de acces la fisier. **__<span style="font-family: 'Times New Roman',serif; font-size: 16px;">Exemplu: __**

<span style="font-family: 'Times New Roman',serif; font-size: 16px;">g<<17<<’ ’; <span style="font-family: 'Times New Roman',serif; font-size: 16px;">g<<"ana are mere"<<endl;


 * __<span style="font-family: 'Times New Roman',serif; font-size: 16px;">Aplicatie : __**<span style="font-family: 'Times New Roman',serif; font-size: 16px;"> Sa se afiseze in fisierul text **rezultat.out**, toate cifrele aranjate crescator si separate prin cate un spatiu.

using namespace std; main { unsigned int L; ofstream g("<span style="font-family: 'Times New Roman',serif; font-size: 16px;">rezultat.out "); for (L=0; L<=9; L++) g<<L<<' '; g.close;
 * 1) include
 * 2) include

}
 * OBS: Nu este nevoie sa creati fisierul “rezult.out”. Acesta va fi creat automat de program. **


 * __<span style="font-family: 'Times New Roman',serif; font-size: 16px;">Citirea din fisier __**

<span style="font-family: 'Times New Roman',serif; font-size: 16px;">Operatorul **>>** permite citirea datelor in variabila de orice tip, fara insa a trata caracterele albe ( spatii, salturi la linie noua ).

<span style="font-family: 'Times New Roman',serif; font-size: 16px;">Citirea se face similar celei de la tastatura numai ca se inlocuieste metoda **cin** cu variabila de acces la fisier.

__<span style="font-family: 'Times New Roman',serif; font-size: 16px;">**Ex1**: __ <span style="display: block; font-family: 'Times New Roman',serif; font-size: 16px; text-align: justify;">Se considera fisierul text **cifre.txt** care contine pe o singura linie si separate prin spatii 10 numere intregi de maxim 4 cifre fiecare. Sa se afiseze pe ecran suma acestor numere.

using namespace std; main { int x; long s=0; ifstream f("cifre.txt"); int i; for(i=1;i<=10;i++) { f>>x; s=s+x; } f.close; cout<<"suma este:"<<s; } __ <span style="font-family: 'Times New Roman',serif; font-size: 16px;">**Ex2**: __<span style="font-family: 'Times New Roman',serif; font-size: 16px;"> Se considera fisierul text **cifre2.txt** care contine: pe prima linie numarul natural nenul **n** (n<=50) <span style="font-family: 'Times New Roman',serif; font-size: 16px;">iar pe linia a doua, separate prin spatiu, n numere naturale cu maxim 9 cifre fiecare. Sa se afiseze pe ecran cel mai mare dintre cele **n** numere.
 * 1) include
 * 2) include

<span style="font-family: 'Times New Roman',serif; font-size: 16px;">#include <span style="font-family: 'Times New Roman',serif; font-size: 16px;">#include <span style="font-family: 'Times New Roman',serif; font-size: 16px;">using namespace std;

<span style="font-family: 'Times New Roman',serif; font-size: 16px;">main { <span style="font-family: 'Times New Roman',serif; font-size: 16px;"> long x, max; int n,i; <span style="font-family: 'Times New Roman',serif; font-size: 16px;"> ifstream f("cifre2.txt"); <span style="font-family: 'Times New Roman',serif; font-size: 16px;"> f>>n>>max; <span style="font-family: 'Times New Roman',serif; font-size: 16px;"> for(i=2;i<=n;i++) { <span style="font-family: 'Times New Roman',serif; font-size: 16px;"> f>>x; <span style="font-family: 'Times New Roman',serif; font-size: 16px;"> if (x>max) max=x; <span style="font-family: 'Times New Roman',serif; font-size: 16px;"> } <span style="font-family: 'Times New Roman',serif; font-size: 16px;"> f.close; <span style="font-family: 'Times New Roman',serif; font-size: 16px;"> cout<<"Maximul este: "<<max; <span style="font-family: 'Times New Roman',serif; font-size: 16px; line-height: 1.5;">}

** Functia eof si get **
>> **ifstream f1("text.in");** >> **char c;** >> **f1.get(c);** >> Am citit primul caracter din fisier, indiferent daca este sau nu caracter alb.
 * **__<span style="color: #000000; font-family: 'Verdana','sans-serif'; font-size: 13.3333px;">Functia get __<span style="color: #000000; font-family: 'Verdana','sans-serif'; font-size: 13.3333px;"> permite citirea unui caracter de orice fel (inclusiv spatiu ori salt la linie noua). **
 * De exemplu, pentru citirea caracterelor (char sau unsigned char) se poate utiliza astfel:

>> Vom citi si vom numara toate caracterele existente într-un fisier, pâna la sfârsitul acestuia. >> **ifstream fin("text.in");** >> **char c;** >> **long int nr=0;** >> **while (!fin.eof) {fin.get(c); nr++;}** >> **cout<<"Fisierul contine "<<nr<<" caractere\n";** >> Functia membru get returneaz pointerul de fisier (pozitia curenta în flux). Prin urmare secvena de program ar putea fi rescrisa si astfel: >> **ifstream fin("text.in");** >> **char c;** >> **long int nr=0;** >> **while (fin.get(c)) nr++;** >> **cout<<"Fisierul contine "<<nr<<" caractere\n"**;
 * <span style="color: #000000; font-family: 'Arial','sans-serif';">Funcţia eof determina daca s-a ajuns la sfarsitul fisierului sau nu . Funcia eof returneaz valoarea 0 daca nu am ajuns la sfârsitul fisierului, respectiv o valoare diferită de 0 daca am ajuns la sfârsit.
 * Exemplu

**Ex3. <span style="color: #000000; font-family: 'Arial','sans-serif';">Se considera fisierul text cinci.in care contine mai multe linii, pe fiecare linie aflandu-se numere naturale cu cel mult 8 cifre fiecare, separate prin spatiu. Cate linii contine fisierul ? **


 * <span style="background-color: #ffff00; color: #0000ff; font-family: 'Lucida Console',Monaco,monospace;">#include **
 * <span style="background-color: #ffff00; color: #0000ff; font-family: 'Lucida Console',Monaco,monospace;">#include **
 * <span style="background-color: #ffff00; color: #0000ff; font-family: 'Lucida Console',Monaco,monospace;">using namespace std; **

**<span style="color: #000000; font-family: 'Arial','sans-serif';">Ex4. **<span style="color: #000000; font-family: 'Verdana','sans-serif'; font-size: 13.3333px;">**se considera fisierul text unu.in care contine doua linii de text. Cate spatii se afla pe fiecare linie ?**
 * <span style="background-color: #ffff00; color: #0000ff; font-family: 'Lucida Console',Monaco,monospace;">main { **
 * <span style="background-color: #ffff00; color: #0000ff; font-family: 'Lucida Console',Monaco,monospace;">int nr=0; long x; **
 * <span style="background-color: #ffff00; color: #0000ff; font-family: 'Lucida Console',Monaco,monospace;">char c; **
 * <span style="background-color: #ffff00; color: #0000ff; font-family: 'Lucida Console',Monaco,monospace;">ifstream f("cinci.in"); **
 * <span style="background-color: #ffff00; color: #0000ff; font-family: 'Lucida Console',Monaco,monospace;">while (f>>x) {f.get(c); **
 * <span style="background-color: #ffff00; color: #0000ff; font-family: 'Lucida Console',Monaco,monospace;"> if ( c=='\n') nr++; **
 * <span style="background-color: #ffff00; color: #0000ff; font-family: 'Lucida Console',Monaco,monospace;">} **
 * <span style="background-color: #ffff00; color: #0000ff; font-family: 'Lucida Console',Monaco,monospace;">f.close; **
 * <span style="background-color: #ffff00; color: #0000ff; font-family: 'Lucida Console',Monaco,monospace;">cout<<nr; **
 * <span style="background-color: #ffff00; color: #0000ff; font-family: 'Lucida Console',Monaco,monospace;">system("pause"); **
 * <span style="background-color: #ffff00; color: #0000ff; font-family: 'Lucida Console',Monaco,monospace;">} **


 * <span style="background-color: #ffff00; color: #0000ff; font-family: 'Lucida Console',Monaco,monospace;">#include **
 * <span style="background-color: #ffff00; color: #0000ff; font-family: 'Lucida Console',Monaco,monospace;">#include **
 * <span style="background-color: #ffff00; color: #0000ff; font-family: 'Lucida Console',Monaco,monospace;">using namespace std; **


 * <span style="background-color: #ffff00; color: #0000ff; font-family: 'Lucida Console',Monaco,monospace;"> main { **
 * <span style="background-color: #ffff00; color: #0000ff; font-family: 'Lucida Console',Monaco,monospace;"> char c; int nr=0; **
 * <span style="background-color: #ffff00; color: #0000ff; font-family: 'Lucida Console',Monaco,monospace;"> ifstream f("1.txt"); **
 * <span style="background-color: #ffff00; color: #0000ff; font-family: 'Lucida Console',Monaco,monospace;"> do **
 * <span style="background-color: #ffff00; color: #0000ff; font-family: 'Lucida Console',Monaco,monospace;">{f.get(c); **
 * <span style="background-color: #ffff00; color: #0000ff; font-family: 'Lucida Console',Monaco,monospace;">if (c==' ') nr++;} while ( c!='\n') ; **
 * <span style="background-color: #ffff00; color: #0000ff; font-family: 'Lucida Console',Monaco,monospace;">cout<<nr<<' '; nr=0; **
 * <span style="background-color: #ffff00; color: #0000ff; font-family: 'Lucida Console',Monaco,monospace;"> f.get(c); /* citim enter-ul */ **
 * <span style="background-color: #ffff00; color: #0000ff; font-family: 'Lucida Console',Monaco,monospace;"> //analog ca mai sus dar prin alta metoda echivalenta **
 * <span style="background-color: #ffff00; color: #0000ff; font-family: 'Lucida Console',Monaco,monospace;">while (!f.eof ) { **
 * <span style="background-color: #ffff00; color: #0000ff; font-family: 'Lucida Console',Monaco,monospace;">f.get(c); if (c==' ') nr++; } **
 * <span style="background-color: #ffff00; color: #0000ff; font-family: 'Lucida Console',Monaco,monospace;">f.close; **
 * <span style="background-color: #ffff00; color: #0000ff; font-family: 'Lucida Console',Monaco,monospace;">cout<<nr; **
 * <span style="background-color: #ffff00; color: #0000ff; font-family: 'Lucida Console',Monaco,monospace;"> system("pause"); **
 * <span style="background-color: #ffff00; color: #0000ff; font-family: 'Lucida Console',Monaco,monospace;"> } **


 * Exercitii de consolidare: **


 * 1.** Dintr-un fisier care contine o secventa de numere intregi, scrise fiecare pe un rand, sa se creeze doua fisiere: unul cu numerele pare si altul cu numerele impare


 * 2.**Scrieti un program care genereaza toate numerele prime strict mai mici decat n(n nr natural).Valoarea variabilei n se citeste de la tastatura. Numerele prime generate vor fi scrise in fisierul text prime.txt, cate unul pe linie.


 * 3.**In fisierul text alfa.txt se afla mai multe numere naturale, fiecare scrise pe un singur rand. Sa se creeze fisierul pare.txt care sa contina cate una pe linie, doar acele valori, din fisierul numere.txt, care au suma cifrelor un numar par.


 * 4.**Pe prima linie a fisierului text alfa.txt se gaseste o succesiune de cel mult 1000 de caractere, caractere care pot fi doar litere mici.Scrieti un program care citeste de la tastatura un numar natural n si un caracter ch si stabileste daca caracterul ch apare de exact n ori in fisier.Programul afiseaza "da" sau "nu".


 * 5.**Scrieti programul care citeste de la tastatura un numar natural n (0<n<=15) si o litera c, si creeaza un fisier text caracter.txt, ce contine pe prima linie un caracter c,pe a doua 2 caractere c, pe a 3-a linie 3 caractere c...ultima linie n va contine contine n caractere


 * Exercitii de BACALAUREAT: **

bac.txt şi care afişează pe ecran, separate prin câte un spaţiu, toate numerele din fişier care sunt divizibile cu n. Dacă fişierul nu conţine niciun astfel de număr, atunci se va afişa pe ecran mesajul NU EXISTA. Exemplu: dacă fişierul bac.txt conţine numerele: 3 100 40 70 25 5 80 6 3798 123, pentru n=10 atunci pe ecran se va afişa: 100 40 70 80
 * 1.** Fişierul text bac.txt conţine, pe o singură linie, cel mult 1000 de numere naturale nenule cu cel mult 4 cifre fiecare, numerele fiind separate prin câte un spaţiu. Scrieţi un program C/C++ care citeşte de la tastatură un număr natural nenul n (n≤999) şi numerele din fişierul

Exemplu: pentru n=10305 fişierul NR.TXT va conţine numerele: 10305 1030 103 10 1
 * 2.**Scrieţi un program C/C++ care citeşte de la tastatură un număr natural n cu cel mult 8 cifre (n≥10) şi care creează fişierul text NR.TXT ce conţine numărul n şi toate prefixele nenule ale acestuia, pe o singură linie, separate prin câte un spaţiu, în ordine descrescătoare a valorii lor.

Exemplu: dacă fişierul are conţinutul 5 12 3 9 7 1 se va afişa pe ecran valoarea 2 (în şirul dat există două numere prime şi anume 3 şi 7).(10p.)
 * 3.** Fişierul BAC.TXT conţine pe prima linie un număr natural n (0<n≤1000) şi pe a doua linie, separate prin câte un spaţiu, n numere naturale nenule (cu cel mult 9 cifre fiecare). Scrieţi un program C/C++ care citeşte toate numerele din fişier şi afişează pe ecran câte numere prime conţine şirul citit de pe a doua linie a fişierului.