» »

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

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
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).
Random mutation plus nonrandom cumulative natural selection - Richard Dawkins


Vredno ogleda ...

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

Pomoč pri programiranju v C++

Oddelek: Programiranje
141725 (1292) amacar
»

C osnova

Oddelek: Programiranje
221478 (993) RunoTheDog
»

Qt Designer -> KDevelop C++ Error

Oddelek: Programiranje
352045 (1575) 'FireSTORM'
»

[c++] branje iz datoteke v string, primerjava stringa in zapis v datoteko

Oddelek: Programiranje
192206 (1974) R33D3M33R
»

[C++][Naloga_polja]MIN in MAX polja, izpis za x.100 stevil

Oddelek: Programiranje
222823 (2634) snow

Več podobnih tem