InfoBook.ro ← Harta anului
Modul 10 · Fișiere text
Modul 10 · 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
PROGRAMcout / print()ecran
✘ datele dispar când programul se închide!

💾 FIȘIER — noutatea de azi

date.txtifstream / open("r")PROGRAM
PROGRAMofstream / 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 11 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 = list(map(int, 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

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, …).
Exersează pe pbinfo.ro — toate cu citire/scriere din fișiere:
#2318 · ușoară

Conversie_B_10

Transformați n din baza b în baza 10 — și bazele din Modulul 00 revin!

Rezolvă pe pbinfo.ro →
#1005 · ușoară

Numere8

Numerele cu cel mult 4 cifre care NU apar în lista dată — vector de frecvență + fișiere.

Rezolvă pe pbinfo.ro →
#2644 · medie

clase

Câte clase primesc pachet cu cărți? Citire de perechi din fișier.

Rezolvă pe pbinfo.ro →
#4646 · medie

cb1

Interogări pe un șir sortat — căutarea binară (M08) întâlnește fișierele.

Rezolvă pe pbinfo.ro →
← anteriorModul 09 · Metode de sortare urmează →Modul 11 · Introducere în POO