[C++] 134 FLTK : ゼロ埋め日付の作成

[M1 Mac, Big Sur 11.6.8, FLTK 1.3.8, NO IDE]

vector<vector<string>>をCSVファイルとして保存する際、自動的にファイル名に日付と通し番号が付加されるようにしました。通し番号はゼロ埋め2桁にしたので開始番号01で99個まではソートが乱れることはありません。

購入したFinal Cut Proで早速操作動画を4トラックにて作成してみました。DTMの方はCubase Proを使っているのでプロジェクトの扱い方は何となく分かります。

ただシェイプの点滅を作成するのは少々面倒ですから簡単にできるらしいMotionを使ってみたいのですが、App Storeのレビューが散々なので様子見です。

vector<string> get_file_path(string dir, string str) {
    glob_t globbuf;
    vector<string> files;

    string suffix = "/" + str + "*.*";

    cout << "suffix " << suffix << endl;

    glob((dir + suffix).c_str(), 0, NULL, &globbuf);

    for (int i = 0; i < globbuf.gl_pathc; i++) {
        files.push_back(globbuf.gl_pathv[i]);
    }

    globfree(&globbuf);

    return files;
}

void saveFavListAuto(Fl_Widget*, void*){
    cout << "saveFavListAuto" << endl;

    time_t today = time(NULL);
    struct tm *pnow = localtime(&today);
    
    int year = pnow->tm_year-100;
    int month = pnow->tm_mon + 1;
    int day = pnow->tm_mday;

    // 日付の0埋め文字列化
    std::ostringstream os;
    os << std::setfill('0') << std::setw(2) << year;
    os << std::setfill('0') << std::setw(2) << month;
    os << std::setfill('0') << std::setw(2) << day;
    
    string today_str = os.str();

    cout << "now_str " << today_str << endl;

    // アプリ用ディレクトリの取得
    homedir = getenv("HOME");
    cout << "homedir " << homedir << endl;

    string cs = "/ColorSample";
    string appdir = string(homedir) + cs;

    cout << "appdir " << appdir << endl;

    vector<string> files_today = get_file_path(appdir, today_str);

    int count = files_today.size();

    // 通し番号の0埋め文字列化
    std::ostringstream os2;
    os2 << std::setfill('0') << std::setw(2) << count + 1;
    string count_str = os2.str();
    
    string filename = appdir + "/" + today_str + "_list" + count_str + ".csv";

    cout << "filename " << filename << endl;

    csvProcessChar::make(filename.c_str(),selectColorList);
}

[C++] 133 現在日時の取得

[M1 Mac, Big Sur 11.6.8, NO IDE]

個人的にC++ではこれまで扱ってなかったのが意外でした。

#include <stdio.h>
#include <time.h>
#include <iostream>
#include <string>
#include <sstream>
#include <iomanip>

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

int main()
{
    time_t now = time(NULL);
    struct tm *pnow = localtime(&now);
    
    int year = pnow->tm_year+1900;
    int month = pnow->tm_mon + 1;
    int day = pnow->tm_mday;
    int hour = pnow->tm_hour;
    int min = pnow->tm_min;
    int sec = pnow->tm_sec;

    // 0埋め文字列化
    std::ostringstream os;
    os << std::setfill('0') << std::setw(4) << year;
    os << std::setfill('0') << std::setw(2) << month;
    os << std::setfill('0') << std::setw(2) << day;
    os << "_";
    os << std::setfill('0') << std::setw(2) << hour;
    os << std::setfill('0') << std::setw(2) << min;
    os << std::setfill('0') << std::setw(2) << sec;

    string now_str = os.str();

    cout << "now_str " << now_str << endl;
}
--------------------------------------------------
出力例
--------------------------------------------------
now_str 20220811_184519