簡易設定ファイルパーサー
概要
簡易的な設定ファイルパーサー、結構面白いアイディアで、昔先生から教わったものです。C++ で書いている。
自作ゲームでゲームパッドのキーコンフィグ保存用に使っていた物が原型である。
本論
ソースコード
test.cpp/* * Easy config parser * 簡易設定ファイルパーサー * jskny */ #include <iostream> #include <string> #include <map> #include <cstdio> using namespace std; map<string, int> g_config; bool SetConfigData(const char* const key, int val) { if (!key) { return (false); } g_config[key] = val; return (true); } int GetConfigData(const char* const key) { if (!key) { return (false); } return (g_config[key]); } int main(int argc, char* argv[]) { // 設定ファイル const char* const urlFile = "./config.txt"; FILE* fp; fp = fopen(urlFile, "r"); if (fp == NULL) { cerr << "file is not found." << endl; return (-1); } int line = 0; char buf[300]; while (true) { int v = 0; int r = EOF; ++line; // [key 1234] という形式 r = fscanf(fp, "%s%d", buf, &v); if (r == EOF) { break; } // TODO: Debug mode only. erase. cout << "[debug] line " << line << " into " << buf << "," << v << endl; SetConfigData(buf, v); } fclose(fp); fp = NULL; // Get data. cout << "Get config data." << endl; cout << "Is debug ? " << GetConfigData("debug") << endl; cout << "Is debug ? " << (GetConfigData("debug") == 1 ? "yes" : "no") << endl; cout << "test is = " << GetConfigData("test") << endl; cout << "end." << endl; return (0); }
設定ファイル
config.txtdebug 1 test 100020
結果
[debug] line 1 into debug,1 [debug] line 2 into test,100020 Get config data. Is debug ? 1 Is debug ? yes test is = 100020 end.
感想
面白いアイディアだと思う。
以上