C++でcsvファイルを読み込む(読み込み編)

前回ファイルパスを取得出来たので今回はそのファイルパスの場所にあるcsvファイルを読み込むやり方を書いていこうと思います。

読み込む処理の流れは

1.ファイルを開く

2.開いたファイルの内容を1行毎に取得する。

3.取得した内容を,(カンマ)毎に区切って文字列の配列に代入する

という感じです。

コードを書いていきます。

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

using namespace std

void GetCsvData(filesystem::path CsvPath)
{
    ifstream CsvFile(CsvPath);//読み込むcsvファイル
    string GetLineData;//取得したデータ
   
    //EOFに達するまで1行毎に読み込みむ処理
    while(getline(CsvFile,GetLineData))
    {
        istringstream GetData(GetLineData);//取得したデータをsstreamへ代入
        vector<string> Data;//カンマ毎に区切った配列
        string s0;//カンマ毎に区切った文字列を一時的に保持する変数

        //カンマ毎に区切って配列に代入
        while(getline(GetData,s0,','));
        {
            Data.push_back(s0)//カンマ毎に区切って配列に追加
        }
        //ここから取得した値に対する処理を記述

    }
}

こんな感じです。
流れとしてはifstreamでファイルを開いてgetlineで1行ずつ取得、
取得した文字列をカンマ毎に区切ってそれぞれを配列にしたstringで受けるという感じです。

なお、実際にATSプラグイン等で使用する場合はファイルを開けなかった場合や開いたファイルが空だったりした場合にvectorが空のまま(初期状態)となってしまうため、
そのまま参照すると例外が発生してしまいます。
対策として配列の最初または最後に何かしらの値を入れる処理を足しておくとよいでしょう。

また、取得した値は文字列なので数字の型に変換する場合stoi(),stod()などが使用出来ますがこれらの関数は取得した値が数字以外の場合は例外が発生します。
これらの処理を行う場合はtry-catchをうまく使って例外を回避するように処理を組む必要があります。


csvの読み込み方法は以上です。
質問、ご意見等あればtwitter(@ct_813)までどうぞ。