Pe scurt
Un fișier text păstrează caractere pe un suport de stocare, astfel datele pot fi citite și după încheierea programului. Pentru un fișier cu liniile „3” și „5”, un program poate citi cele două numere și scrie suma 8 într-un alt fișier. Modul de deschidere contează: citirea, scrierea cu înlocuirea conținutului și adăugarea la sfârșit sunt operații diferite.
În Python, open("date.txt", encoding="utf-8") deschide un fișier text; după citire, fișierul trebuie închis, de exemplu folosind with.
În detaliu
Un fișier text conține numai caractere. El nu stochează tipuri numerice: caracterele „3” și „5” trebuie interpretate ca numere pentru adunare, prin extragere cu >> în C++ sau prin conversie cu int în Python. Citirea cere o condiție de sfârșit, iar programul trebuie să trateze lipsa fișierului sau un format neașteptat. Fluxul se deschide într-un mod: citire, scriere cu înlocuirea conținutului sau adăugare la sfârșit. După transferul datelor, fișierul se închide: închiderea eliberează resursa și, pentru scriere, asigură finalizarea operațiilor; construcțiile de tip bloc (with în Python) sau obiectele flux din C++ pot face acest pas automat. Nu închide fluxul înaintea ultimei citiri sau scrieri. Lecțiile „Fișiere text în C/C++” și „Fișiere text în Python” arată interfețele concrete.
Un fișier text este o succesiune de linii separate prin sfârșit de linie. Valorile de pe o linie sunt delimitate de spații, iar programul alege cum le citește: valoare cu valoare (>> în C++, split() în Python) sau linie cu linie (getline în C++, parcurgerea fluxului în Python). Alegerea depinde de format: dacă numărul valorilor de pe linie nu este cunoscut, citirea pe linii este mai sigură. Ordinea operațiilor este cea din program: o citire vede numai ce a fost deja scris în fișier, deci un fișier nou, încă necreat, nu poate fi citit.
Exemplul 1 — citire până la sfârșit. Fișierul date.txt conține pe prima linie 3 și pe a doua 5. În Python, parcurgerea liniilor se oprește singură la sfârșitul fișierului:
ofstream f("a.txt");
f << 7;
f.close();
ofstream g("a.txt", ios::app);
g << 5;
g.close();
ifstream h("a.txt");
int x;
h >> x;
cout << x;
Pentru liniile 3 și 5 se afișează 8. Fiecare linie citită este text, de exemplu "3\n", iar int o transformă într-un număr. O încercare suplimentară de citire la sfârșit nu produce o nouă valoare validă. Echivalentul în C++ este while (fin >> x) suma += x;.
Exemplul 2 — modurile de deschidere. Un fișier rez.txt primește pe rând două scrieri. Rezultatul depinde de mod:
with open("rez.txt", "w") as f:
f.write("7")
with open("rez.txt", "a") as f:
f.write("5")
with open("rez.txt") as f:
print(f.read())
with open("rez.txt", "w") as f:
f.write("1")
with open("rez.txt") as f:
print(f.read())
Se afișează 75, apoi 1. Modul "w" creează fișierul sau șterge conținutul existent, iar "a" păstrează conținutul și adaugă la sfârșit. Fișierul conține textul 75, nu numărul 12: scrierea nu adună valorile. Ultimul "w" șterge tot ce exista și lasă doar 1. Dacă fișierul nu există, modul "w" îl creează, iar modul "r" produce o eroare.
Exemplul 3 — mai multe valori pe linie. Fișierul date.txt are pe prima linie 2 4 6 și pe a doua 10. Dacă numărul valorilor de pe linie nu este cunoscut, fiecare linie se împarte în cuvinte:
suma = 0
with open("date.txt", encoding="utf-8") as f:
for linie in f:
for cuvant in linie.split():
suma += int(cuvant)
print(suma)
Prima linie dă , a doua dă 10, iar programul afișează 22. Instrucțiunea int(linie) din primul exemplu ar fi eșuat pe prima linie, deoarece "2 4 6\n" nu este un singur număr. Un caz-limită este linia goală de la sfârșitul fișierului: "\n".split() dă o listă vidă și nu adună nimic, în timp ce int("\n") produce o eroare de conversie.
Pentru admitere
La un fragment care citește până la sfârșit, numără doar valorile citite cu succes. Dacă fișierul conține 3 și 5, suma este 8; o încercare suplimentară de citire la sfârșit nu adaugă o valoare. Deschiderea în mod de scriere obișnuit șterge conținutul existent. Când enunțul dă succesiunea de scrieri, urmărește conținutul fișierului după fiecare operație: scrierea în modul obișnuit înlocuiește, adăugarea păstrează. Dacă un fișier cu date necesare este deschis în modul "w", datele lui sunt șterse înainte de a fi citite. Scrierea unor numere într-un fișier text produce caractere, deci 7 urmat de 5 dă textul 75, care la citire ca număr este 75. Pentru un fișier cu liniile 2 4 6 și 10, ciclul while (fin >> x) suma += x; citește valorile una câte una, indiferent de linia pe care se află, și adună 22. După a patra valoare citirea eșuează, deci ciclul se oprește fără o a cincea adunare.
Exemplu în formatul examenului. Ce se afișează în urma executării secvenței de mai jos?
with open("a.txt", "w") as f:
f.write("7")
with open("a.txt", "a") as f:
f.write("5")
with open("a.txt") as f:
print(f.read())
- a)
75 - b)
5 - c)
12 - d)
7
Răspunsul corect este a). Primul flux, deschis pentru scriere, creează fișierul cu textul 7. Al doilea, deschis cu ios::app, adaugă 5 la sfârșit, deci fișierul conține 75. Citirea cu >> ia caracterele 75 ca un singur număr, 75. Varianta b) ar apărea dacă al doilea flux ar fi deschis fără ios::app, ceea ce înlocuiește conținutul. Varianta c) presupune că scrierea adună valorile. Varianta d) uită a doua scriere.
Greșeli frecvente
- Greșit: textul „3” este deja un întreg în orice limbaj.Corect: interpretarea numerică se face la citire sau conversie.
- Greșit: o încercare de citire eșuată la sfârșit produce automat zero.Corect: nu produce o nouă valoare validă.
- Greșit: modul de scriere și cel de adăugare au același efect asupra conținutului vechi.Corect: primul șterge conținutul anterior, al doilea adaugă la sfârșit.
Testează-te pe această lecție
Lecția o citești aici, fără cont. Testele pe lecții și capitole sunt în cont, cu grile originale Didaxis și explicația fiecăreia: gratuit 10 grile pe zi, fără limită cu Premium, 49 de lei pe lună pentru fiecare copil.
Înainte și după
Surse și referințe
Redactare proprie, conform programei:
- OMEC 6930/2025, MO 4 bis/2026, Informatică CS, p. 1632–1633 și 1653–1654; OMEC 4370/2026, anexa 8, p. 155–156; rocnee.eu
- OMEC 4370/2026, anexa 8, Informatică IX intensiv, p. 155–156
- OMEC 6930/2025, MO 4 bis/2026, Informatică CS, p. 1632–1633; rocnee.eu
- OMEC 6930/2025, anexa 66, Informatică IX CS militar, Monitorul Oficial nr. 4 bis/8.01.2026, pp. 2563–2578; cdn.edupedu.ro; centralizator oficial actualizat prin OMEC 3224/2026, legislatie.just.ro
- OMEC 6930/2025, MO 4 bis/2026, Informatică CS, p. 1653–1654; rocnee.eu
- OMECI 5099/2009, anexa 5, Informatică, p. 4–5, clasa X; plan de încadrare: OMECI 3410/2009, anexa 1, p. PDF 1–14; forum.isj.hd.edu.ro; filiera tehnologică: OMECI 3412/2009, anexa 2, tabel X, legislatie.just.ro
- OMECI 5099/2009, anexa 5, Informatică, p. 4–5, clasa X; rocnee.eu
- UNSTPB, Regulament admitere licență 2026, Anexa II-1.2 p. Anx II-14 și Anexa XI-3 p. Anx XI-6–7 (PDF p. 64, 120–121); admitere.pub.ro
- OMECTS 4800/2010, anexa 2, Informatică, p. 3 și 6; aplicabilitatea 2027: OMEC 5211/2026, art. 3 alin. (10); edu.ro
- OMECTS 4800/2010, anexa 2, Informatică, p. 3–4; edu.ro
- OMECTS 4800/2010, anexa 2, Informatică, p. 5–6; edu.ro
Documente consultate
- Programa școlară de informatică, clasa a IX-a, matematică-informatică (OMEC 6930/2025, anexa 42), p. 1632–1633; rocnee.eu
- Programa școlară de informatică, clasa a X-a (OMECI 5099/2009, anexa 5), CNCE, p. 4–5; rocnee.eu
- Programa de bacalaureat la informatică, matematică-informatică (anexa 2 la OMECTS 4800/2010), Ministerul Educației, p. 3–4; edu.ro
- UNSTPB, admitere 2026, anexa XI-3, p. Anx XI-6–7
- Python Software Foundation, Python Tutorial, capitolul 7.2 „Reading and Writing Files”, docs.python.org/3/tutorial/inputoutput.html
Desene: Redactare proprie (desen original), conform OMECI 5099/2009, Informatică X; rocnee.eu
