[C++] サードパーティのオープンソース CSV 解析ライブラリの導入と使用

csv形式とは何ですか?

CSV 形式 (カンマ区切り値) は、さまざまなデータ フィールドを区切るための区切り文字としてカンマ (または \t などの他の特定の文字) を使用する一般的なスプレッドシート ファイル形式です。CSV ファイルは通常、人事情報や製品情報などの表形式のデータを保存するために使用されます。

CSV ファイルには次の特徴があります。

  1. プレーンテキスト形式で、読みやすく、編集しやすい。
  2. 通常、最初の行は各列のフィールド名ですが、列ヘッダーがない場合もあります。
  3. 各行はデータ レコードを表し、各列はデータ フィールドを表します。
  4. データの分析と処理を容易にするための並べ替えおよびフィルター機能をサポートします。

CSV ファイルの拡張子は通常、「data.csv」などの「.csv」です。

カンマ区切りの CSV ファイルの例をいくつか示します。

1. 人事情報テーブル(カンマ区切り)

姓名,年龄,性别,地址
张三,25,男,北京
李四,30,女,上海
王五,28,男,广州

2. 製品情報テーブル(\t区切り)

商品编号    商品名称    单价    库存
001    电视    3000    50
002    冰箱    4000    30
003    洗衣机    2000    20

3. 生徒の成績表 (カンマ区切り、列ヘッダー情報なし)

001,张三,85,90,78
002,李四,78,85,92
003,王五,92,88,80

CSV ファイルは、テキスト エディター (notepad++ など) または表計算ソフトウェア (office Excel など) を使用して開いたり、データ分析や処理のために対応するアプリケーション (Python pandas Frame など) にインポートしたりできます。

C++ オープンソース CSV 解析ライブラリ csv-parse

Rapidcsv

GitHub - auscanaoy/rapidcsv: C++ CSV パーサー ライブラリ

 

使用例:

Colhdr.csv:

    Open,High,Low,Close,Volume,Adj Close
    64.529999,64.800003,64.139999,64.620003,21705200,64.620003
    64.419998,64.730003,64.190002,64.620003,20235200,64.620003
    64.330002,64.389999,64.050003,64.360001,19259700,64.360001
    64.610001,64.949997,64.449997,64.489998,19384900,64.489998
    64.470001,64.690002,64.300003,64.620003,21234600,64.620003

C++ コード:

#include <iostream>
#include <vector>
#include "rapidcsv.h"

int main()
{
    rapidcsv::Document doc("examples/colhdr.csv");

    std::vector<float> col = doc.GetColumn<float>("Close");
    std::cout << "Read " << col.size() << " values." << std::endl;
}

その他の例については、 GitHub - auscanaoy/rapidcsv: C++ CSV パーサー ライブラリ を参照してください。

Vince の CSV パーサー

GitHub - vincentlaucsb/csv-parser: CSV (および同様の) ファイルの読み取り、書き込み、分析のための最新の C++ ライブラリ。 

 使用例:

#include <csv.hpp>

struct GerberHoleInfo{
    double xInch;
    double yInch;
    double rInch;
    double xPixel;
    double yPixel;
    double rPixel;
    double inch2PixelRatio = 360.0;
};


std::vector<GerberHoleInfo> parseGerberHoleInfos(const std::string& gerberFilePath, double inch2PixelRatio){
     std::vector<GerberHoleInfo> holeInfos;
     csv::CSVFormat format;
     format.delimiter(',').quote(false).no_header();
     csv::CSVReader reader(gerberFilePath, format);
     for(csv::CSVRow& row:reader){
        double x = std::stod(row[0].get());
        double y = std::stod(row[1].get());
        double r = std::stod(row[2].get());
        GerberHoleInfo holeInfo;
        holeInfo.xInch = x;
        holeInfo.yInch = y;
        holeInfo.rInch = r;
        holeInfo.inch2PixelRatio = inch2PixelRatio;
        holeInfo.xPixel = x * inch2PixelRatio;
        holeInfo.yPixel = y * inch2PixelRatio;
        holeInfo.rPixel = r * inch2PixelRatio;
        holeInfos.push_back(holeInfo);
    }
    return holeInfos;
}

その他の例については、 GitHub - vincentlaucsb/csv-parser: CSV (および類似の) ファイルの読み取り、書き込み、分析のための最新の C++ ライブラリを 参照してください。

CSVパーサー

GitHub - AriaFallah/csv-parser: 高速、ヘッダーのみ、広範囲にテストされた C++11 CSV パーサー

CSVパーサー

GitHub - rsylvian/CSVparser: CSV ファイル形式用の C++ パーサー

高速cpp-csv-パーサー 

GitHub - ベン・ストラッサー/fast-cpp-csv-parser: fast-cpp-csv-parser

おすすめ

転載: blog.csdn.net/u011775793/article/details/135360872