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"

该文件有很多记录,所以我需要一种快速的方法来分解行并将这些部分中的每一个推回一个向量。我选择 tokenizer 的主要原因是我听说了很多关于它的性能。我有一个功能:

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;
}

这样我就可以得到句子的每个部分,而忽略所有不是字母的东西。标记器是否能够读取我拥有的记录并通过“*”分隔符解析它们并从字符串中删除引号?引号之间不会有任何特殊字符,我只需要删除引号。我试图阅读 tokenizer 文档,但没有任何结果。

4

2 回答 2

0

您可以使用regex_replace

“break”是关键词。您不应该将其用作函数名称。

于 2012-09-08T06:22:45.437 回答
0

您需要为您的 Tokenizer 分配另一个 TokenizerFunc 以不同方式解析字符串,默认解析空格和标点符号

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

于 2012-09-08T07:41:39.180 回答