Używam boost :: split do parsowania pliku danych. Plik danych zawiera następujące linie.Jak wykorzystać dzielenie boost, aby podzielić ciąg znaków i zignorować puste wartości?
dane.txt
1:1~15 ASTKGPSVFPLAPSS SVFPLAPSS -12.6 98.3
białej przestrzeni między elementami są zaczepy. Kod, który muszę podzielić powyższą linię jest następujący.
std::string buf;
/*Assign the line from the file to buf*/
std::vector<std::string> dataLine;
boost::split(dataLine, buf , boost::is_any_of("\t "), boost::token_compress_on); //Split data line
cout << dataLine.size() << endl;
Na powyższej linii kodu powinienem dostać wydruk z 5, ale dostaję 6. Próbowałem przeczytać w dokumentacji i rozwiązanie to wydaje się, że powinien robić to, co chcę, mogę jasno coś mi brakuje. Dzięki!
Edytuj: Uruchomienie pętli forLop w następujący sposób na linii danych otrzymasz następujące.
cout << "****" << endl;
for(int i = 0 ; i < dataLine.size() ; i ++) cout << dataLine[i] << endl;
cout << "****" << endl;
****
1:1~15
ASTKGPSVFPLAPSS
SVFPLAPSS
-12.6
98.3
****
jakie są wartości przechowywane w DataLine? –
[Otrzymuję 5] (http://liveworkspace.org/code/1KMXAm$1), twoje 'buf' zawiera coś innego. –
Być może nie skopiował on poprawnie tej strony, skopiował go niepoprawnie na kod testowy. Pozwól, że sprawdzę, czy kopiuje się prawidłowo. – PhiloEpisteme