Professional Documents
Culture Documents
PR1 V8 Manipulisanje Fajlovima 2013 14
PR1 V8 Manipulisanje Fajlovima 2013 14
doc
Datum:29.04.2014
Vjebe 8
O klasama emo govoriti u okviru predmeta Programiranje II, ali za sada termin klasa
moete smatrati sinonimom za rije struktura (strukture smo obradili u jednom od
prethodnih materijala).
Programiranje I:: Vjebe
http://student.fit.ba/
ProgramiranjeI_sylabus.doc
Nakon kreiranja, objekat moramo asocirati sa odgovarajuim fajlom, te otvoriti taj fajl.
Kompletan proces asociranja i otvaranja fajla moemo obaviti koritenjem funkcije
open(). Prvi argument funkcije open() predstavlja naziv fajla sa kojim elimo
manipulisati:
upis.open("mojFajl.txt");
U prethodnom primjeru smo otvorili fajl pod nazivom mojFajl.txt, te samim tim izvrili
njegovo asocijaciranje sa objektom upis. Na jednostavniji i krai nain, prethodna dva
primjera (dvije linije koda) smo mogli napisati:
//kreiramo objekat upis, asociramo objekat sa fajlom, te automatski otvaramo fajl
ofstream upis("mojFajl.txt");
Bitno je napomenuti da, prilikom upisivanja sadraja, fajl ije smo ime kao argument
predali funkciji ne mora postojati. U sluaju da fajl ne postoji, on e biti automatski
kreiran. Nakon otvaranja, u fajl moemo upisati eljeni sadraj. Jedan od naina na koji
sadraj upisujemo u fajl je identian koritenju objekta cout<< tj. navedemo ime
objekta, znak redirekcije, te sadraj koji elimo upisati:
//imeObjekta<<"sadraj koji ce biti upisan u fajl";
upis<<"Ovo je tekst koji cemo upisati u fajl mojFajl.txt......\n";
upis<<"Fajl mojFajl.txt se nalazi u istom direktoriju kao i nas program.";
Asociranje fajla sa objektom se moe vriti navoenjem apsolutne ili relativne putanje do
fajla. Ukoliko se fajl nalazi u istom direktoriju kao i va program funkciji open() je
dovoljno predati samo ime fajla i njegovu ekstenziju. Narednim primjerom kreiramo fajl
mojFajl.txt i u njega upisujemo eljeni sadraj.
#include <iostream>
#include <fstream> //<-- nemojte zaboraviti ukljuciti fstream biblioteku
using namespace std;
void main() {
//kreiramo objekat tipa ofstrema koji se naziva upis
ofstream upis;
//pozivamo funkciju open() i predajemo joj relativnu putanju do fajla
upis.open("mojFajl.txt");
//navodimo tekst koji cemo upisati u fajl
upis<<"Ovo je tekst koji cemo upisati u fajl mojFajl.txt......\n";
upis<<"mojFajl.txt se nalazi u istom direktoriju kao i nas program";
//zatvaramo fajl
Programiranje I:: Vjebe
http://student.fit.ba/
ProgramiranjeI_sylabus.doc
upis.close();
system("pause");
}
U direktoriju ija je putanja prikazana, prethodni program je kreirao novi fajl pod
nazivom mojFajl.txt i u njega upisao navedeni tekst. Velika je vjerovatnoa da
navedena putanja nee odgovarati onoj na vaem raunaru, zato odvojite malo vremena
da pronaete fajl koji je kreiran prethodnim programom i pogledajte njegov sadraj1.
U sluaju da se fajl nalazi na nekoj drugoj lokaciji, argument funkcije mora biti apsolutna
putanja do fajla. Kao ilustraciju:
1. na lokalnom disku (C:\) kreirajte direktorij koji se naziva Programiranje1
2. unutar prethodno kreiranog direktorija kreirajte jo jedan direktorij koji se naziva
FileIO.
Nakon to ste kreirali direktorije, napravite sljedee izmjene (umjesto relativne navedite
apsolutnu pitanju do fajla), te ponovo pokrenite program:
//pozivamo funkciju open() i predajemo joj apsolutnu putanju do fajla
upis.open("C:\\Programiranje1\\FileIO\\mojFajl.txt");
Ukoliko ste pratili navedene korake vjerojatno ste primijetili da sadraj fajla nije ba
najtaniji pokazatelj trenutne lokacije naeg programa. Razlog tome je injenica da se
na
program
(.exe
fajl)
jo
uvijek
nalazi
na
lokaciji
C
C:\Users\Denis\Documents\visual studio 2013\Projects\FileIO\FileIO dok se
fajl u koji je upisan tekst nalazi u direktoriju C:\Programiranje1\FileIO.
Nakon zavretka rada, poeljno je da zatvorimo fajl. Ovaj postupak svakako treba
praktikovati kako bismo izbjegli nepotrebne komplikacije. Prije svega moe se desiti da,
nakon to smo zavrili rad s fajlom, neki drugi program ne bude u mogunosti pristupiti
fajlu. Zbog toga smo na kraju programa pozvali funkciju close(), te na taj nain
omoguili ponovno koritenje fajla. Nakon poziva funkcije close() kreirani objekat
(upis) moemo ponovo koristiti za rad sa nekim drugim fajlovima.
U prethodnom dijelu smo predstavili nain upisivanja sadraja u fajl. Meutim, kada
elimo itati sadraj fajla situacija je malo drugaija. Prije svega, za ispisivanje sadraja
fajla, potreban nam je objekat klase ifstream. Zatim, da bismo uitali odreeni sadraj,
fajl iz kojeg itamo mora postojati. Dakle, treba voditi rauna o sluajevima u kojima
1
Ukoliko koristite Visual Studio razvojno okruenje, najjednostavniji put da doete do fajla jeste da u okviru Solution Explorer-a napravite desni klik miem na
naziv projekta i odaberete opciju Open Folder in File Explorer
ProgramiranjeI_sylabus.doc
program nije u mogunosti otvoriti zahtijevani fajl (bilo da fajl ne postoji, da je oteen ili
da nemamo privilegije za pristup). Postoji jednostavan nain da provjerimo da li je na
fajl uspjeno otvoren, a to je koritenjem funkcije fail(). Pomenuta funkcija vraa
vrijednost true ukoliko postoji neki problem prilikom otvaranja fajla tj. vrijednost false
ukoliko je fajl uspjeno otvoren. Dakle, provjeru moemo vriti i na sljedei nain:
if(ispis.fail())//<--izmjene se odnose samo na provjeru uslova
cout<<"Greska: Nemoguce otvoriti zahtijevani fajl!\n";
else
cout<<"Otvaram sadrzaj fajla...\n";
Pojasnili smo nain na koji moemo upisivati neki sadraj u fajl, te provjeriti da li je fajl
uspjeno otvoren. U nastavku emo uraditi par primjera sa upisom i ispisom sadraja
fajla.
#include <iostream>
#include <fstream>
using namespace std;
void main(){
//naredne dvije linije daju isti rezultat
// char crt[] ="\n==============================================\n";
char * crt="\n==============================================\n";
//kreiramo objekat koji e omoguiti upis sadraja u fajl
//te ujedno otvaramo fajl mojFajl.txt
ofstream upis("mojFajl.txt");
//ako je dolo do greke pri otvaranju fajla, program ispisuje poruku
if(upis.fail())
cout<<"UPIS :: Greska: Nemoguce otvoriti fajl....\n";
else{
//naredni tekst upisujemo u fajl mojFajl.txt
upis<<crt<<"Univerzitet \"Dzemal Bijedic\""<<endl;
upis<<"Fakultet informacijskih tehnologija"<<endl;
upis<<"Sjeverni logor 12, Mostar"<<endl;
upis<<"Tel/Fax: +387 (0) 36 281 166"<<crt;
}
//upis je zavren, zatvaramo fajl
upis.close();
//**********************************************************
//kreiramo objekat za itanje - ispis sadraja fajla
ifstream ispis("mojFajl.txt");
if(ispis.fail())
cout<<"ISPIS :: Greska: Nemoguce otvoriti fajl....\n";
else{
//kreiramo varijablu koju emo koristiti u while petlji
char znak;
//sve dok u fajlu postoji sadraja,funkcija get() uzimaj znak po znak i
//smijesta ga u varijablu znak
while(ispis.get(znak))
cout<< znak;//ispisi trenutno ucitani znak
}
ispis.close();//kada je sadrzaj fajla ispisan, zatvaramo fajl
system("pause");
}
U prethodnom programu, vrili smo upis i ispis sadraja iz fajla koji se naziva
mojFajl.txt. Pomenuti fajl se nalazi u istom direktoriju kao i na program to moemo
zakljuiti na osnovu relativne putanje. Na poetku programa, koristei ofstream objekat
upis u fajl smo upisali osnovne informacije o naem Fakultetu, te odmah nakon toga
Programiranje I:: Vjebe
http://student.fit.ba/
ProgramiranjeI_sylabus.doc
zatvorili fajl. Nakon upisa, kreirali smo novi objekt ispis koji nam je omoguio da
ispiemo sadraj fajla. Jedina novina u prethodnom programu jeste koritenje funkcije
get(). Naime, pri svakom izvrenju while petlje funkcija get() iz fajla uzima naredni
karakter i pohranjuje ga u varijablu znak koja je funkciji predata kao argument. Nakon
uitavanja, vrijednost varijable znak se ispisuje. Ukratko, petlja while e se ponavljati
sve dok funkcija get() iitava znakove, odnosno sve dok u fajlu postoji neki sadraj.
Zbog jednostavnije manipulacije, relativnu ili apsolutnu putanju do fajla je poeljno
pohraniti u jednu varijablu (niz karaktera) te koristiti kao argument prilikom asociranja
objekta sa fajlom.
void main(){
//.....
char * nazivFajla = "mojFajl.txt";
//.....
ofstream upis(nazivFajla);
//.....
ifstream ispis(nazivFajla);
//.....
}
Pored koritenja jednog karaktera, ispis sadraja nekog fajla moemo izvriti koristei
nizove karaktera to je predstavljeno u narednom primjeru:
#include <iostream>
#include <fstream>
using namespace std;
//u ovom primjeru crt smo deklarisali kao globalnu varijablu (pokazivac)
char * crt="==============================================\n";
void main(){
const int max=100;
//kreiramo niz od 100 karaktera u koji emo pohraniti
//jedan red sadraja fajla
char jedanRed[max];
char * nazivFajla = "mojFajl.txt";
ofstream upis(nazivFajla);
if(upis.fail())
cout<<"Greska: Nemoguce otvoriti fajl....\n";
else
//u fajl upisujemo dva reda teksta: crtice i FIT
upis<<crt<<"Fakultet informacijskih tehnologija";
upis.close();
ifstream ispis(nazivFajla);
//iz fajla iscitavamo prvi red teksta i upisujemo u niz jedanRed
ispis.getline(jedanRed,max);
//ispisujemo sadraj niza
cout<<jedanRed<<endl;
//iz fajla iscitavamo drugi red teksta i upisujemo u niz jedanRed
ispis.getline(jedanRed,max);
//ispisujemo sadraj niza
cout<<jedanRed<<endl;
ispis.close();
system("pause");
}
5
Programiranje I:: Vjebe
http://student.fit.ba/
ProgramiranjeI_sylabus.doc
100) i upisuje ih u niz koji je naveden kao prvi argument (jedanRed). Nakon toga,
program ispisuje sadraj niza. Opisanu proceduru morali smo izvriti za svaki red teksta
koji se nalazi unutar fajla.
Koritenjem funkcije eof() end of file prethodni program moemo uiniti kraim i
itljivijim. Funkciju eof() najee koristimo u kombinaciji sa nekom od petlji (pri
provjeri uslova) koja treba da se izvrava sve dok unutar fajla postoji odreeni sadraj. U
prethodnom programu napravite sljedee izmjene.
ifstream ispis(nazivFajla);
while(!ispis.eof()){//sve do kraja fajla
//preuzimaj po jedan red teksta i pohrani ga u niz jedanRed
ispis.getline(jedanRed,max);
//ispii sadraj niza
cout<<jedanRed<<endl;
}
ispis.close();
U narednom programu korisniku smo omoguili da definie naziv fajla kao i sadraj koji u
njega eli pohraniti. Nakon unosa, program treba da ispie sadraj fajla. Ako ste paljivo
itali prethodni dio materijala trebalo biste biti u stanju samostalno napraviti ovaj
program.
#include <iostream>
#include <fstream>
using namespace std;
char * crt ="\n===============================================\n";
void main(){
const int maxTekst=200;
const int maxFajl=30;
char tekst[maxTekst];
char nazivFajla[maxFajl];
cout<<crt<<"\t\tFile I/O"<<crt;
cout<<"Unesite naziv fajla i njegovu ekstenziju: ";
cin.getline(nazivFajla,maxFajl);
ofstream upis(nazivFajla);
if(upis.fail())
cout<<crt<<"Greska prilikom otvaranja fajla!"<<crt;
else{
cout<<crt<<"Unesite sadrzaj fajla: ";
cin.getline(tekst,maxTekst);
upis<<crt<<tekst<<crt;
}
upis.close();
system("cls");
ifstream ispis(nazivFajla);
if(ispis.fail())
cout<<crt<<"Greska prilikom otvaranja fajla!"<<crt;
else{
char znak;
cout<<crt<<"FAJL:\t"<<nazivFajla<<crt;
Programiranje I:: Vjebe
http://student.fit.ba/
ProgramiranjeI_sylabus.doc
cout<<"SADRZAJ: ";
while(ispis.get(znak))
cout<<znak;
}
ispis.close();
system("pause");
}
Ono to ste vjerovatno primjetili u prethodnim primjerima jeste injenica da ukoliko dva
puta pokrenete program i unesete isto ime fajla, a razliit tekst, u fajlu e ostati zapisan
(sauvan) samo posljednje uneseni tekst. Razlog tome je injenica da se svakim novim
pokretanjem programa stari sadraj fajla prepisuje. Upravo u ovakvim sluajevima je
potrebno koristiti odgovarajue modove koji omoguavaju definisanje dodatnih postavki
prilikom rada sa fajlovima. U okviru ovog materijala opisati emo neke od najee
koritenih modova, a to su:
MOD
ios::in
ios::out
ios::app
ios::ate
ios::trunc
ios::_Nocreate
ios::binary
OPIS
Otvara fajl za itanje
Otvara fajl za pisanje i brie zateeni sadraj
Novi sadraj dodaje na kraj fajla
Otvara fajl i pomjera pokaziva na kraj fajla
Ako fajl postoji, njegov sadraj se odbacuje brie
Zahtijevani fajl mora postojati (nee biti automatski kreiran)
Otvara fajl u binarnom modu (podaci se ne prevode)
Prikazane modove navodimo unutar funkcije open(), odmah nakon naziva fajla. U
prethodnom primjeru izmijenite sljedeu liniju koda i ponovo pokrenite program.
//ostatak programa ostaje isti
ofstream upis(nazivFajla, ios::app); //<--dodajte mod
if(upis.fail())
cout<<crt<<"Greska prilikom otvaranja fajla!"<<crt;
Program pokrenite dva puta i svaki puta navedite isti naziv fajla, ali unesite razliit tekst.
Primjeujete da se napravljenim izmjenama (koritenjem moda ios::app) novi sadraj
dodaje na kraj fajla, pri emu prethodni sadraj fajla ostaje nepromijenjen.
Bitno je znati da su neki od pomenutih modova podrazumijevani tj. defaultni. Za
ofstream objekte defaultni mod je ios::out, dok je za ifstream objekte defaultni mod
ios::in.
ofstream upis;
//zato to ofstream objekti imaju defaultni mod ios::out naredne dvije linije imaju
//isto znaenje
upis.open(nazivFajla);
upis.open(nazivFajla, ios::out);
Prilikom otvaranja fajla moemo koristiti vie modova koje moramo razdvojiti koristei
znak pipe (|). Pogledajte sljedei primjer:
//izmedju modova koristimo znak pipe (|)
upis.open(nazivFajla, ios::out | ios::app);
Pored navedenih, postoji i fstream klasa iji objekti imaju dva defaultna moda: ios::in i
ios::out. Na osnovu toga moemo zakljuiti da se objekti tipa fstream mogu koristiti za
7
Programiranje I:: Vjebe
http://student.fit.ba/
ProgramiranjeI_sylabus.doc
OPIS
seekg()
tellg()
seekp()
tellp()
Naredni primjer ilustruje nain koritenja funkcija za pomijeranje pokazivaa unutar fajla.
Poto smo u prethodnom primjeru kreirali fajl mojFajl.txt i u njega upisali:Fakultet
informacijskih tehnologija::www.fit.ba, sada emo korisniku dati mogunost da
odredi lokaciju od koje e se ispisati sadraj fajla. Pogledajte sljedei primjer:
#include <iostream>
#include <fstream>
using namespace std;
void main(){
8
Programiranje I:: Vjebe
http://student.fit.ba/
ProgramiranjeI_sylabus.doc
int brojMjesta=0;
char znak;
char * nazivFajla = "mojFajl.txt";
ifstream ispis(nazivFajla);
if(ispis.fail())
cout<<"Greka prilikom otvaranja fajla."<<endl;
else{
cout<<"Za koliko mjesta zelite pomjeriti pokazivac: ";
cin>>brojMjesta;
// pomijeramo pokaziva za eljeni broj mjesta
ispis.seekg(brojMjesta);
while(ispis.get(znak)){
//oitavamo trenutnu lokaciju pokazivaa koristei
//funkciju tellg()
cout<<"\nPokazivaca je na lokaciji: "<<ispis.tellg();
cout<<" a tu se nalazi znak :"<<znak;
}
}
ispis.close();
cout<<endl;
system("pause");
}
Ukoliko prethodni program elite uiniti modularnijim, aktivnosti ispisa moete prepustiti
nekoj od funkcija npr. funkciji Prikazi:
#include <iostream>
#include <fstream>
using namespace std;
//funkcija prikazi kao argument prima referencu na objekat tipa ifstream
void Prikazi (ifstream & ispis){
int brojMjesta=0;
char znak;
cout<<"Za koliko mjesta zelite pomjeriti pokazivac: ";
cin>>brojMjesta;
ispis.seekg(brojMjesta);
while(ispis.get(znak)){
cout<<"\nPokazivaca je na lokaciji: "<<ispis.tellg();
cout<<" a tu je znak :"<<znak;
}
}
void main(){
char * nazivFajla = "mojFajl.txt";
ifstream ispis(nazivFajla);
if(ispis.fail())
cout<<"Greka prilikom otvaranja fajla."<<endl;
else
Prikazi(ispis);
ispis.close();
system("pause");
}
U nekim sluajevima e nam biti potrebna informacija o tome je li neki fajl otvoren ili
zatvoren. Pomenutu dilemu rjeavamo koritenjem funkcije is_open(). Ukoliko je fajl
otvoren funkcija vraa vrijednost true, a u suprotnom funkcija vraa false
#include <iostream>
#include <fstream>
using namespace std;
9
Programiranje I:: Vjebe
http://student.fit.ba/
ProgramiranjeI_sylabus.doc
char * crt="\n============================\n";
void main(){
ofstream upis("mojFajl.txt");
cout<<crt<<"Otvaram fajl....."<<crt;
if(upis.is_open())
cout<<"Fajl je otvoren"<<crt;
else
cout<<"Fajl je zatvoren";
cout<<"Zatvaram fajl....."<<crt;
upis.close();
if(upis.is_open())
cout<<"Fajl je otvoren"<<crt;
else
cout<<"Fajl je zatvoren"<<crt;
system("pause");
}
10
Programiranje I:: Vjebe
http://student.fit.ba/
ProgramiranjeI_sylabus.doc
11
Programiranje I:: Vjebe
http://student.fit.ba/
ProgramiranjeI_sylabus.doc
Pokrenite prethodni program, unesite vae podatke i naziv fajla (npr. mojiPodaci.bin).
Nakon toga pronaite fajl koji ste kreirali i vidjeti ete da njegov sadraj nije u potpunosti
razumljiv (fajl pokuajte otvoriti unutar Visual Studio-a).
Poto do sada nismo govorili o koritenju read() i write() funkcija u nastavku emo ih
ukratko predstaviti. Vidjeli smo da obje funkcije primaju dva argumenta. Prvi argument
je pokaziva (tipa char) na lokaciju iz koje itamo ili u koju upisujemo odreeni sadraj.
U prethodnom programu kod funkcije write() kao prvi argument smo naveli pokaziva
(char *) na objekat student1. Jednostavno moemo rei da prvi argument funkcije
write() oznaava lokaciju od koje funkcija treba da zapone upisivanje podataka u fajl.
Broj bajta koje planiramo upisati je definisan drugim argumentom funkcije (za
odreivanje broja bajta koristili smo sizeof() funkciju). Dakle, funkciji write() moramo
naznaiti odakle i koliko podataka treba upisati u fajl. Na identian nain se koristi i
funkcija read().
upis.write((char*)(&student1),sizeof(student1));
12
ProgramiranjeI_sylabus.doc
char tekst[max];
ofstream upis(nazivFajla);
if(upis.fail())
cout<<crt<<poruka_o_gresci<<crt;
else{
cout<<"Unesite tekst: ";
cin.getline(tekst,max);
upis<<tekst;
cout<<crt<<"Sadrzaj upisan u fajl!"<<crt;
}
upis.close();
}
void PrikazSadrzaja(const char * nazivFajla){
cout<<crt<<"\t\t::PRIKAZ SADRZAJA::"<<crt;
char znak;
//zahtjevani fajl mora postojati jer koristimo ios::_Nocreate mod
ifstream ispis(nazivFajla, ios::in | ios::_Nocreate);
if(ispis.fail())
cout<<crt<<poruka_o_gresci<<crt;
else{
cout<<crt<<"FAJL: "<<nazivFajla<<crt<<"SADRZAJ:"<<crt;
while(ispis.get(znak))
cout<<znak;
cout<<crt<<"Sadrzaj fajla prikazan!"<<crt;
}
ispis.close();
}
void DodavanjeSadrzaja(const char * nazivFajla){
cout<<crt<<"\t\t::DODAVANJE SADRZAJA::"<<crt;
const int max = 200;
char noviTekst[max];
//fajl mora postojati - ios::_Nocreate
//novi sadrzaj ce biti dodat na kraj fajla - ios::app
ofstream upis(nazivFajla, ios::app | ios::_Nocreate);
if(upis.fail())
cout<<crt<<poruka_o_gresci<<crt;
else{
cout<<"Unesite tekst koji zelite dodati: ";
cin.getline(noviTekst,max);
upis<<endl<<noviTekst<<endl;
cout<<crt<<"Novi sadrzaj uspjesno dodat."<<endl;
}
upis.close();
}
void KopiranjeSadrzaja(const char * nazivFajla){
cout<<crt<<"\t\t::KOPIRANJE SADRZAJA::"<<crt;
const int max = 30;
char nazivNovogFajla[max];
char znak;
cout<<"Unesite ime fajla u koji zelite kopirati sadrzaj: ";
cin.getline(nazivNovogFajla,max);
//otvaramo fajl odakle kopiramo
ifstream ispis(nazivFajla, ios::in | ios::_Nocreate);
//otvaramo fajl gdje kopiramo
ofstream upis(nazivNovogFajla,ios::app);
if(!ispis.fail()){//provjeravmo validnost izvornog fajla
if(!upis.fail()){//provjeravmo validnost destinacijskog fajla
while(ispis.get(znak))//uzimamo naredni karakter
upis<<znak;//i upisujemo ga u destinacijski fajl
cout<<crt<<"Sadrzaj fajla: "<<nazivFajla;
cout<<" uspjesno dodat fajlu: "<<nazivNovogFajla<<crt;
Programiranje I:: Vjebe
http://student.fit.ba/
13
ProgramiranjeI_sylabus.doc
}
else
cout<<crt<<"Destinacijski::"<<poruka_o_gresci<<crt;
}
else
cout<<crt<<"Izborni::"<<poruka_o_gresci<<crt;
ispis.close();
upis.close();
}
int VelicinaFajla(const char * nazivFajla){
cout<<crt<<"\t\t::VELICINA FAJLA::"<<crt;
ifstream ispis(nazivFajla);
if(!ispis.fail()){
//pomijeramo pokaziva na kraj fajla
ispis.seekg(0,ios::end);
//oitavamo poziciju pokazivaa, sto predstavlja broj bajta
int velicina = ispis.tellg();
cout<<"Velicina fajla je: "<<velicina<<" bajta."<<crt;
ispis.close();
return velicina;
}else
cout<<crt<<poruka_o_gresci<<crt;
return -1;
}
void PretragaSadrzajaKarakter(const char * nazivFajla){
cout<<crt<<"\t\t::PRETRAGA::"<<crt;
char znak, trazeni;
int ukupno=0, pronadjeno=0;
ifstream ispis(nazivFajla);
cout<<"Unesite znak koji trazite: ";
cin>>trazeni;
cin.ignore(100,'\n');
if(!ispis.fail()){
while(ispis.get(znak)){
if(znak==trazeni)
pronadjeno++;
ukupno++;
}
cout<<crt<<"Fajl "<<nazivFajla<<" ima ukupno ";
cout<<ukupno<<" znakova.";
cout<<crt<<"Znak '"<<trazeni<<"' se nalazi na ";
cout<<pronadjeno<<" mjesta.";
}
else
cout<<crt<<poruka_o_gresci<<crt;
ispis.close();
}
void PretragaSadrzajaRijec(const char * nazivFajla){
//ZA
//1.
//2.
//3.
//
VJEZBU
sadrzaj fajla ucitati u niz alociran u dinamickoj memoriji
korisniku omoguciti da unese rijec koju trazi
izvrsiti pretragu ucitanog sadrzaja fajla (niza),
te o rezulatima pretrage obavijestiti korisnika
}
void BrisanjeSadrzaja(const char * nazivFajla){
cout<<crt<<"\t\t::BRISANJE SADRZAJA::"<<crt;
ofstream ispis(nazivFajla, ios::trunc);
//isto bismo postigli da smo umjesto ios::trunc napisali ios::out
if(!ispis.fail())
cout<<crt<<"Sadrzaj fajla "<<nazivFajla<<" obrisan!"<<crt;
else
Programiranje I:: Vjebe
http://student.fit.ba/
14
ProgramiranjeI_sylabus.doc
cout<<crt<<poruka_o_gresci<<crt;
}
//da li je izbor trebao biti povratna vrijednost?
void prikaziMeni(int & izbor){
do{
cout<<crt<<"\t\t::MANIPULISANJE FAJLOVIMA::"<<crt;
cout<<"1. Upisi sadrzaj u fajl. "<<endl;
cout<<"2. Prikazi sadrzaj fajla. "<<endl;
cout<<"3. Dodaj novi sadrzaj fajlu. "<<endl;
cout<<"4. Kopiraj sadrzaj fajla u drugi fajl. "<<endl;
cout<<"5. Pretrazuj sadrzaj fajla (karakter). "<<endl;
cout<<"6. Pretrazuj sadrzaj fajla (rijec). "<<endl;
cout<<"7. Prikazi velicinu fajla. "<<endl;
cout<<"8. Brisi sadrzaj fajla. "<<endl;
cout<<"9. Rad sa novim fajlom. "<<endl;
cout<<"10. Izadji iz programa. "<<crt;
cout<<"Unesite vas izbor: ";
cin>>izbor;
cin.ignore();
system("cls");
}while(izbor<1 || izbor>10);
}
void main(){
int izbor = 1;
const int max = 30;
char nazivFajla[max];
do{
cout<<crt<<"\t\t::MANIPULISANJE FAJLOVIMA::"<<crt;
cout<<"Unesite ime fajla i ekstenziju: ";
cin.getline(nazivFajla,max);
do{
prikaziMeni(izbor);
switch(izbor){
case 1:
UnosSadrzaja(nazivFajla);break;
case 2:
PrikazSadrzaja(nazivFajla);
break;
case 3:
DodavanjeSadrzaja(nazivFajla);break;
case 4:
KopiranjeSadrzaja(nazivFajla);break;
case 5:
PretragaSadrzajaKarakter(nazivFajla);break;
case 6:
PretragaSadrzajaRijec(nazivFajla); break;
case 7:
VelicinaFajla(nazivFajla); break;
case 8:
BrisanjeSadrzaja(nazivFajla); break;
}
}while(izbor!=9 && izbor!=10);
}while(izbor!=10);
system("pause");
}
15
Programiranje I:: Vjebe
http://student.fit.ba/