前の記事に引き続き、Boost C++ Librariesの"tokenizer"を使ってみた。
今度は、"VAR=VALUE"の形式で書かれたファイルを"="で分割し、"VAR"をキーとしたmapに"VALUE"を値として放り込むということにした。ソースは次のようになっている。
- include <iostream>
- #include <string>
- #include <fstream>
- #include <map>
- #include <cstdlib>
- #include <boost/tokenizer.hpp>
- using namespace std;
- using namespace boost;
- int main(){
- typedef char_separator<char> c_separator;
- typedef tokenizer<c_separator> tokenizer;
- string line;
- map<string, string> param;
- c_separator eq_sep("=", "", keep_empty_tokens);
- ifstream inparam("./eqparam");
- while ( getline(inparam, line) ){
- tokenizer eq_tokens(line, eq_sep);
- tokenizer::iterator et_iter = eq_tokens.begin();
- param[*et_iter++]=*et_iter;
- }
- inparam.close();
- for(map<string, string>::iterator iter = param.begin();
- iter != param.end();
- ++iter){
- cout << "param[" << (*iter).first << "] : " << (*iter).second << endl;
- }
- return EXIT_SUCCESS;
- }
入力に使用した"eqparam"は次の通り
- AUTHOR=INCHOKI
- OPTION=
- TMPDIR=/tmp/tknzer
- VERSION=1.0
- DATE=2011/1/31
- KEYWORD=boost tokenizer c++
基本的にtokenizerの使い方はCSVを処理したときと同じで、区切り文字が","から"="になっている違いがあるくらい。実行結果は次のようになる。
- MacBook:work inchoki$ ./tknzer2
- param[AUTHOR] : INCHOKI
- param[DATE] : 2011/1/31
- param[KEYWORD] : boost tokenizer c++
- param[OPTION] :
- param[TMPDIR] : /tmp/tknzer
- param[VERSION] : 1.0
ちゃんと空パラメータの"OPTION"もうまいこと処理しているようだ。
コメント