我已经在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
附近。但它没有帮助。
答案 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