• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C++のboostのtokenizerのエラー)

C++のboostのtokenizerのエラー

このQ&Aのポイント
  • C++でboostを使用し、テキストファイルから読み込んだ1行のテキストをtokenizerでセパレーションし、文字列を編集したい。
  • テキストファイルから読み込む際に問題はなく、カンマで区切られた文字列をrecordに格納する際にエラーが発生。
  • エラーの原因としては、カンマで区切られた文字列に空白や不要な文字が含まれている可能性がある。解決するためには、カンマで区切る前に文字列から不要な空白や文字を取り除く必要がある。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

#include <iostream> #include <sstream> #include <string> #include <boost/tokenizer.hpp> using namespace std; using namespace boost; void tokenize(const string& record) { char_separator<char>sep(" "); typedef tokenizer< char_separator<char> > tokenizer_t; tokenizer_t tokens( record, sep ); for( tokenizer_t::iterator it=tokens.begin(); it!=tokens.end(); ++it ) cout << '[' << *it << ']' << endl; } int main() { istringstream stream( "----------------------------------\n" "001. リモート, 2012/06/12 09:15:49\n" "002. ローカル, 2012/06/13 10:20:50\n" "----------------------------------\n"); string line; while ( getline(stream, line) ) { tokenize(line); } } /* 実行結果 */ [----------------------------------] [001.] [リモート,] [2012/06/12] [09:15:49] [002.] [ローカル,] [2012/06/13] [10:20:50] [----------------------------------] ...何の問題もありませんねぇ。

diy_sunny
質問者

お礼

回答頂きありがとうございました! tokenizerのサンプルプログラムも頂き大変ありがとうございました。 ちゃんとテキストを分けることができるようになりました。今こんな感じで利用しています。 char_separator<char> sep(" "); //分割結果の表示 string record_test; typedef tokenizer< char_separator<char> >::iterator Iter; tokenizer< char_separator<char> > tokens( record, sep ); for( Iter it=tokens.begin(); it!=tokens.end(); ++it ) record_test = record_test + *it + ","; impl_->record = record_test.substr(0); iterator_range<string::iterator> r = find_first( impl_->record,"------" ); if(r) impl_->record = "\r\n"; //impl_->data << *it << ","; }

すると、全ての回答が全文表示されます。

関連するQ&A