MEMO blog

主に自分用のメモです

【cpp】csvファイルを読み込む

csvを読み込む。
大抵は1行ずつ読み込んで処理する方がいい気がするけど、
とりあえず、ファイルの内容を全部読み込んでstring型の2次元配列に放り込むバージョン。

read_csv.h

#ifndef __READ_CSV_H__
#define __READ_CSV_H__

#include <string>
#include <vector>

using namespace std;

typedef vector<string> StringArray;
typedef vector<StringArray> StringArray2D;

void readCSV(const string &file_path, StringArray2D &file_contents);
void splitByDelim(const string &src, StringArray &dst, const char &delim = ',');

#endif // __READ_CSV_H__

read_csv.cpp

#include "read_csv.h"
#include <fstream>
#include <sstream>

void readCSV(const string &file_path, StringArray2D &file_contents)
{
    file_contents.clear();
    ifstream ifs(file_path);
    string line;
    while(!ifs.eof())
    {
        getline(ifs, line);
        StringArray splitted;
        splitByDelim(line, splitted);
        file_contents.push_back(splitted);
    }
    ifs.close();

}

void splitByDelim(const string &src, StringArray &dst, const char &delim)
{
    dst.clear();

    stringstream ss(src);
    string buf;
    while( getline(ss, buf, delim) )
    {
        dst.push_back(buf);
    }
}