【C++】开源:fast-cpp-csv-parser数据解析库配置使用

news/2024/7/10 20:15:46 标签: c++, 开源, 开发语言

😏★,°:.☆( ̄▽ ̄)/$:.°★ 😏
这篇文章主要介绍fast-cpp-csv-parser数据解析库配置使用。
无专精则不能成,无涉猎则不能通。——梁启超
欢迎来到我的博客,一起学习,共同进步。
喜欢的朋友可以关注一下,下次更新不迷路🥞

文章目录

    • :smirk:1. 项目介绍
    • :blush:2. 环境配置
    • :satisfied:3. 使用说明

😏1. 项目介绍

项目Github地址:https://github.com/ben-strasser/fast-cpp-csv-parser

fast-cpp-csv-parser 是一个快速、轻量级的C++ CSV解析库,用于解析和处理逗号分隔值(CSV)文件。它专注于提供高性能和低内存占用,并提供简单易用的API。

以下是 fast-cpp-csv-parser 的一些特点和功能:

1.快速解析:fast-cpp-csv-parser 的设计目标之一是提供快速的CSV解析性能。它使用高效的算法和数据结构,以最小的开销解析大型CSV文件。

2.低内存占用:该库在解析过程中使用较少的内存,这对于处理大型CSV文件或有限的内存环境非常有用。

3.简单易用的API:fast-cpp-csv-parser 提供了简洁的API,使CSV文件的解析和访问变得容易。它支持逐行解析、按列索引访问和按列名称访问等。

4.自定义选项:您可以根据需要配置解析器的选项,如分隔符、引号字符、是否跳过空行等。这使得它适应不同的CSV文件格式。

5.跨平台支持:fast-cpp-csv-parser 可在多个平台上运行,包括Windows、Linux和macOS。

fast-cpp-csv-parser 中有 LineReaderCSVReader 两个类,其中LineReader 类用于按行读取文本文件,而不关心是否是CSV格式,它提供了逐行读取文件的功能,可以用于处理任何文本文件;CSVReader 类是 fast-cpp-csv-parser 的主要类,专门用于解析和处理CSV文件,并可进行配置以满足需求。

😊2. 环境配置

该库是一个单头文件的解析库,因此只需将csv.h包含在项目中就可以。

# 编译
g++ -o main main.cpp -lpthread

😆3. 使用说明

CSVReader解析CSV文件示例:

#include <iostream>
#include "csv.h"

/*
Name,	Age,	City
a,	10,	city_a
b,	11,	city_b
c,	12,	city_c
d,	13,	city_d
e,  14, city_e
*/

int main() {
    io::CSVReader<3> csv("example.csv");  // 创建CSVReader对象,指定CSV文件名和列数

    // 设置CSV列名
    csv.read_header(io::ignore_extra_column, "Name", "Age", "City");

    std::string name;
    int age;
    std::string city;

    // 逐行解析CSV文件并访问每一列的数据
    while (csv.read_row(name, age, city)) {
        // 在此处对解析的数据进行处理
        std::cout << "Name: " << name << ", Age: " << age << ", City: " << city << std::endl;
    }

    return 0;
}

标准库解析CSV示例(对比):

#include <iostream>
#include <fstream>
#include <sstream>
#include <vector>
#include <string>

std::vector<std::vector<std::string>> parseCSV(const std::string& filename, char delimiter) {
    std::vector<std::vector<std::string>> data;

    std::ifstream file(filename);  // 打开CSV文件

    if (!file.is_open()) {
        std::cout << "Failed to open file: " << filename << std::endl;
        return data;
    }

    std::string line;
    while (std::getline(file, line)) {
        std::vector<std::string> row;
        std::stringstream ss(line);
        std::string cell;

        while (std::getline(ss, cell, delimiter)) {
            row.push_back(cell);  // 将每个单元格的数据添加到行向量中
        }

        data.push_back(row);  // 将每行数据添加到数据向量中
    }

    file.close();  // 关闭文件

    return data;
}

int main() {
    std::vector<std::vector<std::string>> data = parseCSV("example.csv", ',');  // 解析CSV文件

    // 遍历解析后的数据并打印到控制台
    for (const auto& row : data) {
        for (const auto& cell : row) {
            std::cout << cell << "\t";
        }
        std::cout << std::endl;
    }

    return 0;
}

在这里插入图片描述

以上。


http://www.niftyadmin.cn/n/5288323.html

相关文章

工业交换机的冗余电源设计

在市场上&#xff0c;尤其是在工业级交换机上&#xff0c;我们经常能看到一个支持冗余电源的选项。在大多数工业现场中&#xff0c;我们都知道网络的稳定性是非常关键的。而且&#xff0c;像光伏和煤矿这样的行业经常位于偏远地区&#xff0c;环境条件恶劣。因此&#xff0c;在…

python-docx操作word

在Python中操作Word文档通常涉及到读取、创建和编辑文档。这可以通过使用第三方库如python-docx来实现。以下是一个详细的指南,介绍如何使用python-docx来进行常见的Word文档操作。安装python-docx 首先,你需要安装python-docx库。可以使用pip来安装: pip install python-…

【验证概括 SV的数据类型_2023.12.18】

验证概括 验证的过程是保证芯片实现符合规格说明书&#xff08;Specification&#xff0c;spec&#xff09;的过程 验证的两项任务&#xff1a; RTL sim&#xff1a;前仿真&#xff0c;验证功能 GLS-Gate (Level Simulation)&#xff1a;后仿真&#xff0c;验证功能和时序 验…

安科瑞5G基站能耗管理云

安科瑞 崔丽洁 截至2023年10月&#xff0c;我国5G基站总数达321.5万个&#xff0c;占全国通信基站总数的28.1%。然而&#xff0c;随着5G基站数量的快速增长&#xff0c;基站的能耗问题也逐渐日益凸显&#xff0c;基站的用电给运营商带来了巨大的电费开支压力&#xff0c;降低5G…

B055-Maven IDEA UML

目录 Maven简介安装与配置Maven常用命令Maven导包导入项目到eclipsepom.xml介绍查找jar包网址eclipse中使用maven命令&#xff1a; eclipse创建maven项目修改jdk版本eclipse创建maven web项目配置阿里云镜像仓库 IDEA简介安装idea创建java项目idea基本配置删除项目idea创建Mave…

电商数据分析-03-电商数据采集

参考 最最最全数据仓库建设指南&#xff0c;速速收藏&#xff01;&#xff01; 第1章 数据仓库概念 数据仓库规划 1.1 数仓搭建 我们这里所说的数据仓库&#xff0c;是基于大数据体系的&#xff0c;里面包含标签类目&#xff0c;区别于传统的数据仓库。下面我们来将这张图分解…

ubuntu 安装apisix-dashboard 亲测可用

我的是Ubuntu 22.04.1 LTS,参考官网的源码方式安装即可 apisix-dashboard安装参考地址&#xff1a;Basic Deploy | Apache APISIX -- Cloud-Native API Gateway 需要注意的细节 1.服务无法下载源码&#xff0c;可到如下地址下载再上传 Downloads | Apache APISIX -- Cloud-Na…

element表格el-table对指定行设置背景颜色

示例&#xff1a;对当天&#xff08;星期几&#xff09;的数据设置背景色 使用 :row-class-name 实现 <el-table :data"tableData" style"width: 100%" border :row-class-name"tableRowClassName"><el-table-column prop"week&…