InfoBook.ro ← Harta anului
Modul 09 · Fișiere text
Modul 09 · Conținut 3.3

Datele care rămân pe disc

Până acum am citit de la tastatură și am afișat pe ecran — iar totul dispărea la închiderea programului. Fișierele sunt caietul: ce scrii, rămâne. Iar la BAC și pe pbinfo, datele vin aproape mereu din fișier!

🎯 Obiectiv 1Cunoști cei 3 pași universali: deschidere → transfer → închidere.
🎯 Obiectiv 2Citești și scrii fișiere în C++ (ifstream/ofstream) și Python (open/TextIOWrapper).
🎯 Obiectiv 3Pregătești datele citite: while(fin >> x), split, conversii.
1

Fluxul datelor: consolă vs fișier

Aceleași date, alt drum. Consola e tabla pe care ștergi; fișierul e caietul în care scrii.

⌨ CONSOLĂ — ce știai până acum

tastatură→cin / input()→PROGRAM
PROGRAM→cout / print()→ecran
✘ datele dispar când programul se închide!

💾 FIȘIER — noutatea de azi

date.txt→ifstream / open("r")→PROGRAM
PROGRAM→ofstream / open("w")→rezultat.txt
✔ datele rămân pe disc și după închidere!

Cei 3 pași universali — în orice limbaj

1. Deschiderea — programul „prinde" fișierul de pe disc și primește un robinet (flux) spre el.
2. Transferul — citești sau scrii prin robinet, exact ca la cin/cout.
3. Închiderea — OBLIGATORIE: abia la close() datele scrise ajung sigur pe disc!
2

C++: ifstream / ofstream

Din <fstream>. Se poartă EXACT ca cin și cout — doar că robinetul duce la fișier, nu la consolă.

exemplul de bază din lecție

1#include <fstream>
2ifstream fin("date.txt");
3ofstream fout("rezultat.txt");
4int x;
5fin >> x; // ca cin!
6fout << 2 * x; // ca cout!
7fin.close();
8fout.close();

șablonul de aur: „citește CÂT E"

1ifstream fin("date.txt");
2int x, s = 0;
3while (fin >> x) // cât timp MAI E ceva
4 s += x;
5fin.close();

while (fin >> x) citește până se termină fișierul — nu trebuie să știi dinainte câte numere sunt. Idiom de BAC!

Capcana nr. 1: dacă fișierul nu există sau numele e greșit, fin tace și citește gunoi. Verificare de profesionist: if (!fin) { /* fișierul nu s-a deschis! */ }.
3

Python: open() și clasa TextIOWrapper

open() returnează un obiect din clasa TextIOWrapper — prima ta întâlnire oficială cu obiectele (Modulul 10 vine imediat!). Metodele lui fac tot transferul.

Modurile de deschidere

modce face
"r"citire (read) — eroare dacă fișierul nu există
"w"scriere (write) — creează fișierul; dacă există, ÎL GOLEȘTE!
"a"adăugare (append) — scrie în continuare, la sfârșitul fișierului

Metodele obiectului-fișier

1f = open("date.txt", "r")
2x = int(f.readline()) # o LINIE → int
3tot = f.read() # tot restul
4f.close()
5 
6g = open("rezultat.txt", "w")
7g.write(str(2 * x)) # DOAR string-uri!
8g.close()

pregătirea datelor citite — cerută de programă

1# linia "4 7 1 9" → lista [4, 7, 1, 9]:
2v = [int(x) for x in f.readline().split()]
3 
4# varianta modernă — închide singură fișierul:
5with open("date.txt") as f:
6 for linie in f:
7 print(linie.strip())

readline() dă un string cu \n la coadă — de-asta apar mereu int(), split() și strip() lângă el.

4

Simulator: fișierul tău virtual

Editează conținutul lui date.txt, apoi rulează programul pas cu pas — privește cursorul „consumând" numerele și rezultatul născându-se în al doilea fișier.

✏ editează date.txt (numere separate prin spații/rânduri):

date.txt — pe disc

rezultat.txt — pe disc

 
Programul adună toate numerele din fișier. Apasă „Pas". 👆
Observă: pentru C++, spațiile și rândurile noi sunt totuna — fin >> x sare peste ele exact ca cin. Schimbă numerele din fișier și rulează din nou: programul nu se modifică deloc. Asta e puterea lui while (fin >> x).
5

Verificare rapidă

Cinci întrebări — capcanele clasice ale fișierelor.

6

10 probleme cu fișiere

Toate lucrează la fel: citesc din date.txt și scriu în rezultat.txt. Creează cele două fișiere în același folder cu programul, rezolvă singur, și abia apoi cere rezolvarea.

Cum lucrezi: pui în date.txt exact datele de intrare din exemplu, rulezi programul, apoi deschizi rezultat.txt și compari cu ieșirea așteptată. Dacă fișierul de ieșire e gol, aproape sigur ai uitat close().
7

Fișa de sinteză

Fișierele, pe scurt.

3 pași universali: deschidere → transfer → închidere. close() e OBLIGATORIU la scriere.
C++: #include <fstream>; ifstream fin("date.txt"); ofstream fout("rezultat.txt") — se poartă ca cin/cout.
Idiom BAC: while (fin >> x) — citește până la sfârșitul fișierului, fără să știi câte date sunt.
Python: open(nume, mod) → obiect TextIOWrapper cu metodele read, readline, write, close.
Moduri: "r" citire · "w" scriere (GOLEȘTE fișierul existent!) · "a" adăugare la final.
Pregătirea datelor: readline() dă string cu \n → int(), .split(), .strip(), map(int, …).
🎯 Acum exersează pe pbinfo.ro.
Intră la Probleme → Categorii și lucrează pe categoria „Fișiere text". Acolo aproape orice problemă din anii trecuți își schimbă doar prima și ultima linie: cin devine fin, cout devine fout — restul algoritmului rămâne exact cum îl știi.

Sfat: ia trei probleme pe care le-ai rezolvat deja cu citire de la tastatură și rescrie-le cu fișiere. E cel mai rapid mod de a-ți intra în reflex cei trei pași: deschidere → transfer → close().
← anteriorModul 08 · Metode de sortare urmează →Modul 10 · Introducere în POO