Documente Academic
Documente Profesional
Documente Cultură
Fișiere text
Componentele unui fișier text sunt caractere structurate pe linii.
Fiecare linie (fără ultima) se termină prin marcajul de sfârșit de linie ‘\n’ (newline), iar fișierul
prin caracterul EOF (acesta are valoarea 1 la sfârșitul fișierului și 0 dacă nu s-a ajuns la sfârșitul
fișierului).
Marcajul de sfârșit de linie se generează la apăsarea tastei Enter, iar marcajul EOF la apăsarea
tastelor Ctrl+Z.
Observație: Tipul fișier text și tipul tablou se aseamănă deoarece toate componentele lor au
același tip (la fișiere text sunt caractere, iar la tablou sunt de un anumit tip) și se deosebesc prin
numărul de componente.
1. Deschiderea fișierului
Deschiderea unui fișier înseamnă stabilirea unui nume logic pentru fișier și precizarea modului
de utilizare a fișierului: intrare (citire), ieșire (scriere) sau intrare/ieșire (citire/scriere).
Deschiderea unui fișier în C++ se realizează legându-l de un flux de date (stream). Un stream este
o entitate logică ce produce sau primește informație. Pentru fișiere există trei tipuri de stream-
uri:
- De intrare (din clasa ifstream)
- De ieșire (din clasa ofstream)
- De intrare/ieșire (din clasa fstream).
Pentru a putea utiliza fluxurile de date pentru fișiere trebuie să includem biblioteca fstream
astfel: #include <fstream>
Declararea fluxurilor de date pentru fișiere text se realizează astfel:
a) pentru citire:
ifstream id_nume_logic_fisier(”nume_fizic_fișier”);
sau
fstream id_nume_logic_fisier(”nume_fizic_fișier”, ios::in);
unde:
- id_nume_logic_fisier este identificatorul (nume logic) al fișierului. Se utilizează în
program pentru a face referire la fișier;
- nume_fizic_fisier este un șir de caractere ce reprezintă numele fizic al fișierului.
- ios::in este o construcție care specifică modul de deschidere; utilizând constanta in
fișierul este deschis pentru intrare (citire).
Fișierul astfel deschis permite numai operații de citire și valorile citite se pot atribui unor
variabile din program. În cazul în care fișierul fizic nu există, se semnalează eroare.
b) pentru scriere:
oifstream id_nume_logic_fisier(”nume_fizic_fișier”);
sau
fstream id_nume_logic_fisier(”nume_fizic_fișier”, ios::out);
unde:
- id_nume_logic_fisier, nume_fizic_fisier, ios:: au aceeași semnificație ca mai sus.
- out este constantă ce precizează că fișierul este deschis pentru scriere (ieșire).
Obs.
Dacă fișierul fizic nu există este creat.
În cazul în care fișierul fizic există conținutul se pierde și se crează un fișier nou.
Sunt permise numai operații de scriere.
c) pentru adăugare
fstream id_nume_logic_fisier(”nume_fizic_fișier”, ios::app);
unde:
- id_nume_logic_fisier, nume_fizic_fisier, ios:: au aceeași semnificație ca mai sus.
- app precizează că fișierul este deschis pentru adăugare (scriere la sfârșitul fișierului).
Obs.
Dacă fișierul fizic nu există, se semnalează eroare.
În cazul în care fișierul fizic există acesta este deschis și se pot adăuga date la sfârșitul fișierului.
Informația existentă în fișier nu se pierde.
Sunt permise numai operații de scriere.
Se pot combina două sau mai multe dintre constante unindu-le prin ”sau logic” |.
De exemplu, fstream f(“numere.txt”, ios:in|ios::app);
Exemple:
1. ifstream f(”numere.txt”); // sau fstream f(”numere.txt”, ios::in);
- deschide pentru citire fișierul numere.txt cu numele logic f;
2. ofstream g(”suma.txt”); //sau fstream g(”suma.txt”, ios::out);
- deschide pentru scriere fișierul suma.txt cu identificatorul g;
3. fstream x(”produse.txt”, ios::app);
- deschide pentru adăugare fișierul produse.txt cu numele logic x;
4. fstream f(”vector.txt”, ios::in|ios::app);
- deschide fișierul vector.txt cu numele logic f pentru citire sau pentru a adăuga date la sfârșitul
acestuia.
2. Citirea/scrierea datelor
Citirea/scrierea datelor se realizează asemănător cu citirea/scrierea de la tastatură/monitor cu
ajutorul operatorilor >> pentru citire și << pentru scriere în fluxul de date al fișierului astfel:
a) pentru citire: id_nume_logic_fișier>>v1>>v2>>....>>vn;
b) pentru scriere: id_nume_logic_fișier<<e1<<e2<<...<<en;
Unde:
- id_nume_logic_fișier este numele logic al fișierului text;
- v1, v2, ...,vn sunt variabile în care se citesc datele din fișier;
- e1, e2,...,en sunt expresii a căror valoare se scrie în fișier;
Observații
Operația de citire se face fără format, adică sunt ignorate caracterele albe.
Pentru a lua în considerare și caracterele albe se utlizează funcțiile get(ch) sau get().
Funcția get(ch) citește un caracter din fișier și îl depune în variabila ch, iar get() returnează
caracterul citit.
Exemple:
1.
int a, b;
ifstream f(”numere.txt”);
f>>a>>b;
Secvența citește în variabilele a, b două valori întregi separate prin spațiu sau Enter, din fișierul f.
2.
char a; char a;
ifstream (”nume.txt”); sau ifstream f(”nume.txt”);
while(f.get(a)) a=f.get();
cout<<a; while(!f.eof()){
cout<<a;
a=f.get();}
3. Închiderea fișierului
Pentru închiderea fișierului se utilizează funcția close() .
Exemplu: f.close(); //închide fișierul cu numele logic f
Alte funcții utilizate în prelucrarea fișierelor
id_nume_logic_fisier.eof() = returnează o valoare diferită de 0 dacă este sfârșit de fișier
și 0, în caz contrar.
rename(nume_fis1, nume_fis2); = redenumește fișierul nume_fis1 cu numele specificat
în nume_fis2. Are prototipul în cstdio.
remove(nume_fis) =sterge fișierul specificat. Are prototipul în cstdio.