c语言写入csv 逗号字符串,使用C/C++读取csv文件的每一行,以逗号分隔,如果某单元格的数据本身含有逗号,这里如何避免分隔出错?...

根据csv的格式规范来看,包含逗号的一列数据应该是被双引号包起来的,这样就好办了,只要把被双引号包含的字符串提取出来然后把里面的逗号替换成别的符号,然后再拼接上原字符串中被双引号包起的字符串左边和右边的部分就好了。这里也只保证适用于格式规范的csv文件,不规范的文件不保证成功。

void _analyse_line(CStringW line) {

// 保存原字符串副本

CStringW copy_line = line;

// 获取首个双引号在字符串中的索引

int fquote_index = line.Find('\"');

// 如果不存在双引号,可以直接按照逗号分割该字符串

// 存在双引号的话检查被双引号包起的字符串中是否存在逗号

if (fquote_index != -1) {

int lquote_index = 0, _index;

// 获取最后一个双引号的索引

while ((_index = line.Find('\"')) != -1) {

line = CStringW(line.Right(line.GetLength() - _index - 1));

lquote_index += _index + 1;

}

// 双引号包起的字符串的长度

int len = lquote_index - fquote_index;

// 首个双引号左边的字符串

CStringW left = copy_line.Left(fquote_index);

line = CStringW(copy_line.Right(copy_line.GetLength() - fquote_index));

// 最后一个双引号右边的字符串

CStringW right = CStringW(line.Right(line.GetLength() - len));

// 被双引号包起的字符串

line = CStringW(line.Left(len));

// 替换被双引号包起的字符串中的逗号

line.Replace('\,', '\t');

// 拼接新的字符串

line = left + line + right;

}

vector arr = split(line, ',');

// 把用'\t'替换过的逗号还原回来

for (int i = 0; i

split方法不贴了,实现方法很多。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值