• 5 odgovora
  • 5.129 pregleda
Cuvanje asocijativnih sablona u fajl? 21.06.2003. u 14:16 · pre 284 meseci #1
Napravio sam program za cuvanje spiska alata. Kada sam mu stavio da upisuje i cita iz fajla on nikako nije citao te podatke. Inace sam koristio asocijativni sablon map.
Da li ja mogu da upisujem u fajl (objekat map<string, Alat> PrvaPolica)sa komandama

if (!izbor1)
{
ofstream fout("PAlati", ios::binary);
fout.write((char*)& PrvaPolica, sizeof PrvaPolica);
fout.close();
}
i citam sa

ifstream fin("PAlati", ios::binary);
if (fin.good())
{
fin.seekg (0, ios::end);
duzina = fin.tellg();
fin.seekg (0, ios::beg);
fin.read((char*)& PrvaPolica, EOF);
fin.close();
}
else
fin.close();
Citav izvorni fajl sam vam ostavio ako zelite da ga vidite. Bez ucitavanja iz fajla sve lepo radi ali dzaba ako kada gasnem program mora sve iz pocetka.
P.S. Kako bih mogao da izbrisem prethodne poruke sa ekrana?
Potpis
Ken Thompson has an automobile which he helped design. Unlike most automobiles, it has neither speedometer, nor gas gauge, nor any of the other numerous idiot lights which plague the modern driver. Rather, if the driver makes a mistake, a giant “?” lights up in the center of the dashboard. “The experienced driver,” says Thompson, “will usually know what’s wrong.”
Re: Cuvanje asocijativnih sablona u fajl? 21.06.2003. u 16:47 · pre 284 meseci #2
Malo si pogrešno shvatio šta je C++ — on samo omogućava, a ne implementira sve.

Za ovaj posao tvoje „rešenje“ nikako ne valja, i kosi se sa osnovnim principima OOP-a.

Ono što ti treba da uradiš je sledeće:
— napraviš funkciju za upis podataka u fajl (možda iskoristiš i operator<< za ostream).
— napraviš funkciju za čitanje podataka iz fajla (možda iskoristiš i operator>> za istream).

I zatim podatke čitaš i pišeš pomoću „fout << PrvaPolica“, tj. „fin >> PrvaPolica“.
Potpis
Možda se moje mišljenje promenilo, ali ne i činjenica da sam u pravu.
Re: Cuvanje asocijativnih sablona u fajl? 22.06.2003. u 17:25 · pre 284 meseci #3
Hvala ti sto si mi ukazao na moju gresku sto se tice OOP, ali ipak ne svatam kako da uradim upisivanje
u fajl sa operatorom >> ili sa nekom zasebnom funkcijom, ali ne znam sta bi u njoj zapisao.
Imam pitanje i u vezi iteratora jer ne svatam njihovu strukturu. Oni su objekti koji pokazuju na druge objekte. Da li oni pokazuju na instancu
(map <string, Alat>) sablonske klase ili na neki drugi objekat, jer ne znam kako bi mogao da napravim funkciju koja bi mi ispisivala sve alate koji se nalaze na spisku.
P.S. Napomenite mi ako nesto dobro nisam razumeo.
Potpis
Ken Thompson has an automobile which he helped design. Unlike most automobiles, it has neither speedometer, nor gas gauge, nor any of the other numerous idiot lights which plague the modern driver. Rather, if the driver makes a mistake, a giant “?” lights up in the center of the dashboard. “The experienced driver,” says Thompson, “will usually know what’s wrong.”
Re: Cuvanje asocijativnih sablona u fajl? 22.06.2003. u 19:41 · pre 284 meseci #4
To sto si sada opisao je problem serijalizacije:

PAlat sadrzi brojne pointere, sto na stringove, sto na Alate, znaci ne mozes da ga prosto dumpujes na disk. Moras da rucno prodjes kroz niz svih (string, Alat) parova i da ih snimis na odgovarajuci nacin. Verovatno i Alat sadrzi neke pointere koje ces morati da nekako snimis. Znaci pseudokod bi izgledao ovako:

foreach string Key in PAlat.Keys
{
Save(Key);
Save(PAlat[Key]);
}

Re: Cuvanje asocijativnih sablona u fajl? 22.06.2003. u 20:08 · pre 284 meseci #5
Svatio sam kako rade iteratori i funkciju za ispisivanje sam napravio veoma jednostavno
void PokaziSveAlate(const ZbirkaAlata& Polica)
{
for (ZbirkaAlata::const_iterator ci=Polica.begin(); ci != Polica.end();ci++)
cout << (*ci).second;
}
Naravno moram da napravim i
ostream& operator << (ostream& out, const Alat& Alat)
{
out <<"<"<< Alat.iIme() <<">\t\t\t\t\t\t\t<"<< Alat.iKolicina() <<">\t<"<< Alat.iCena() <<">"<<endl;
return cout;
}
Potpis
Ken Thompson has an automobile which he helped design. Unlike most automobiles, it has neither speedometer, nor gas gauge, nor any of the other numerous idiot lights which plague the modern driver. Rather, if the driver makes a mistake, a giant “?” lights up in the center of the dashboard. “The experienced driver,” says Thompson, “will usually know what’s wrong.”
Re: Cuvanje asocijativnih sablona u fajl? 30.06.2003. u 07:44 · pre 283 meseci #6
Uspeo sam da resim problem na lak nacin. Tako da cu ostaviti ovde ako neko bude imao slican problem.
Potpis
Ken Thompson has an automobile which he helped design. Unlike most automobiles, it has neither speedometer, nor gas gauge, nor any of the other numerous idiot lights which plague the modern driver. Rather, if the driver makes a mistake, a giant “?” lights up in the center of the dashboard. “The experienced driver,” says Thompson, “will usually know what’s wrong.”
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme