0

次のようなレコードを持つ csv ファイルがあります。

837478739*"EP" 1 "3FB2B464BD5003B55CA6065E8E040A2A"*"F"*21*15*"NH"*"N" 0 *-1*"-1"*0*0**-1*223944*-1*"23 " 1 "-1" "-1" "78909" "-1" "-1" "-1" "-1" "-1" "-1" "-1" "-1" "-1" " -1" "-1" "-1" "-1" "74425" "26" "-1"*"-1"*1*1*69*23.58*0*0*0*0*"MC"

ファイルには多くのレコードが含まれているため、行を分割して各部分をベクトルにプッシュバックする高速な方法が必要です。私がトークナイザーを選んだ主な理由は、そのパフォーマンスについて多くのことを聞いたからです。私は機能を持っています:

void break(){
   //using namespace boost;
   string s = "This is a , test '' file";
   boost::tokenizer<> tok(s);
   vector<string> line;
   for(boost::tokenizer<>::iterator beg=tok.begin();beg!=tok.end();++beg){
       line.push_back(*beg);
   }
   cout << line[3] << "  and  " << line[5] << endl;
}

これにより、文の各部分を取得し、文字以外はすべて無視できます。トークナイザーには、私が持っているレコードを読み取り、「*」区切り文字で解析して、文字列から引用符を削除する機能がありますか? 引用符の間に特殊文字はありません。引用符を削除するだけです。トークナイザーのドキュメントを読み込もうとしましたが、何も出てきませんでした。

4

2 に答える 2

0

regex_replaceを使用できます。

「ブレイク」がキーワード。関数名には使用しないでください。

于 2012-09-08T06:22:45.437 に答える
0

別の TokenizerFunc を Tokenizer に割り当てて、文字列を別の方法で解析する必要があります。デフォルトではスペースと句読点で解析します

http://www.boost.org/doc/libs/1_37_0/libs/tokenizer/tokenizerfunction.htm

于 2012-09-08T07:41:39.180 に答える