Forum » Programiranje » [C++] Iskanje po datoteki, premik datotečnega kazalca nazaj
[C++] Iskanje po datoteki, premik datotečnega kazalca nazaj
golobich ::
Pozdravljeni.
Namreč imam nalogo narediti iskanje po datoteki in potem da se številka uporabnika oz. stranke poveča za 1 če jo program seveda najde v beležnici.
Uspelo mi je napisat naslednje
Ta program sedaj vpiše osebo oz. stranko v beležnico in zna tudi preverit ali je stranka ki jo mi vpišemo že zapisana.
Sedaj me zanima kako bi naredili naslednje:
Dodamo novo stranko: Tadej Golobic
v beležnici se zapiše Tadej Golobic;0
potem damo naslednje:
Poišči stranko: Tadej Golobic
sedaj bi pa rad da če najde zgoraj vneseno osebo da se v beležnici napiše Tadej Golobic;1
se pravi za vsakič ko poiščeš osebo da se tisti števec na koncu poveča za ena.
Hvala za pomoč!
Lp Tadej ;)
Namreč imam nalogo narediti iskanje po datoteki in potem da se številka uporabnika oz. stranke poveča za 1 če jo program seveda najde v beležnici.
Uspelo mi je napisat naslednje
#include <iostream> #include <string> #include <fstream> using namespace std; string POT = "D:\\testneDatoteke\\baza.txt"; void nova_stranka () { fflush (stdin); ofstream pisi (POT.c_str(), ios::app); if (pisi.is_open() ) { string podatki; cout<<"Vnesi ime in priimek: "; getline (cin, podatki); pisi<<podatki<<";"<<0<<endl; pisi.close(); }else { cout<<"Napaka pri odpiranju datoteke!"<<endl; } system ("cls"); } void poisci () { fflush (stdin); bool najdeno = false; string podatki; int stevilka=0; cout<<"Vnesi ime in priimek stranke: "; getline (cin, podatki); ifstream beri (POT.c_str()); ofstream pisi (POT.c_str(), ios::app); if (beri.is_open() ) { while (! beri.eof() ) { string vrstica = ""; string obisk = ""; getline (beri, vrstica, ';'); beri >> stevilka; // tu moraš obvezno prebrat še preostli del vrstice int pozicija = vrstica.find(podatki); if(pozicija >= 0) { najdeno = true; //cout << "Našel " << vrstica << endl; if(stevilka == 10) { cout << "Stranka " << vrstica << " ima zastonj striženje." << endl; } } //else //{ // cout << "Nisem našel" << endl; //} /*if (podatki.length() == vrstica.length() ) { for (int i=0; i<vrstica.length(); i++) { if (podatki[i]!=vrstica[i]) { najdeno=false; break; } } if (najdeno==true) { getline (beri, obisk); int st_obiskov=obisk.length(); if (st_obiskov%10==0) { cout<<"Zastonj strizenje!"; } pisi<<"x"; }else { cout<<"Stranke ni v bazi!"<<endl; } }else { cout<<"Stranke ni v bazi!"<<endl; }*/ } if(najdeno) { cout << "Najdeno" << endl; } else { cout << "Ni najdeno" << endl; - Skrij citirano besedilo - } beri.close(); pisi.close(); }else { cout<<"Napaka pri odpiranju datoteke!"<<endl; } } int main () { fflush (stdin); int x; for (int i=0; ; i++) { cout<<"**************************************"<<endl; cout<<"* FRIZER ~ stranke *"<<endl; cout<<"* *"<<endl; cout<<"* Copyrightˆ Tadej Golobic, 2010 *"<<endl; cout<<"**************************************"<<endl; cout<<endl; cout<<"\t*********************"<<endl; cout<<"\t*1. Dodaj stranko *"<<endl; cout<<"\t*2. Poisci stranko *"<<endl; cout<<"\t*3. Izhod *"<<endl; cout<<"\t*********************"<<endl; cout<<"Vnesi izbiro: "; cin>>x; if (x==1) { nova_stranka(); }else if (x==2) { poisci(); }else { break; } } system ("pause"); return 0; }
Ta program sedaj vpiše osebo oz. stranko v beležnico in zna tudi preverit ali je stranka ki jo mi vpišemo že zapisana.
Sedaj me zanima kako bi naredili naslednje:
Dodamo novo stranko: Tadej Golobic
v beležnici se zapiše Tadej Golobic;0
potem damo naslednje:
Poišči stranko: Tadej Golobic
sedaj bi pa rad da če najde zgoraj vneseno osebo da se v beležnici napiše Tadej Golobic;1
se pravi za vsakič ko poiščeš osebo da se tisti števec na koncu poveča za ena.
Hvala za pomoč!
Lp Tadej ;)
chewbaca ::
Prepisovanje datoteke boš najlažje izvedel tako, da vsebino shraniš v pomnilnik, jo tam urediš in zapišeš nazaj na disk.
V tvojem primeru to pomeni da dokler iščeš osebo shranjuj že pregledane vrstice v en string (npr. nova_vsebina), ko osebo najdeš povečaj številko za 1, potem tvori nov string iz imena in številke, to appendaj v nova_vsebina in preberi datoteko do konca, ter vse appendaj v nova_vsebina. Datoteko potem zapri in ponovno odpri, namesto ios::app uporabi stikalo ios::trunc (ta izbriše vsebino datoteke) in zapiši celoten string.
V tvojem primeru to pomeni da dokler iščeš osebo shranjuj že pregledane vrstice v en string (npr. nova_vsebina), ko osebo najdeš povečaj številko za 1, potem tvori nov string iz imena in številke, to appendaj v nova_vsebina in preberi datoteko do konca, ter vse appendaj v nova_vsebina. Datoteko potem zapri in ponovno odpri, namesto ios::app uporabi stikalo ios::trunc (ta izbriše vsebino datoteke) in zapiši celoten string.
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | c++ fukncije in proceduraOddelek: Programiranje | 2476 (1745) | roccat |
» | Pomoč pri programiranju v C++Oddelek: Programiranje | 1817 (1384) | amacar |
» | [c++] Beležnica - iskanjeOddelek: Programiranje | 1146 (1067) | snow |
» | win api (c++)Oddelek: Programiranje | 2549 (1829) | Gundolf |
» | int to string v c++Oddelek: Programiranje | 2339 (2067) | OwcA |