» »

[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
#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.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

c++ fukncije in procedura

Oddelek: Programiranje
362476 (1745) roccat
»

Pomoč pri programiranju v C++

Oddelek: Programiranje
141817 (1384) amacar
»

[c++] Beležnica - iskanje

Oddelek: Programiranje
61146 (1067) snow
»

win api (c++)

Oddelek: Programiranje
462549 (1829) Gundolf
»

int to string v c++

Oddelek: Programiranje
272339 (2067) OwcA

Več podobnih tem