Forum » Programiranje » [c++] Beležnica - iskanje
[c++] Beležnica - iskanje
golobich ::
Vglavnem imam en problem. Nikakor mi ne rata da bi prebral pravilno stranko iz datoteke.
Se pravi, če bi jaz vnesel da naj mi najde v datoteki osebo z imenom Janez Novak, bi se moral v datoteki zravn tega imena napisat x.
Vendar imam problem pri iskanju.
V mislih sem imel nekaj takšnega:
Program v razvoju :P
Ima kdo kakšno idejo?
Se pravi, če bi jaz vnesel da naj mi najde v datoteki osebo z imenom Janez Novak, bi se moral v datoteki zravn tega imena napisat x.
Vendar imam problem pri iskanju.
V mislih sem imel nekaj takšnega:
string vrstica; getline(datoteka, podatek); if(vrstica.find("podatek")>=0) { //In tu bi zdej moralo dodat po koncu podatka en x. }
Program v razvoju :P
#include <iostream> #include <fstream> #include <windows.h> using namespace std; void dodaj () { ofstream datoteka; datoteka.open ("C:\\stranke.txt", ios::app); if (datoteka.is_open() ) { fflush(stdin); string ime; string priimek; cout<<"Vnesi priimek stranke: "; getline (cin, priimek); cout<<endl<<"Vnesi ime stranke: "; getline (cin, ime); datoteka << priimek <<" "; datoteka << ime <<endl; datoteka.close(); } else { cout<<"Napaka pri odpiranju datoteke"<<endl; } } void poisci () { ifstream datoteka; datoteka.open ("C://stranke.txt"); string vrstica; if (datoteka.is_open() ) { while(! datoteka.eof()) //isto kot datoteka.good()...vglavnem jaz sem se navadu odspredaj postavit negator pa drugo funkcijo klicat (internet pa take fore) { string niz; fflush(stdin); cout<<"Vnesi priimek in ime stranke: "; getline(cin, niz); //tle bi zdej moglo poiskat zgoraj vneseni niz in mu zraven pripisat en x } datoteka.close(); } else { cout<<"Napaka pri odpiranju datoteke"<<endl; } } void menu () { cout<<"Kaj zelite narediti?"<<endl; cout<<"1. Dodati novo stranko"<<endl; cout<<"2. Poiskati obstojeco stranko"<<endl; cout<<"3. Izhod iz programa"<<endl; } int main () { for (int x=1; x>0; x++) { int izbira; system ("cls"); menu(); cin>>izbira; if (izbira==1) { dodaj(); } else if (izbira==2) { poisci(); } else if (izbira==3) { break; } else if ( (izbira!=1)&&(izbira!=2)&&(izbira!=3) ) { cout<<"Neveljaven znak. Poizkusi ponovno"<<endl; } } system ("pause"); return 0; }
Ima kdo kakšno idejo?
snow ::
Podobno kot bereš iz cin beri tudi vrstice iz datoteke. Če vrstica vsebuje določen niz pa preveriš s find: http://www.cplusplus.com/reference/stri...
Aja to ubistvu že nekak maš, samo tista tvoja funkcija poisci še ni tako napisana, kot si sam razmišljal. Ne vem če se da direktno zamenjat vrstico na sredini datoteke (oz. vstaviti nek znak), lahko pa si vse shraniš v ram in spremeniš kar hočeš in nato zapišeš vse skupaj nazaj.
Aja to ubistvu že nekak maš, samo tista tvoja funkcija poisci še ni tako napisana, kot si sam razmišljal. Ne vem če se da direktno zamenjat vrstico na sredini datoteke (oz. vstaviti nek znak), lahko pa si vse shraniš v ram in spremeniš kar hočeš in nato zapišeš vse skupaj nazaj.
Random mutation plus nonrandom cumulative natural selection - Richard Dawkins
Zgodovina sprememb…
- spremenilo: snow ()
golobich ::
snow...bi lahko to probal kako na kakšnem primeru pokazat?
Ker jaz naprimer ko sem tisto z if stavkom in pogojem kjer poišče preko finda, mi prebere samo prvo vrstico.
Problem je zdej če bi rad prebrau...neko čist 5 vrstico.
Ker jaz naprimer ko sem tisto z if stavkom in pogojem kjer poišče preko finda, mi prebere samo prvo vrstico.
Problem je zdej če bi rad prebrau...neko čist 5 vrstico.
Nuke_H2 ::
nardiš zanko čez datoteko. Prebereš vsako vrstico posebaj in če iskani niz ustreza vrstici jo izpišeš...
golobich ::
nardiš zanko čez datoteko. Prebereš vsako vrstico posebaj in če iskani niz ustreza vrstici jo izpišeš...
se pravi ta zanka se more ponavlat dokler ni null pointer = 0 ne? kak bi biu pa pol tle pogoj?
Nuke_H2 ::
am ja, dokler ne dosežeš eof. To se prav čez celo datoteko.
V javi zgleda takole
To deluje če imaš datoteko zapisano takole:
Stranke.txt
Miha Piha
Janez Novak
Lojz Lojz
Janez Novak
Program izpiše:
Najdena stranka Janez Novak
Najdena stranka Janez Novak
Če pa hočeš vse vrstice, ki vsebujejo Janez Novak, morš pa vsako vrstico razbit še na besede...
Stranke.txt
V podjetju x je zaposlen Janez Novak.
Danes sem videl kako je šel Janez Novak po stopnicah.
hehe
Tukaj moraš pa vsako vrstico razbit na besede.
V, podjetju, x, je, zaposlem, Janez, Novak
in potem primerjat besedo z besedo :P
Lp Nuke_H2
V javi zgleda takole
while((vrstica=br.readLine() !=null) { //br je pač nek bralni tok, nevem kako je v c++ if(vrstica.equals("Janez Novak"){ //primerjaš vrstico z nizom ki ga iščeš v tem primeru Janez Novak.... System.out.println("Najdena stranka Janez Novak"); //in če vrstica ustreza nizu, izpišeš da si ga našel } }
To deluje če imaš datoteko zapisano takole:
Stranke.txt
Miha Piha
Janez Novak
Lojz Lojz
Janez Novak
Program izpiše:
Najdena stranka Janez Novak
Najdena stranka Janez Novak
Če pa hočeš vse vrstice, ki vsebujejo Janez Novak, morš pa vsako vrstico razbit še na besede...
Stranke.txt
V podjetju x je zaposlen Janez Novak.
Danes sem videl kako je šel Janez Novak po stopnicah.
hehe
Tukaj moraš pa vsako vrstico razbit na besede.
V, podjetju, x, je, zaposlem, Janez, Novak
in potem primerjat besedo z besedo :P
Lp Nuke_H2
snow ::
Tretji primer: http://www.cplusplus.com/doc/tutorial/f...
Za vsak line s pomočjo find preveriš ali vsebuje niz (ime).
Za vsak line s pomočjo find preveriš ali vsebuje niz (ime).
Random mutation plus nonrandom cumulative natural selection - Richard Dawkins
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Pomoč pri programiranju v C++Oddelek: Programiranje | 1813 (1380) | amacar |
» | C osnovaOddelek: Programiranje | 1544 (1059) | RunoTheDog |
» | Qt Designer -> KDevelop C++ ErrorOddelek: Programiranje | 2121 (1651) | 'FireSTORM' |
» | [c++] branje iz datoteke v string, primerjava stringa in zapis v datotekoOddelek: Programiranje | 2280 (2048) | R33D3M33R |
» | [C++][Naloga_polja]MIN in MAX polja, izpis za x.100 stevilOddelek: Programiranje | 2940 (2751) | snow |