Odczytywanie danych z pliku

0

Mam pewien problem z odczytywaniem danych z pliku. W załączniku dodałem plik, z którego odczytuję dane (RS232_0.txt).
Wycinek przykładowego wiersza pliku !AIVDM,1,1,,A,339KE00OhCQEjWROCaJ5qD360Q8Q,0*24

Chodzi o to, że odczytuję plik wierszami i chciałbym z niego wyłuskać dwie rzeczy, 1) jeśli po pierwszym przecinku wartość jest równa 1 lub 3, to 2) odczytuję i przechowuję ten długi ciąg 339KE00OhCQEjWROCaJ5qD360Q8Q (znajduje się pomiędzy ostanim i przedostatnim przecinkiem). Poniższy kod robi swoją robotę, ale nie działa w jednym przypadku, który zaznaczyłem w screenshocie (odczytywane są dane po przecinku, które są niepotrzebne), nie mam pojęcia co może być tego przyczyną, ma ktoś jakiś pomysł?

string dane;
			string temp;
			string message;
			while( !plik.eof() ){
            	getline( plik, dane );
            	temp= dane.substr(dane.find(",")+1, dane.find(",")-25);
    				if(temp=="1" || temp=="3"){
    				message= dane.substr(dane.find(",")+8, dane.find(",")-dane.find("\n")+1);
    				cout<<message<<endl;
    			}
          	}
        	plik.close();
1

Przyczyną jest to, że Twój program działa tylko wtedy, gdy wszystkie kody mają taką samą ilość znaków, w przypadku gdy jest ich mniej, bierze również te które zostały, nie zważając na to, że jest tam przecinek.
Dorzuć to message = message.substr(0, message.find(",")); przed cout<<message<<endl; i będzie ok :)

0
dub.raf napisał(a):

Przyczyną jest to, że Twój program działa tylko wtedy, gdy wszystkie kody mają taką samą ilość znaków, w przypadku gdy jest ich mniej, bierze również te które zostały, nie zważając na to, że jest tam przecinek.
Dorzuć to message = message.substr(0, message.find(",")); przed cout<<message<<endl; i będzie ok :)

dzięki wielkie, pomogło :)

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