CSV文件中的逗号、双引号的转义。读写带特殊字符的csv文件。

如果字段中有逗号(,),该字段使用双引号(")括起来;
如果该字段中有双引号,该双引号前要再加一个双引号,然后把该字段使用双引号括起来。

字段处理前字段处理后
abc,d2“abc,d2”
ab"c,d2“ab”“c,d2”
"abc“”“abc”
“”“”""""

参考文章:https://www.cnblogs.com/xiaomiganfan/p/4073454.html

读写代码参考:
C++: Minimalistic CSV Streams - CodeProject https://www.codeproject.com/Articles/741183/Cplusplus-Minimalistic-CSV-Streams
此版本的代码可支持逗号、双引号转义字符。

示例代码较多,我自己反复测试,简化使用例子代码如下:


struct Product
{
	Product() : name(""), qty(0), price(0.0f) {}
	Product(std::string name_, int qty_, float price_) : name(name_), qty(qty_), price(price_) {}
	std::string name;
	int qty;
	float price;
};

using namespace mini;
void test_csv_io()
{
	csv::ofstream os("products.csv");
	os.set_delimiter(',',"");
	os.enable_surround_quote_on_str(true, '\"', "\"\"");
	if (os.is_open())
	{
		Product product("Shampoo", 200, 15.0f);
		os << product.name << product.qty << product.price << NEWLINE;
		Product product2("S,oa\"p", 300, 6.0f);
		os << product2.name << product2.qty << product2.price << NEWLINE;
	}
	os.flush();
	os.close();

	csv::ifstream is("products.csv");
	is.set_delimiter(',', "");
	is.enable_trim_quote_on_str(true, '\"', "\"\"");
	if (is.is_open())
	{
		Product temp;
		while (is.read_line())
		{
			is >> temp.name >> temp.qty >> temp.price;
			// display the read items
			std::cout << temp.name << "," << temp.qty << "," << temp.price << std::endl;
		}
	}
}

生成的products.csv文件内容如下:

"Shampoo",200,15
"S,oa""p",300,6

以上刚好是标准csv的格式。
minicsv中示例的生成结果,往往把,替换为##、$$,双引号默认替换为

&quot;

反而不是我所希望的结果。
所以我自己改的例子中,写成如下配置:

	os.set_delimiter(',',"");
	os.enable_surround_quote_on_str(true, '\"', "\"\"");
	
	is.set_delimiter(',', "");
	is.enable_trim_quote_on_str(true, '\"', "\"\"");
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值