今天在解析CSV中遇到一個問題,就是csv內容中含有分割符,這里假定分割符就是逗號,當然這些內容用雙引號括起來了。
因以前的代碼是使用C++ Tr1 的regex
因以前的代碼是使用C++ Tr1 的regex
vector<string> Parser::parse(string& line)
{
vector<string> fields;
std::tr1::regex re(",");
if( &line != NULL)
{
sregex_token_iterator i(line.begin(), line.end(), re, -1);
sregex_token_iterator j;
while (i != j)
{
fields.push_back(*i++);
}
}
return fields;
}
查了資料,修改成如下代碼就可以
vector<string> Parser::parse(string& line)
{
vector<string> fields;
std::tr1::regex re("(?!\".*),(?!.*\")");
if( &line != NULL)
{
sregex_token_iterator i(line.begin(), line.end(), re, -1);
sregex_token_iterator j;
while (i != j)
{
fields.push_back(*i++);
}
}
return fields;
}