我在 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
Out put it is producing
1
2
Hello
how are you
我试过在 Hello , how are you
周围加上 ""。但这并没有帮助。
最佳答案
CSV 文件是逗号分隔值。如果您想要在值中使用逗号,则必须用引号将其括起来。
你在 CSV 中的例子,因为你需要你的输出,应该是:
msg = "1,2, \"Hello , how are you \"";
因此值 Hello , how are you
被引号包围。
这是标准 CSV。这与 strtok
函数的行为无关。
strtok
函数只搜索您传递给它的标记,在本例中为 ,
,因此它忽略了 "
。
为了让它按你想要的方式工作,你必须用这两个标记来标记化,,
和 "
,并按顺序考虑之前找到的标记确定找到的 ,
是新值还是在引号内。
另请注意,如果您想完全符合 CSV 规范,您应该考虑引号也可能被转义,以便在值项中包含引号字符。有关示例,请参见此答案: Properly escape a double quote in CSV
注意 2:为了完整起见,这里是 CSV 规范 (RFC-4180):https://www.rfc-editor.org/rfc/rfc4180
关于C++,如何忽略 csv char * 中的逗号 (,)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46804146/