好用多线程的CSV parser库,Fast C++ CSV Parser

本文介绍了GitHub上的一款Fast C++ CSV Parser,它是一个轻量级且高效的CSV读取库,支持多线程读取和自定义列分隔符。该库的特点包括按照标题解析、编译时功能定制、处理大型文件等。文章提供了一个简单的使用示例,并提到了使用多线程时的编译选项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

说起c++做csv文件的读写,要我来说不就是个按行读取然后用逗号分隔嘛。
可是想想呢又觉得麻烦,代码嘛,多迭代,多复用,没有必要自己写,万一不靠谱还得找bug,多不方便。
所以咯,我没事就去github逛逛,看看大家都在分享什么代码,然后就找到了它

Fast C++ CSV Parser

说来也是奇怪,第一次看这个只有头文件的csv库时我眼晕得很,心说,怎么写得这么麻烦?
然后一看,哦~~还是有点意思的,做了多线程读取呢
那么简单的翻译一下这个Fast C++ CSV Parser吧


这是一个又小,又好用,而且只有个头文件的逗号分隔值【comma separated value(CSV)】读取库哦。


特点如下:

  • 可以按照标题将不同列的信息解析出来
  • 可以使用多线程技术读取CSV文件并且解析
  • 可以在编译时使用模板启用和禁用解析功能(例如转义字符串),按需定制功能。
  • 可以在合理的时间内读取多个GB大小的文件。
  • 支持自定义列分隔符(即支持制表符分隔值文件),引用转义字符串,自动空格修剪。
  • 使用* nix和Windows换行符,并自动忽略UTF-8 BOM。
  • 具有足够上下文以格式化有用的错误消息的异常类。 what()返回错误消息准备好显示给用户。

下面是一个简单的例子,来自github1

# include "csv.h"

int main()
{
  io::CSVReader<3> in("ram.csv");//3是有几列,括号里面是文件名
  in.read_header(io::ignore_extra_column, "vendor", "size", "speed");//确定列的名字,事先得看一下csv文件里面怎么定义
  //in.next_line()如果不想读取标题,可以用这句
  std::string vendor; int size; double speed;//随便定义一些变量
  //注意,上面的变量目前只支持c++自带的一些类型,可以看
  while(in.read_row(vendor, size, speed)){
    // do stuff with the data
  }
}

有几个要注意的东西:

  1. 文件名可以用char*或者std::string
  2. 列的标题一般用char*或者std::string,其他的暂时不支持
  3. 如果不想读取列标题,可以使用next_line()这个函数,但是后面的read_row()函数就是按顺序读取了。
  4. bool read_row(ColType1&col1, ColType2&col2, ...)函数支持的数据类型:
- signed char, short, int, long and long long
- unsigned char, unsigned short, unsigned int, unsigned long, unsigned long long
- float, double, long double
- char
- std::string
- char*

目前只有这些类型受支持,如果有大神愿意commit一个模版也是极好的。

别的嘛,暂时没有了,我只用了这些
对了如果要使用多线程记得在编译的时候链-lpthread
例如像作者在readme里面写的那样:

g++ -std=c++0x a.o b.o -o prog -lpthread

如果不想使用呢,可以在头文件里面define 一下

 #define CSV_IO_NO_THREAD
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值