Getline - problem (więcej wierszy).

0

Witam,

Problem polega na tym chcę aby program pobierał każdy wiersz osobno i przeszukiwał w poszukiwaniu danego znaku. O ile z pierwszym wierszem nie ma problemu o tyle nie wiem jak sprawić żeby getline pobierał np 2 czy 3 wiersz. To co już zrobiłem:

 #include <iostream>
#include <conio.h>
#include <fstream>
#include <string>
using namespace std;

int main(){
    int a=0;
    fstream plik( "we.txt", std::ios::in ); //zakładamy, że plik istnieje
    string dane;
    string platinium ("P");
    string gold ("G");
    string silver ("S");
    size_t found;
    getline( plik, dane ); //wczytanie CAŁEGO jednego wiersza danych
    cout << dane << endl;
    found=dane.find(platinium);
    if (found!=string::npos){
       cout << "Linia 1 na pozycji " << int(found) << endl;
       a+=1;}
    else
       cout << "to nie platinium" << endl;
    found=dane.find(gold);
    if (found!=string::npos){
       cout << "Linia 2 na pozycji " << int(found) << endl;
       a+=1;}
    else
       cout << "to nie gold" << endl;
    found=dane.find(silver);
    if (found!=string::npos){
       cout << "Linia 3 na pozycji " << int(found) << endl;
       a+=1;}
    else
       cout << "to nie silver" << endl;    
    cout <<  endl;    
    cout <<  endl;    
    cout << "Linia " <<  a << endl;
    cout << dane << endl;
     getch();
     return 0;
}

Czyli np plik we.txt wygląda tak:

P 1 60
G 1 15
S 1 120
S 1 300

I o ile
P 1 60
jest oczywiste o tyle nie wiem jak sprawić aby getline pobrał:
G 1 15

PS.wiem że kod jest na razie jest nieefektywny bo operacje się powtarzają ale to taki wstępny szkic póki co.

0

Nie wiem, czy o to Ci chodzi, ale czytaj w pętli:

while(getline( plik, dane ))
{
	...
}
0
while(getline(plik, dane)) {
    nrLinii++;
    istingstream linia(dane);
    char ch;
    int a,b;
    linia >> ch >> a >> b;
    cout << "linia " << nrLinii;
    switch(ch) {
    case 'P':
        cout << " platinium" << endl;
        break;
    case 'G':
        cout << " gold" << endl;
        break;
    case 'S':
        cout << " silver" << endl;
        break;
    }
}
0
0x666 napisał(a)

Nie wiem, czy o to Ci chodzi, ale czytaj w pętli:

while(getline( plik, dane ))
{
	...
}

no mniej więcej tyle że jak getline ma pobrać 2 wiersz?

@MarekR22 , dzięki za optymalizacje ale ten kod dalej nie pomaga w osiągnięciu pobrania 2 wiersza przez getline.

0

string wiersz1,wiersz2,wiersz3
getline(plik,wiersz1);
getline(plik,wiersz2);
getline(plik,wiersz3);
cout<<"Wiersz1: "<<wiersz1<<endl;
cout<<"Wiersz2: "<<wiersz2<<endl;
cout<<"Wiersz3: "<<wiersz3<<endl;

0
_13th_Dragon napisał(a)

string wiersz1,wiersz2,wiersz3
getline(plik,wiersz1);
getline(plik,wiersz2);
getline(plik,wiersz3);
cout<<"Wiersz1: "<<wiersz1<<endl;
cout<<"Wiersz2: "<<wiersz2<<endl;
cout<<"Wiersz3: "<<wiersz3<<endl;

ok o to chodziło, dzięki :) i pozdrawiam

0

Jak na moje oko wszystkie robią to samo z tym, że dragon nie skorzystał z pętli

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