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

2023-10-30

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

字段处理前 字段处理后
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, '\"', "\"\"");
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • 手动打jar运行jar

    1 通过maven管理的 pom xml需要依赖
  • Docker容器搭建运行GPU深度学习环境

    nvidia smi Wed Nov 24 13 44 18 2021 NVIDIA SMI 495 44 Driver Version 495 44 CUDA Version 11 5 GPU Name Persistence M Bus
  • Oracle中调用dbms_output.put_line()不显示输出结果

    Oracle中调用dbms output put line 不显示输出结果 输入SQL语句 set serveroutput on
  • Thread线程原理使用优劣可否

    thead线程
  • java课设_Java 课设

    展开全部 简单的五子棋程序 新建一个chess类 其中代码如下 package work import java awt Color public class Chess public static final int diamter 30
  • 微信小程序云开发 1 - 数据库

    微信小程序云开发最重要的有两点 1 云数据库 2 云函数 学会这两点基本就能够进行微信小程序的云开发 首先 我们先看微信小程序云数据库的基本操作 1 打开微 信开发者工具 创建一个云开发微信小程序 在创建项目时勾选使用云开发即可 注意 使用
  • 4、VScode、WAMP、Xdebug调试

    1 查看Xdebug的版本 Xdebug是随WAMP一起安装的 版本号可以通过PHP扩展菜单下查看 为3 1 6 2 配置系统环境变量 将PHP的安装目录 添加到系统的环境变量中 配置完成后 通过命令行 输入命令 PHP V 查看是否配置成
  • JavaScript基础

    W3C 结构化语言标准 HTML XHTML XML 表现语言标准 CSS 行为语言标准 ECMAScript JS 有的时候代码没错 就是不显示 原因你得变量 定义在了function 函数的外面 document 向页面输出内容 ale
  • 剑指offer—40.最小的K个数—分析及代码(Java)

    剑指offer 40 最小的K个数 分析及代码 Java 一 题目 二 分析及代码 1 排序 1 思路 2 代码 3 结果 2 Partition 1 思路 2 代码 3 结果 3 堆 1 思路 2 代码 3 结果 三 其他 一 题目 输入
  • vue3中的ref,toRef,toRefs三个是干嘛的,有什么作用呢。

    1 ref的使用 ref 接受一个原始值 返回一个具有响应式的对象 对象有一个value属性 其值就是所传递的原始值 ref是做的一个拷贝关系 修改对象msg的值 不会影响对象obj 视图会发生变化 import ref from vue
  • 蓝桥杯单片机组经验分享之(三)各模块用法(3)继电器、蜂鸣器

    继电器和 有源 蜂鸣器用法类似LED 挂载在锁存器U9上 因为继电器和蜂鸣器需要提供较大的驱动电流 锁存器驱动能力不够 因此锁存器后加入了ULN2003提高带负载能力 驱动电流型设备 连接如下图 继电器 蜂鸣器分别接于QUT5 OUT7 锁
  • wps图表横纵坐标怎么设置_wps怎么切换横纵坐标/excel图表怎么切换横纵坐标

    怎样将excel中图表的横纵坐标互换 数据那边有个切换行列 怎么在excel把横纵坐标互换 你是指用excel制作的图标吗 你把数据先进行转置就好了 EXCEL图表中 如何将横坐标和纵坐标更换一下 右键点选图表数据区域 选择数据 看到切换行
  • 解决电信劫持的快速办法!

    DNS被劫持后的表现 打开一个正常的网站 电脑的右下角回莫名其妙的弹出一些小广告 打开一个下载链接 并不是自己所需要的东西 浏览器输入一个网址后回车网页跳转到其他网址的页面 iis7网站监控 测DNS污染检测 网站打开速度检测 网站是否被黑
  • windows下多个python版本共存

    不想使用virtualenv来管理多个python版本的 可以通过修改python exe的名字 然后加入环境变量 运行时通过名字区分即可 参考链接 https www cnblogs com pxuan p 6408823 html
  • 什么是Spring IOC 容器?

    Spring IOC 负责创建对象 管理对象 通过依赖注入 DI 装配对象 配置对象 并且管理这些对象的整个生命周期
  • 根据权重随机选取指定条数记录的简单算法实现(C#)【含源代码】

    原文地址 http www cnblogs com foolin archive 2012 03 22 2412632 html 一 应用场景 有时我们需要从一些列数据中根据权重随机选取指定条数记录出来 这里需要权重 随机 我们根据权重越大
  • 用ACM LaTeX最新模板(acmart)时遇到的作者单位和地址无法合并的问题

    这个问题只是简单记录一下 目前并没有太好的解决方案 这几天在准备一篇论文的Camera Ready版本 发现这个问题很让人苦恼 以前我们用ACM的LaTeX模板 如果多个作者属于一个单位 可以用 sharedaffiliation这种方式
  • 日常健康管理

    0分贝0dB是人们刚刚能听到的最微弱的声音听觉下限 30dB40dB是较为理想的安静睡眠环境 超过50dB会影响睡眠和休息70dB会干扰谈话 影响工作效率长期生活在90分贝以上的噪声环境 会严重影响听力和引起神经衰弱 头疼 血压升高等疾如果
  • 怎么看空调定时成功_空调定时怎么设置

    空调是我们常用的电器 尤其是在炎热的夏季空调是我们必须使用的家电 夜晚的时候一直开着空调很容易着凉 这个时候我们可以开启空调的定时键 今天想跟大家说一说空调定时怎么设置 希望可以给大家带来帮助 一 空调定时怎么设置 1 首先我们先打开空调
  • CSV文件中的逗号、双引号的转义。读写带特殊字符的csv文件。

    如果字段中有逗号 该字段使用双引号 括起来 如果该字段中有双引号 该双引号前要再加一个双引号 然后把该字段使用双引号括起来 字段处理前 字段处理后 abc d2 abc d2 ab c d2 ab c d2 abc abc 参考文章 htt