Lucrul cu fișiere text
Un fișier este o colecție organizată de date, memorată pe un dispozitiv de stocare.
Un fișier text este, în esență, o colecție de caractere grupate pe rânduri, fiecare rând putând avea o lungime diferită. Folosim fișiere atunci când avem de citit sau de afișat multe valori, ca să nu fie nevoie să le introducem de fiecare dată de la tastatură.
Ideea de bază este simplă: în loc să tastăm datele la fiecare rulare a programului, le scriem o singură dată într-un fișier și lăsăm programul să le citească de acolo.
Biblioteca <fstream>
Pentru a lucra cu fișiere în C++, trebuie să includem întotdeauna biblioteca dedicată acestora, <fstream>.
Astfel, dacă într-o problemă știm că vom folosi fișiere, în directiva de preprocesare va apărea și instrucțiunea:
#include <fstream>
Această bibliotecă ne oferă tipurile cu care „legăm” programul de un fișier: unul pentru citire și unul pentru scriere.
Citirea dintr-un fișier
Când vrem să citim date dintr-un fișier, trebuie mai întâi să „declarăm” această operație. Declarația se scrie de obicei înaintea tuturor subprogramelor, imediat după directiva de preprocesare, și are forma:
ifstream <nume_obiect> ("<nume_fisier>");unde:
<nume_obiect>este numele obiectului prin care vom realiza citirea;<nume_fisier>este numele fișierului din care se citește.
Exemplu:
#include <fstream>
using namespace std;
ifstream fin ("date.in");
int n;
int main() {
fin >> n;
// ...
return 0;
}
Programul de mai sus realizează o citire simplă a unei variabile din fișierul date.in.
Am ales numele fin pentru că descrie sugestiv citirea dintr-un fișier (fin = f de la „fișier” + in, la fel cum cin vine de la c de la „consolă” + in). Numele poate fi orice cuvânt sau literă, însă cele mai întâlnite sunt fin, in sau f.
Pentru că nu am citit nimic de la tastatură, am putut renunța la includerea bibliotecii <iostream>.
Scrierea într-un fișier
În mod asemănător, atunci când vrem să scriem date într-un fișier, declarăm operația printr-o instrucțiune de forma:
ofstream <nume_obiect> ("<nume_fisier>");unde:
<nume_obiect>este numele obiectului prin care se scrie în fișier;<nume_fisier>este numele fișierului în care se scrie.
Exemplu:
#include <iostream>
#include <fstream>
using namespace std;
ofstream fout ("date.out");
int n;
int main() {
cin >> n;
// ...
fout << n;
return 0;
}
De data aceasta citim un număr de la tastatură, îl prelucrăm și apoi îl scriem în fișierul date.out.
Numele fout este la fel de sugestiv (fout = f de la „fișier" + out). Cele mai folosite nume sunt fout, out sau g.
Pentru că am folosit și o citire de la tastatură, a trebuit să includem și biblioteca <iostream>, pe lângă <fstream>.
Concluzie
Lucrul cu fișiere text în C++ pornește mereu de la aceleași două ingrediente: includerea bibliotecii <fstream> și declararea unui obiect de citire (ifstream) sau de scriere (ofstream). Odată declarat, obiectul se folosește exact ca cin și cout, prin operatorii >> și <<.
Pentru a vedea cum se leagă totul într-un program complet, vezi problema rezolvată.