Un fier este o colecie de date indicat printr-un nume i o extensie. Numele
este desparit de extensie prin punct. Avantajul lucrului cu fisiere este evident, datele rezultate n urma execuiei unui program putnd fi salvate. n esen, exist doua tipuri de fsiere: fisiere text si fisiere binare. Un fier text conine text ci!re si caractere" iar un fsier #inar poate conine si imagini, baze de date, etc. Vom studia lucru cu fisere text. $entru lucrul cu fiere text in C++ se adau% o #i#liotec standard si anume &!stream.'(. )ceast #i#liotec lucreaz cu *uxuri stream-uri) : ifstream flux de intrare ofstream flux de iesire fstream are ambele caracteristici ifstream si ofstream) +preaiile care se e!ectueaz, n %eneral, cu fsiere text sunt: - desc!idrea unui fisier text - "nc!iderea unui fisier text - citirea datelor dintr-un fisier text - scrierea datelor intr-un fisier text - adu%area datelor ntr-un fier text $entru o mai #un nele%ere ne propunem s exemplifcm rezol,area urmtoarei situaii: Fie fierul text fs.in n care sunt scrise numere pe mai multe rnduri. Se cere: - citirea datelor din fierul text ntr-un vector si afarea lor - scrirea datelor citite in fisierul text fis.out; - adugarea datelor citite anterior in acelai fier fs.out $entru aceasta ,om parcur%e urmtoarele etape: #. $%&'(#$%)%A *+*# ,#&#%) -%.- $entru a putea e!ectua operaii cu un fier text acesta tre#uie mai int-i desc'is. Astfel se pot folosi unul din obiectele ifstreampentru citire) sau ofstrempentru scriere) din/"n fisier. ifstream f0fis.in0)1 //s-a desc!is fisierul pentru citire &A* fstream f0fis.in0,ios::in)1 //2i a2a s-a desc!is fisierul pentru citire ofstream f0fis.in0)1 //s-a desc!is fisierul pentru scriere &A* fstream f0fis.in0,ios::out)1 //s-a desc!is fisierul pentru scriere fstream f0fis.in0,ios::app)1 // s-a desc'is fsierul pentru adu%are ##. 3+'(#$%)%A *+*# ,#&#%) -%.- .e realizeaz cu a/utolul !unciei: f.close)1 ###. '#-#)%A $A-%45) $#+-)-*+ ,#&#%) -%.- 0om !olosi ast!el urmtoarea sec,en de pro%ram: 6include7iostream.!8 6include7fstream.!8 6include7conio.!8 void main) 9 clrscr)1 int v:;<<=,i><,j><,n1 fstream f0fis.in0, ios::in)1 //s-a desc!is fisierul pentru citire 11o alt ,arianta ar f !ost: ifstream f0fis.in0)1 ?!ile@f.eof)) // ct timp nu s-a a/uns la s!-ritul fsierului text 9 iAA1 f88v:i=1 //se citeste din fisier caracter cu caracter jAA1 B fori>;1i7j1iAA) cout77v:i=770 01 11 se afeaz fecare element din ,ector f.close)1 // se "nc!ide fisierul getc!e)1 B 5bs: 'itirea datelor s-a !cut ntr-un vector, dintr-un fisier text in care se aflau numere scrire pe mai multe rnduri. #V. &')#%)%A $A-%45) #+-)-*+ ,#&#%) -%.- Fisierul n care dorim s scriem textul ,a f suprascrie la fecare execuie a programului. &ecvena de pro%ram este urmtoarea: 6include7iostream.!8 6include7fstream.!8 6include7conio.!8 void main) 9 clrscr)1 int v:;<<=,i><,j><,n1 fstream f0fis.in0, ios::out)1 //s-a desc!is fisierul pentru scriere 11o alt ,arianta ar f !ost: ofstream g0fis.out0)1 fori>;1i7j1iAA) g77v:i=1 11 se scrie din ,ector in fier g.close)1 // se "nc!ide fisierul getc!e)1 B V. )23U4)56) 2)768+5 N75-UN F9:965 76;7 .ec,ena de pro%ram este urmtoarea: 6include7iostream.!8 6include7fstream.!8 6include7conio.!8 void main) 9 clrscr)1 int v:;<<=,i><,j><,n1 fstream !0fis.out0,ios::app)1 //s-a desc!is fisierul pentru adaugare fori>;1i7j1iAA) !77v:i=1 11 se scrieadau%a" din ,ector in fier !.close)1 // se "nc!ide fisierul getc!e)1 B In CodeBlocks cand creati voi proiectul, pe langa programul main.cpp, trebuie sa adaugati un fisier pentru datele de intrare. Acest lucru se face astfel: click pe File -> Ne-> !mpt" file si apoi il denumiti asa cum doriti . Acest nume trebuie scris intre g#ilimele in comanda de desc#idere de fisier. In fisierul te$t voi trebuie sa scrieti datele de intrare. %bs. Fisierul cu datele de intrare se poate crea si cu Notepadul apoi il adaugati la proiectul din CodeBlocks. Fi&ierele de ie&ire se creea'( singure prin program. )e pute*i vi'uali'a &i +nafara la CodeBlocks cu Notepad-ul. ,roblema - &e citesc dintr-un fi2ier text un numCr n scris pe primul rnd, apoi n numere naturale scrise pe rndurile urmCtoare. Afi2aDi suma celor n numere. 6include 7iostream8 6 include 7fstream8 using namespace std1 int main) 9int n,v:;<<=,i,s><1 ifstream f0date.in0)1 f88n1 fori><1i7n1iAA) 9 f88v:i=1 s>sAv:i=1 B f.close)1 cout770suma numerelor este 077s1 return <1 B ,roblema . // &e da un fisier text dateE.in care contine pe prima linie un numar natural n, // iar pe a doua linie are n numere naturale. &a se citeasca cele n numere apoi scrieti // in fisierul text de iesire dateE.out toate numerele pare si in fisierul de iesire dateF.out // toate numerele impare. // 4a sfarsit desc!ideti fisierele de iesire si afisati pe ecran pe primul rand toate numerele pare // si pe al doilea rand numerele impare. 6include 7iostream8 6include 7fstream8 int main) 9int n,i,x1 ifstream f0dateE.in0) 1 f88n1 ofstream g0dateE.out0)1 ofstream !0dateF.out0)1 fori><1i7n1iAA) 9 f88x1 ifxGE>><) g77x770 01 else !77x770 01 B f.close)1 g.close)1 // pentru a salva datele scrise in fisierul de iesire si acesta trebuie inc!is !.close)1 ifstream H0dateE.out0)1 // se desc!id pentru citire date ifstream l0dateF.out0)1 H88x1 ?!ile@H.eof)) 9 cout77x770 01 H88x1B //$eoarece nu stim cate numere pare contine fisierul g // folosim ?!ile-ul cu eof care depisteaza cand s-a ajuns la sfarsitul fisierului text cout77endl1 // pentru a trece pe randul urmator ?!ile@l.eof)) 9l88x1 cout77x770 01B //5I&%)VA-# 'A *4-#J*4 +*JA) &% $*I4%AKA $A'A/ +* ,545&%&' VA)#A+-A $% 4A +*J%)%4% LA)% @@@ A+A4#KA-# $% '% M@ return <1 B /em( ;. &e dC un fi2ier text date.in care conDine pe primul rnd un numCr natural n iar pe al doilea rnd sunt n numere naturale. &C se scrie in fisierul text de iesire pe douC rnduri mesajele: ;. sunt N. numere pare E. sunt N. numere impare #n locul punctelor scrieDi numCrul de numere pare 2i numCrul de numere impare %xemplu: fi2ierul de intrare conDine O P Q ; EF ;R S EE T SS fi2ierul de ie2ire va conDine ;. sunt T numere pare E. sunt S numere impare E. &e dC un fi2ier date.in cu numere intregi. 5bs. +u se 2tie cte numere sunt) &e cite2te de la tastaturC un numCr natural x. &C se scrie "ntr-un fi2ier de ie2ire date.out toate numerele divizibile cu numCrul x. %xemplu: FP SS T PP SR EQ ;< ;R EF ES TT x>P ,isierul de ie2ire va conDine pe primul rnd textul : +umere divizibile cu P sunt: iar pe al doilea rnd : FP PP SR ;R ES