C++

C++でCSVファイルを読むときに便利なライブラリ【Fast C++ CSV Parser】

Fast Cpp CSV Parser

こんにちは。

現役エンジニアの”はやぶさ”@Cpp_Learningです。

C++でCSVファイルを読むときに便利なライブラリ”fast-cpp-csv-parser”を見つけたので、勉強しながら色々なサンプルコードを作成しました。

備忘録も兼ねて本記事を書きます。

CSVとは

CSVとは、カンマ「 , 」で区切ったテキストデータのことです。本記事で使用するcsvファイル”test.csv”は以下の通り。

name, height, weight, label
Hayabusa, 1.7, 63, 1
Kururu, 0.2, 0.19, 1
Pocha, , 1.1, 2
Ururu, 0.3, 0.9, 2

はやぶさ(Hayabusa), フクロウのくるる(Kururu), フェレットのぽちゃ(Pocha), フェレットのうるる(Ururu)の身長・体重・ラベルのデータです。

家族紹介

※我が家に住み着いている可愛い動物たち。可愛い写真をもっと見たい人は以下のサイトへGo!

VSCode拡張機能 -Rainbow CSV-

ExcelでCSVファイルを読み書きする人が多いと思いますが、私はVisual Studio Codeの拡張機能”Rainbow CSV”を愛用しています。

Rainbow CSVを使えば、先ほど紹介した”test.csv”が以下のように綺麗に表示されます。

Rainbow CSV
Rainbow CSV

Rainbow CSVの使い方や魅力については、以下の記事で丁寧に説明しています。

ここから本番!

スポンサーリンク

Fast C++ CSV Parserの基本的な使い方

fast-cpp-csv-parser|GitHubは”ヘッダーオンリーなライブラリ”なので、”csv.h”をインクルードするだけで使うことができます。

fast-cpp-csv-parserのシンプルな使い方は以下の通りです。

順番に解説していきます。

Fast C++ CSV Parserの解説

最初に各カラムの型を定義します。

次に読み込みたいCSVファイルとカラム数を設定します。

続いてヘッダー情報を設定します(カラム数を”4”と設定したので、カラムを4つセット)

以下のコードで1行ずつパラメータを取得し、任意の処理を行います。

今回は、”test.csv”の全情報をターミナルに表示させてみます。

ビルドと動作確認

最初に紹介したソースコードを”sample.cpp”と名付け、以下のコマンドでビルドします。

g++ -std=c++0x sample.cpp -o sample -lpthread

“sample”という実行ファイルができるので、以下のコマンドで実行します。

./sample

一連の流れを実施したときのターミナル画面は以下の通りです。

Fast C++ CSV Parser

以下の記事で紹介したWSL(Windows Subsystem for Linux)で動作確認しています。

VSCodeからWSLを使う
【WSL】Windows10とUbuntuとVSCodeで快適なプログラミング環境を構築Windows Subsystem for Linux(WSL)とVisual Studio Code(VSCode)で快適なプログラミング環境を構築する方法を説明します。C言語とC++とPythonなどのプログラミング言語を使う人にオススメの記事です。...

※C++11がビルドできる環境ならWindows/Linuxどちらでも動きます。

Fast C++ CSV Parserの応用

以降から応用編です。

カラムを指定して抽出

指定したカラムの情報のみを抽出することもできます。例えば、以下のコードでnameとheightのみを抽出できます。

先ほど同様にビルドおよび実行した結果が以下です。

Fast C++ CSV Parser

※ぽちゃ(Pocha)の身長は欠損データですが”0″で補間されます

Rainbow CSV
Rainbow CSV

行数を取得する

以下のコードで行数を取得することができます。

ただし、ヘッダー(カラム名の部分)から1行目とカウントするので、以下のコード(23行目)のように”-1”すると良いです。

実行結果は以下の通り。

Fast C++ CSV Parser

指定行の情報を抽出

指定した行のみを抽出することもできます。例えば、以下のコードで2~3行目を抽出できます。

実行結果は以下の通り。

Fast C++ CSV Parser

条件付きで情報抽出

身長制限などの条件付きで情報を抽出することもできます。例えば、以下のコードでラベルが”2”の動物のみ抽出できます。

実行結果は以下の通り。

Fast C++ CSV Parser

コードの25行目を好きな条件式に変更して下さい

ベクトルに代入

後処理で扱いやすいように、抽出した情報をベクトル(std::vector)に代入します。

実行結果は以下の通り。

Fast C++ CSV Parser

ベクトル(std::vector)ではなく、EigenNumCppを使うのも良いと思います

まとめ

C++でCSVファイルを読むときに便利なライブラリ”fast-cpp-csv-parser”の使い方について、複数のサンプルコードを交えて説明しました。

C++で手軽にCSVファイルを扱いたい人にオススメのライブラリですので、是非使ってみて下さい。

はやぶさ
はやぶさ
理系応援ブロガー”はやぶさ”@Cpp_Learningは頑張る理系を応援します!
LINEスタンプ配信中!

フクロウのLINEスタンプ

当サイトのマスコットキャラクター

「フクロウのくるる」が

LINEスタンプになりました!

勉強で疲れたあなたに癒しをお届け☆

お迎え待ってます(*・ω・)ノ♪

今すぐお迎えする

40個セットがたったの50コインとお得です