[M1 Mac, Monterey 12.6.3, clang 13.0.0, FLTK 1.3.8, ChatGPT Plus, NO IDE]
せっかくAIを使っているのですから、作成しているJSONファイルの命名を手伝わせています。
指定の文字数は守らない、カギ括弧を付けるなと指示しても付けてくる、など全然ルールを守りませんが最低限のことはやってくれます。
カギ括弧はこちらで削除したいものの、良い方法が分からず模索中です。
void renameCB(Fl_Widget*, void*){
input -> value("これまでの質問回答の内容から15文字程度で日本語タイトルを考えて下さい。英単語が混ざってもかまいません。");
sendBtn->do_callback();
Fl_Text_Buffer* buffer = output->buffer();
title = buffer->text();
cout << "title加工前: " << title << endl;
// 先頭の半角スペースを削除する
title.erase(title.begin(), std::find_if(title.begin(), title.end(), [](char c) {
return !std::isspace(c);
}));
if (title.length() > 0) {
char c = title[0];
if ((c >= 0x21 && c <= 0x2F) || (c >= 0x3A && c <= 0x40) || (c >= 0x5B && c <= 0x60) || (c >= 0x7B && c <= 0x7E)|| c == static_cast<char>(0x300C) || c == static_cast<char>(0x300D)) {
// 先頭の文字が記号である場合
title.erase(title.begin(), title.begin() + 3);
}
}
if (title.length() > 0) {
char c = title.back();
if ((c >= 0x21 && c <= 0x2F) || (c >= 0x3A && c <= 0x40) || (c >= 0x5B && c <= 0x60) || (c >= 0x7B && c <= 0x7E) || c == static_cast<char>(0x300C) || c == static_cast<char>(0x300D)) {
// 末尾の文字が記号である場合(カギ括弧を含む)
title.erase(title.end() - 3, title.end());
}
}
cout << "title加工後: " << title << endl;
vector<string> tokens;
string delimiter = ".";
size_t pos = 0;
string token;
string jsonFileStr = string(jsonFile);
while ((pos = jsonFileStr.find(delimiter)) != string::npos) {
token = jsonFileStr.substr(0, pos);
tokens.push_back(token);
jsonFileStr.erase(0, pos + delimiter.length());
}
tokens.push_back(jsonFile);
string jsonFileNew = tokens[0] + "_" + title + ".json";
cout << "jsonFileNew: " << jsonFileNew << endl;
int result = std::rename(jsonFile.c_str(), jsonFileNew.c_str());
if (result == 0) {
std::printf("File renamed successfully.\n");
} else {
std::printf("Error renaming file.\n");
}
Fl_Text_Buffer* bufferNotice = new Fl_Text_Buffer();
string notice = "JSONファイルをリネームしました。\n" + jsonFileNew;
bufferNotice -> text(notice.c_str());
noticeDisplay -> buffer(bufferNotice);
}