[M1 Mac, Big Sur 11.6.8, clang 13.0.0, NO IDE]
よく使う色をまとめたCSVファイルを作成しておいてアプリに読み込ませました。
RGBで登録するとカンマがvectorに入り込むため処理が少しややこしくなります。
#include <csvProcessChar.h>
#include <cppstd.h> // 自製C++標準ライブラリ群
vector<vector<const char*>> csvProcessChar::load(string path) {
string eles;
string ele;
vector<vector<const char*>> vec2D;
// csvファイル指定
std::ifstream file(path);
while (getline(file, eles)) {
vector<const char*> vec;
std::istringstream line(eles);
vector<string> rgb;
cout << "eles " << eles << endl;
int num = 1;
if (eles.find("RGB") == std::string::npos){
while (getline(line, ele, ',')) {
if (num == 1){
const char* name_c = ele.c_str();
char* name_c2 = new char[strlen(name_c) + 1];
strcpy(name_c2, name_c);
vec.push_back(name_c2);
} else if (num == 2){
const char* roma_c = ele.c_str();
char* roma_c2 = new char[strlen(roma_c) + 1];
strcpy(roma_c2, roma_c);
vec.push_back(roma_c2);
} else {
const char* code_c = ele.c_str();
char* code_c2 = new char[strlen(code_c) + 1];
strcpy(code_c2, code_c);
vec.push_back(code_c2);
}
num += 1;
}
} else {
// RGBの場合
while (getline(line, ele, ',')) {
if (num == 1){
const char* name_c = ele.c_str();
char* name_c2 = new char[strlen(name_c) + 1];
strcpy(name_c2, name_c);
vec.push_back(name_c2);
} else if (num == 2){
const char* roma_c = ele.c_str();
char* roma_c2 = new char[strlen(roma_c) + 1];
strcpy(roma_c2, roma_c);
vec.push_back(roma_c2);
} else {
rgb.push_back(ele); // 3番目以降は一旦vectorへ入れてから後で結合する
}
num += 1;
}
}
if (!(rgb.size() == 0)){
cout << "RGBあり" << endl;
const char* delim = ","; // 区切り文字
// vector要素結合
std::ostringstream os;
std::copy(rgb.begin(), rgb.end(), std::ostream_iterator<string>(os, delim));
string str = os.str();
const char* code_c = str.c_str();
char* code_c2 = new char[strlen(code_c) + 1];
strcpy(code_c2, code_c);
vec.push_back(code_c2);
}
vec2D.push_back(vec);
}
return vec2D;
}