[C++] Wczytywanie danych z tekstu.
Ostatnio zmodyfikowano 2017-01-11 23:38
cropyeee Temat założony przez niniejszego użytkownika |
[C++] Wczytywanie danych z tekstu. » 2017-01-11 19:01:19 Witam, Mam pewien problem podczas wczytywania tekstu z pliku. Otóż planuje wczytać tekst, którego schemat wygląda tak: 1970;Francja;Citroen CX 25 GTi Turbo;229 km/h 1976;Francja;Renault Alpine A310;220 km/h 1986;Francja;Renault Alpine GTA;249 km/h 1989;Francja;Citroen XM 3.0i V6 24v;235 km/h Mam jednak pewien problem. Gdy staram się wczytać kraj pochodzenia, tekst wczytuje mi się wraz ze średnikiem i nazwą po średniku. Chciałbym tego uniknąć, lecz nie do końca wiem jak sobie z tym poradzić. Wiem, że mógłbym zmodyfikować plik źródłowy ale to się mija z celem. Kod programu: #include <iostream> #include <fstream> #include <vector> #include <string> #include<string.h>
using namespace std;
struct cars { int rok; string krajPochodzenia; string model; int predkosc; };
int main() { fstream dane; vector < cars > lista; dane.open( "cars.csv", ios::in ); if( dane.is_open() ) { while( !dane.eof() ) { cars temp; string kmh; dane >> temp.rok; char znak; dane >> znak; dane >> temp.krajPochodzenia; char znak1; dane >> znak1; getline( dane, temp.model ); char znak2; dane >> znak2; dane >> temp.predkosc; dane >> kmh; lista.push_back( temp ); } } dane.close(); system( "pause" ); }
|
|
marcolo2307 |
» 2017-01-11 19:21:58 |
|
cropyeee Temat założony przez niniejszego użytkownika |
» 2017-01-11 19:40:59 A potem mam to dzielić po znalezieniu iteratora przez funkcję find? |
|
marcolo2307 |
» 2017-01-11 20:10:28 Tak. |
|
mokrowski |
» 2017-01-11 20:18:44 Nie mieszaj getline() z cin >> . Skazujesz się wtedy na niepotrzebne problemy braku czyszczenia bufora w którym zostaje '\n'. Podział możesz zrobić find() ale szybciej chyba tak: #include <iostream> #include <fstream> #include <vector> #include <string> #include <sstream>
using namespace std;
struct cars { int rok; string krajPochodzenia; string model; int predkosc; };
int main() { ifstream dane( "cars.csv" ); vector < cars > lista; string line; while( dane ) { if( not getline( dane, line ) ) { break; } istringstream stream( line ); while( stream ) { string field; if( not getline( stream, field, ';' ) ) { break; } cout << field << '\n'; } } system( "pause" ); }
|
|
cropyeee Temat założony przez niniejszego użytkownika |
» 2017-01-11 23:38:10 Poradziłem sobie z tym problemem, używając iteratorów. Dzięki za pomoc ;) |
|
« 1 » |