[M1 Mac, Big Sur 11.6.7, clang 13.0.0, NO IDE]
前回、前々回の成果を合わせてCSVファイルを作成・読み込みする動的・静的ライブラリを作成しました。
#include <iostream>
#include <fstream>
#include <vector>
#include <utility>
#include <sstream>
using std::string; using std::vector;
using std::cout; using std::endl;
class csvProcess {
public:
static void make(string path, vector<vector<string>> vec2D);
static vector<vector<string>> load(string path);
};
#include <csvProcess.h>
vector<vector<string>> csvProcess::load(string path) {
string eles;
string ele;
vector<vector<string>> vec2D;
// csvファイル指定
std::ifstream file(path);
while (getline(file, eles)) {
vector<string> vec;
std::istringstream line(eles);
while (getline(line, ele, ',')) {
vec.push_back(ele);
}
vec2D.push_back(vec);
}
int line_num = 1;
for (const auto &items : vec2D) {
for (const auto &item : items) {
cout << line_num << " " << item << endl;
}
line_num += 1;
}
return vec2D;
}
void csvProcess::make(string path, vector<vector<string>> vec2D) {
// ファイル名指定
std::ofstream file(path);
// データ取り込み
for (const auto &data : vec2D) {
int num = 0;
for (const auto &ele : data){
int len = data.size();
if (num < len -1){
file << ele << ",";
} else {
file << ele << "\n";
}
num += 1;
}
}
// ファイル出力完了
file.close();
}
# 動的ライブラリ作成コマンド
clang++ -dynamiclib -o csvProcess.dylib csvProcess.cpp \
-I/code/cpp/mylib/include -std=c++17
# 静的ライブラリ作成コマンド
clang++ -std=c++17 -I/code/cpp/mylib/include -g -o csvProcess.o \
-c csvProcess.cpp
ar r csvProcess.a csvProcess.o
#include <csvProcess.h>
int main () {
vector<vector<string>> vec2D;
// vector作成
vector<string> data1 = {"cadetblue","-","0x5F9EA0"};
vector<string> data2 = {"若竹色","わかたけいろ","0x68BE8D"};
vec2D.push_back(data1);
vec2D.push_back(data2);
string path = "test.csv";
csvProcess::make(path, vec2D);
}