Vous êtes sur la page 1sur 7

Fiiere n C++

1 DEFINIIE
Fiierul este o structur ordonat de date extern format dintr-o mulime ordonat de nregistrri, ordonarea fcndu-se dup numrul nregistrrii.

2 MODUL DE DESCHIDERE
Forma general de declarare a fiierului este:

fstream f(nume fiier, ios::mod_de_deschidere);

sau
fstream f(C:\\fisier.txt, ios::mod_de_deschidere);
Un fiier poate fi deschis n diferite moduri, pentru scopuri diferite.

Modul de deschidere Operaii permise


in Fiierul se deschide pentru citire. Fiierul se deschide pentru scriere. Dac el exista deja, scrierea se va face la nceputul lui (vechiul coninut se pierde). Dac nu, se creeaz. Dup deschidere (pentru scriere sau citire) se face un salt la sfritul fiierului. Fiierul se deschide pentru adugare (scriere la sfritul fiierului), dac fiierul nu exist, se creeaz. Dac fiierul exist, se deschide pentru scriere la nceputul lui (datele din fiier se pierd). Fiierul va fi deschis numai daca exist. (Dac nu exist nu va fi creat). Dac fiierul nu exist, va fi deschis pentru creare, altfel nu este deschis. Se deschide un fiier binar. out

ate app

trunc nocreate noreplace binary

3 FUNCII DE SISTEM PENTRU PRELUCRAREA FIIERELOR


n prelucrarea unui fiier, sunt utile urmtoarele funcii de sistem:

Funcia
eof() close() tellp() tellg()

Realizeaz
Se folosete pentru a detecta sfritul de fiier. Dac valoarea citit in poziia curent este codul ASCII pentru sfritul de fiier, funcia returneaz valoare 1, altfel returneaz valoarea 0. nchide un fiier deschis. Furnizeaz poziia pointerului fa de nceputul fiierului la scriere. Rezultatul furnizat este de tip long. Furnizeaz poziia pointerului fa de nceputul fiierului la citire. Rezultatul furnizat este de tip long. Deplaseaz pointerul la poziia precizat la scriere x deplasarea fa de o poziie de referin precizat prin parametrul y. y o constant de sistem care poate aveauna dintre valorile: 1. beg nceput de fiier 2. cur poziia curenta 3. eof sfrit de fiier Parametrul x este de tip long i poate avea valori pozitive (deplasarea se face la dreapta poziiei de referin) sau negative (deplasarea se face la stnga poziiei de referin) Deplaseaz pointerul la poziia precizat la citire. x i y au acelai rol ca i pentru funcia seekp(x,y). Stabilete starea fluxului de date la valoarea precizat. Parametrul x este de tip ntreg. Dac are valoarea 0, starea fluxului este bun (se poate executa operaia de citire). Dac este 1 nseamn c s-a ajuns la sfritul fiierului. Extrage un caracter dintr-un ir de caractere x pn se ntmpl unul dintre evenimentele: a ntlnit marcajul de endl (sfrit de fiier) sau marcajul eof, au fost citite caractre sau a citit caracterul folosit ca delimitator d. Extrage urmtorul caracter sau marcajul de sfrit de fiier. Are acelai efect ca i get(x,n,d), cu deosebirea c extrage i delimitatorul de sfrit de linie (/n sau d) Redenumete un fiier. Parametrii x si y sunt de tip char i reprezint: x numele vechi, iar y numele nou. terge un fiier. x reprezint numele fiierului i este de tip char.

seekp(x,y)

seekg(x,y)

clear(x)

get(x,n,d) get() getline(x,n,d) rename(x,y) remove(x)

4 OPERAIA DE SCRIERE N FIIER


Pentru citirea datelor de la tastatur i scrierea lor ntr-un fiier text, se folosesc dou fluxuri de date:

1. Fluxul de date al tastaturii (cin>>ch) pentru citire de la tastatur: Sursa este tastatura (fiierul standard cin); Destinaia este o variabil de memorie (ch). 2. Fluxul de date al fiierului (f<<ch) pentru scriere n fiier: Sursa este o variabil de memorie (ch); Destinatia este fiierul (f).

Tastatur

Memorie intern

Fiier

Exemplu:

#include<fstream.h> main() { fstream f("D:\\fis.txt",ios::out); char ch; while(cin>>ch) f<<ch; f.close(); }

5 OPERAIA DE CITIRE DIN FIIER


Pentru citirea datelor din fiier i scrierea lor pe ecranul monitorului, se folosesc dou fluxuri de date:

1. Fluxul de date al fiierului (f>>ch) pentru citire din fiier: Sursa este fiierul (f); Destinaia este o variabil de memorie (ch). 2. Fluxul de date al monitorului (cout<<ch) pentru scriere pe ecran: Sursa este variabila de memorie (ch); Destinatia este monitorul (fiierul standard cout).

Fiier

Memorie intern

Ecran

#include<fstream.h> main() { fstream f("D:\\fis.txt",ios::in); char ch; while(f>>ch) cout<<ch; f.close(); }

