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

标签 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

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/

相关文章:

php - 为什么在使用 php 将 CSV 文件导入 MySQL 时会得到重复数据

c# - CSV + FileHelpers + 双引号 = 噩梦

python - 是否可以在Python类中创建一个新的dict(字典)?

sql - 是否可以在 PLSQL/Oracle 中动态创建外部表

python - 在 Python 2.7 中运行 MySQL 将 CSV 加载到 MySQL -

c++ - 如何将用户输入的颜色传递给 textcolor()?

c++ - 删除数据文件中的条目 C++

c++ - 如何使用重载函数获取 XmlRpcValue

c++ - 无法链接简单代码

c++ - 在 C++ 中显示链接列表的永无止境循环