簡易設定ファイルパーサー
概要
簡易的な設定ファイルパーサー、結構面白いアイディアで、昔先生から教わったものです。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.
感想
面白いアイディアだと思う。
以上