CSVファイルからC++のヘッダファイルとバイナリを生成する
python -m pip install git+https://github.com/te9yie/py-csv2cpp.git
python -m csv2cpp -i tests/csv -oh csv.h -ob csv.bin
usage: csv2cpp [-h] [-i INPUT_DIR] [-oh OUTPUT_HEADER] [-ob OUTPUT_BIN]
options:
-h, --help show this help message and exit
-i INPUT_DIR, --input-dir INPUT_DIR
-oh OUTPUT_HEADER, --output-header OUTPUT_HEADER
-ob OUTPUT_BIN, --output-bin OUTPUT_BIN
[`テーブル名`]
<column>,... # カラム名(メンバ変数名)
<type>,... # 変数の型
`ID1`,... # IDごとの定義を並べる
`ID2`,...
[Basic]
<column>,name,age,weight,can_battle,skill,skill,friends,friends
<type>,string,int,float,bool,Skill,Skill,string,string
alice,"Alice",24,58.5,true,FireBall,,"Carol","Dave"
bob,"Bob",32,84.5,false
struct Basic {
int name_offset;
int age;
float weight;
static constexpr int skill_len = 2;
int skill[2];
static constexpr int friends_len = 2;
int friends_offset[2];
bool can_battle;
const char* name() const {
auto top = reinterpret_cast<const std::byte*>(this + 1);
return reinterpret_cast<const char*>(top + name_offset);
}
const char* friends(std::size_t i) const {
auto top = reinterpret_cast<const std::byte*>(this + 1);
return reinterpret_cast<const char*>(top + friends_offset[i]);
}
};
- bool
- int
- float
- string
- 他のテーブルへの参照
- id (バイナリはIDの順に並ぶ)
- comment, # (コメント)
id
はIDを固定したり、バイナリの出力順を指定したいときに使う。
セーブファイルにIDを保存したりする場合は固定しておかないと行を追加した場合にずれる可能性がある。
const char* bin_data;
...
auto bin = reinterpret_cast<const BinaryArray*>(bin_data);
const BinaryArray* basic_table_p = nullptr;
bin->assign_by_id(basic_table_p, generated::TABLE_Basic);
const generated::Basic* basic_p = nullptr;
basic_table_p->assign_by_id(basic_p, generated::BASIC_alice);
basic_p->name();
basic_p->age;
...