C ++,如何从csv char *中忽略逗号(,)?

时间:2017-10-18 06:39:25

标签: c++ csv

我已经在SO上搜索过很多关于它的解决方案,例如""逗号所在的部分是错误的。而且它使用的是C ++:)

char *msg = new char[40];
msg = "1,2, Hello , how are you ";

char msg2[30];

strcpy_s(msg2, msg);

char * pch;
pch = strtok(msg2, ",");

while (pch != NULL)
{
    cout << pch << endl;
    pch = strtok(NULL, ",");
}

我想要的输出:

1
2
Hello , how are you

出来就是生产

1
2
Hello 
 how are you

我试过把&#34;&#34;在Hello , how are you附近。但它没有帮助。

1 个答案:

答案 0 :(得分:2)

CSV文件是逗号分隔值。如果你想在值中包含逗号,你必须用引号括起来。

您需要输出的CSV示例应为:

 msg = "1,2, \"Hello , how are you \"";

因此值Hello , how are you被引号括起来。

这是标准的CSV。这与strtok函数的行为无关。

strtok函数只是在不考虑任何其他因素的情况下搜索您传递给它的令牌,在本例中为,,因此它会忽略"

为了使其按预期工作,您必须使用令牌,"进行标记,并考虑先前找到的令牌以确定{{1}找到的是一个新值,或者它在引号内。

另请注意,如果您希望完全符合CSV规范,则应考虑引号也可以转义,以便在值项中包含引号字符。请参阅此答案以获取示例: Properly escape a double quote in CSV

注2:为了完整起见,这里是CSV规范(RFC-4180):https://tools.ietf.org/html/rfc4180