[C++] 115 CSVファイルから2次元vectorへ変換

[M1 Mac, Big Sur 11.6.7, clang 13.0.0, NO IDE]

[C++]114の逆変換です。こちらは少しだけ手間取りました。

ところでstd::stringを使う時は<string>をインクルードしがちですが、<iostream>だけでOKです。

#include <iostream>
#include <fstream>
#include <vector>
#include <utility>
#include <sstream>

using std::string; using std::vector;
using std::cout; using std::endl;

int main () {
    string eles;
    string ele;
    vector<vector<string>> vec2D;
  
    // csvファイル指定
    std::ifstream file("test.csv");

    while (getline(file, eles)) {
        vector<string> vec;  
        std::istringstream line(eles);

        while (getline(line, ele, ',')) {
            vec.push_back(ele);
        }
        
        vec2D.push_back(vec);
    }

    // vec2Dの内容確認
    int line_num = 1;
    for (const auto &items : vec2D) {
        for (const auto &item : items) {
            cout << line_num << " " << item << endl;
        }
        line_num += 1;
    }
}
--------------------------------------------------
出力例
--------------------------------------------------
1 cadetblue
1 -
1 0x5F9EA0
2 若竹色
2 わかたけいろ
2 0x68BE8D

[C++] 114 2次元vectorからCSVファイル作成

[M1 Mac, Big Sur 11.6.7, clang 13.0.0, NO IDE]

2次元vectorからCSVファイルを作成しました。Pythonより簡単で拍子抜けです。

#include <iostream>
#include <fstream>
#include <vector>
#include <utility>

using std::string; using std::vector;

int main()
{
    // ファイル名指定
    std::ofstream file("test.csv");
    vector<vector<string>> vec;

    // vector作成
    vector<string> data1 = {"cadetblue","-","0x5F9EA0"};
    vector<string> data2 = {"若竹色","わかたけいろ","0x68BE8D"};
    vec.push_back(data1);
    vec.push_back(data2);

    // データ取り込み
    for (auto &&data : vec) {
        file << data[0] << ',' << data[1] << ',' << data[2] << '\n';
    }

    // ファイル出力完了
    file.close();
}

[C++] 113 FLTK : メニュー追加 Fl_Menu_Item

[M1 Mac, Big Sur 11.6.7, clang 13.0.0, NO IDE]

ここ最近、課題が増えてきて整理しているところです。

カラーアプリについてはWindows11への移植に着手したものの、Explorerのファイラーとしての物足りなさを改めて実感し、秀丸ファイラーClassicを使い始めました。

Macの方もCommander Oneというシェアウェアを導入しました。どちらも複数タブ表示機能があります。秀丸ファイラーClassicにこの機能が搭載されたのが2010年ですから、そんなに新しいものでもないようです。

ここで新たな課題として自分仕様のファイラーを作ってみようと思い、Mac版の言語をObjective-C++、Swift、あるいはC++にするか考えを巡らせています。

一方、カラーアプリで追加したい機能もあり、まずこちらに優先して取り組みます。

繰り返し使う色のカラーコードをファイルで保管するために履歴関連機能を強化します。履歴の保存、読込機能になります。エクスポート、インポート機能のようなものです。ファイルタイプはCSV、JSON、XMLあたりでしょうか。

とりあえずFl_Menu_Itemを書き換えました。開発モードは別メニューに分離させています。

static Fl_Menu_Item	items[] = {
        { "履歴", 0, 0, 0, FL_SUBMENU },
        { "読込", 0, loadHistory, 0, 0 },
        { "保存", 0, saveHistory, 0, 0 },
        { "消去", 0, deleteHistory, 0, 0 },
        { 0 },
#ifdef DEV
        { "開発", 0, 0, 0, FL_SUBMENU },
        { "開発モード", 0, showSubWindow, 0, 0 },
        { 0 }
#else
#endif
};
    
Fl_Sys_Menu_Bar *menubar;
menubar = new Fl_Sys_Menu_Bar(0, 0, 60, 20);
menubar->box(FL_FLAT_BOX);
menubar->menu(items);