6 CITIRI I SCRIERI CU FORMAT


Pentru ca citirea i scrierea datelor s se poat face cu format, se folosesc variabile de memorie i constante de memorie definite in biblioteca <iostream.h>. Variabilele de memorie sistem sunt:

Identificator Tip
x_precision x_width x_fill x_flags int int int long

Coninut
Numrul de poziii pentru partea fracionar care se afieaz pentru un numr real. Numrul de poziii pe care se face afiarea(limea cmpului pentru afiare). Caracterul de umplere folosit; acest caracter va fi scris n poziiile libere ale cmpului de afiare (poziiile n care nu este scris dat). Conine o masc, construit la nivel de bii, pentru formatare intrrilor i a ieirilor. Pentru tipurile de formatri permise, sunt definite constante de sistem care pot fi atribuite variabilei.

Pentru a avea acces la aceste variabile i constante de sistem, se folosesc manipulatorii. Pentru a putea folosi manipulatorii, avem nevoie de fiierul antet <iomanip.h>. Manipulatori pentru operaia de scriere

Manipulator Tip x
setprecision(x) setw(x) setfill(x) Exemplu: int Int char

Aces la
x_precisio n x_width x_fill

Realizeaz
Stabilete precizia (nr-ul de poziii pentru partea fracionar) la afiarea unui nr. real; x reprezint nr-ul zecimalelor. Stabilete nr-ul de poziii pa care se face afiarea; x reprezint limea cmpului pentru afiare. Stabilete caracterul de umplere folosit; x reprezint caracterul.

#include<iostream.h> #include<iomanip.h> void main() { float x=0.12345; cout<<setw(5)<<setprecision(2)<<setfill(0)<<x; } Se va afisa 00.12. Manipulatorul setw(5) seteaz limea cmpului de afiare la 5, setprecision(2) face ca precizia de afiare s fie de 2 cifre, iar caracterul de umplere este 0.

Accesul la cea de a patra variabil x_flags este controlat prin manipulatorii:

Maipulator
setiosflags(masca) resetiosflags(masca)

Realizeaz
Seteaz biii precizai n masc (biii precizai vor avea valoarea 1) i atribuie masca variabilei x_flags. Reseteaz biii precizai n masc (biii precizai vor avea valoarea 0) i atribuie masca variabilei x_flags.

Constantele folosite in masca de formatare

Constanta
skipws left right internal dec oct hex showbase showpoint uppercase showpos scientific fixed

Semnificaie
Caracterele albe care preced valoarea care urmeaz s fie citit sunt ignorate. Afiarea caracterelor se face cu aliniere la stnga. Afiarea caracterelor se face cu aliniere la dreapta. Dac limea cmpului pentru afiare este mai mare dect numrul de poziii ocupate de dat, afiarea semnului numrului se face cu aliniere la stnga, iar a numrului la dreapta. Se face conversia numrului n zecimal. Se face conversia numrului n octal. Se face conversia numrului n hexazecimal. Se utilizeaz indicatorul bazei de numerotaie. Este forat afiarea punctului zecimal, char dac numrul real are o valoare ntreag. Pentru afiarea numerelor hexazecimale se folosesc litere mari. Pentru valorile numerice pozitive se afieaz semnul +. Pentru afiarea numerelor reale se folosete notaia tiinific. Pentru afiarea valorilor reale se folosete forma normal(cu semn si separatorul punct)

Pentru formarea unei mti cu ajutorul constantelor de sistem se pot folosi construcii de forma:

ios::const_1 | ios::_const_2 | ios::const_3


De exemplu, prin masca

ios::right | ios::hex | ios::uppercase

O valoare numeric ntreag va fi convertit in hexazecimal, folosindu-se litere mari i va fi afiat cu aliniere la dreapta.

Exemplu de convertire dintr-o baz de numeraie n alta:


#include<iostream.h> #include<fstream.h> #include<iomanip.h> void main() { int a; float x=123; cout<<"a="; cin>>a; cout<<setw(6)<<setprecision(2)<<setiosflags(ios::showpoint)<<x<<endl; \\ 123.00 cout<<setiosflags(ios::hex)<<setiosflags(ios::uppercase)<<a; \\ 1E }

Exemplu de citire i scriere cu format:

#include<iostream.h> #include<fstream.h> #include<iomanip.h> void main() { char ch, nume[20]; cout<<"Nume fisier="; cin>>nume; fstream f1(nume, ios::out); fstream f2(nume, ios::in); while (cin>>resetiosflags(ios::skipws)>>ch) f1<<ch; f1.close(); while (f2>>resetiosflags(ios::skipws)>>ch) cout<<ch; f2.close(); }

//se creeaz stream-ul f1 pentru scriere n fiier // se creeaz stream-ul f2 pentru citire din fiier // se citesc datele de intrare de la tastatur //datele citite sunt memorate m fiier, inclusiv spaiile //se nchide stream-ul f1 // se citesc datele din fiierul nume // sunt afiate datele din fiierul nume, inclusiv spaiile // se nchide stream-ul f2

Vous aimerez peut-être aussi