CSV标准格式解析与libcsv++实现

1 篇文章 0 订阅

CSV文件是一种简单的数据表描述文件,其各字段值使用半角逗号分隔。CSV格式有很多变种,即使有一个标准文档RFC4180,各个程序对它的支持也不尽相同。最近利用闲暇时间使用C++实现了RFC4180规定的CSV格式的解析,并命名为libcsv++。这里简单介绍一下RFC4180的描述:


1. 每一项“记录”(record)为一行,使用CRLF分隔。例如:

       aaa,bbb,ccc CRLF
       zzz,yyy,xxx CRLF

2. 文件的最后一行记录可以不使用CRLF结尾 。例如:

       aaa,bbb,ccc CRLF
       zzz,yyy,xxx

3. 文件的第一行可以是一个“头部”(header),也可以是普通数据。无论是何种数据,字段数必须一致。例如:

       field_name,field_name,field_name CRLF
       aaa,bbb,ccc CRLF
       zzz,yyy,xxx CRLF

4. 每一行记录可以包含多个字段,并以逗号分隔。字段若以空格开始,这个(些)空格不会被忽略。最后一个字段之后不能有逗号。例如:

       aaa,bbb,ccc

5. 每一个字段可以使用也可以不使用双引号包围。如果字段没有使用双引号包围,则其中不允许出现双引号。例如:

       "aaa","bbb","ccc" CRLF
       zzz,yyy,xxx

6. 字段若包含有CRLF,双引号和逗号,则该字段应该被双引号包围。例如:

       "aaa","b CRLF
       bb","ccc" CRLF
       zzz,yyy,xxx

   以上文件内容解析后只有两行而不是三行。

7. 如果双引号被用来包围字段,则字段中的双引号必须通过在其前加一个双引号来转义。例如:

       "aaa","b""bb","ccc"


翻译得不好请见谅。至于实现就请移步github直接看代码了(https://github.com/jainyzau/libcsv-/),非常短的一段代码,可以方便地集成到需要的项目中。在解析中使用了  LineStart,  FieldStart,  FrontQuote,  BackQuote,  EscapeOn,  EscapeOff,  FieldEnd,  LineEnd,  ParseCompleted这样的9个状态,各个状态代表什么从字面上也很容易理解。测试的时候使用了google test框架,如果需要编译测试用例,需要手动下载google test框架,编译后将其与我的代码链接。



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值