Odczyt z pliku wybranych słów

0

Witam mam następujący problem, mam funkcje która wczytuje plik txt :

printf("Wczytywanie pliku\n");
    fstream plik;
    string dane;
    plik.open("/Disc/xCode/dmt/dmt/dmt/range.txt", std::ios::in | std::ios::out);
    if(plik.good() == true)
    {
        printf("Plik range wczytano poprawnie\n");
        
        for(int i=1 ; i<=6; i++)
        {
            getline(plik, dane);
            cout<<dane<<endl;
           
        }
        printf("\n");
        plik.close();
    }
    else
        printf("Nie mozna odczytac pliku\n");

To jest zawartość pliku tekstowego :

01
2012-11-34
40000000001|42999999999|Visa electron
5410000|5575199|debit mastercard
45|48|visa
49|67|visa impresja
6700001|6899999|maestro

Mój problem polega na tym że mam wyświetlić tylko nazwy kart, czyli :

Visa electron
debit mastercard
visa
visa impresja
maestro


Proszę o pomoc

1
    ifstream plik("/Disc/xCode/dmt/dmt/dmt/range.txt");
    if(plik)
      {
       int state=0,ch;
       while((ch=plik.get())!=EOF)
         {
          if(state==2) cout<<(char)ch;
          if(ch=='|') ++state; else if(ch=='\n') state=0;
         }
      }
    else cout<<"Nie mozna odczytac pliku"<<endl;
0

Nic sie nie wyświetla stoi w miejscu jak sie skompiluje

0
 int main()
{
    printf("Wczytywanie pliku\n");
    fstream plik;
    string dane;
    plik.open("/Disc/xCode/dmt/dmt/dmt/range.txt", std::ios::in | std::ios::out);
    if(plik.good() == true)
    {
        printf("Plik range wczytano poprawnie\n");
        
        int state=0,ch;
        while((ch=cin.get())!=EOF)
        {
            if(state==2) cout<<ch;
            if(ch=='|') ++state; else if(ch=='\n') state=0;
            cout<<dane;
        }
    
        printf("\n");
        plik.close();
    }
    else
        printf("Nie mozna odczytac pliku\n");
}
0

Algorytm który podałem działa: http://ideone.com/31Tw8s
Nie chce mi się analizować tą twoją mieszankę, przeważnie jak mieszasz printf z cout to nic dobrego nie wychodzi.

0

W VC 2010 jak wklejam ten dokładnie kawałek kodu to nie działa tylko czeka na klawisz użytkownika.
Więc gdzies jest bład.

tak działa:

 {
    char c;
    fstream plik("/Disc/xCode/dmt/dmt/dmt/range.txt");
    if(plik)
    {
        int state=0;
        while(!plik.eof())
        {
            if (c=='|') {
                ++state;
            }
            c=plik.get();
            if (c=='\n'){
                state = 0;
                cout << endl;
            }
            if (state >= 2)
                cout << c;
        }
    }
    else
        cout<<"Nie mozna odczytac pliku"<<endl;
}
0

Nie działa, śmieć masz na końcu pliku.

Jeżeli już to:

    ifstream plik("/Disc/xCode/dmt/dmt/dmt/range.txt");
    if(plik)
      {
       int state=0
       char ch;
       while(plik.get(ch))
         {
          if(state==2) cout<<(char)ch;
          if(ch=='|') ++state; else if(ch=='\n') state=0;
         }
      }
    else cout<<"Nie mozna odczytac pliku"<<endl;
0
string dane2, dane;
    string::size_type pozycja,pozycja2,dlugosc;
    char bufor[20];

    dane="49|67|visa impresja";
    pozycja2=dane.size();
    pozycja2=pozycja2-1;    

    pozycja=dane.find("|");
    dlugosc= dane.copy(bufor,pozycja2,pozycja+1);
      bufor[dlugosc]='\0';
    dane=bufor; //dane = 67|visa impresja

    pozycja=dane.find("|");
    pozycja2=pozycja2-pozycja;
        dlugosc= dane.copy(bufor,pozycja2,pozycja+1);
      bufor[dlugosc]='\0';
    dane=bufor; //dane = visa impresja
0

Jeśli chcesz działać na stringach, a nie na znakach:

    ifstream plik("/Disc/xCode/dmt/dmt/dmt/range.txt");
    if(plik){
        string buf;
        while(getline(plik,buf)){
            string::size_type found = buf.find('|');
            if(found != string::npos) found = buf.find('|',found+1);
            if(found != string::npos) cout << buf.substr(found+1) << endl;
        }
    }else{
        cout<<"Nie mozna odczytac pliku"<<endl;
    }

Wynik: http://ideone.com/ch8vxF

Szukanie jest brzydkie, ale zakładam, że boost to przesada w tym przypadku.

1 użytkowników online, w tym zalogowanych: 0, gości: 1