c语言解析toml文件,使用cpptoml 读取 TOML 格式配置文件

1. 获取cpptoml

只需要 cpptoml.h 。

$ git clone https://github.com/skystrife/cpptoml.git

2. TOM配置

mysql.toml配置文件如下:

[Title]

Author="lowkey2046"

[MySQL]

Host="127.0.0.1"

Port=3306

Database="testdb"

Username="root"

Password="lowkey2046"

3. C++代码

mysqltoml.cpp 文件如下:

#include 

#include "cpptoml.h"

struct MySQLArg{

std::string host;

int32_t port;

std::string database;

std::string username;

std::string password;

};

bool readMySQLConfig(const char *file, MySQLArg &mysqlArg);

int main(int argc, char **argv)

{

char filename[] = "./mysql.toml";

MySQLArg mysqlArg;

if (readMySQLConfig(filename, mysqlArg)) {

std::cout <

std::cout <

std::cout <

std::cout <

std::cout <

}

return 0;

}

bool readMySQLConfig(const char *file, MySQLArg &mysqlArg)

{

std::shared_ptr<:table> g;

try {

g = cpptoml::parse_file(file);

} catch (const cpptoml::parse_exception &e) {

std::cerr <

return false;

}

auto Strings = [&](const char *key, const char * value)->std::string {

if (g->contains_qualified(key)) {

return g->get_qualified(key)->as<:string>()->get();

}

if (!value)

return std::string();

return std::string(value);

};

auto Integer = [&](const char *key, int value)->int {

if (g->contains_qualified(key)) {

auto integer = g->get_qualified(key)->as()->get();

return static_cast(integer);

}

return value;

};

mysqlArg.host = Strings("MySQL.Host", "127.0.0.1");

mysqlArg.port = Integer("MySQL.Port", 3306);

mysqlArg.database = Strings("MySQL.Database", "testdb");

mysqlArg.username = Strings("MySQL.Useranme", "root");

mysqlArg.password = Strings("MySQL.Password", "123456");

return true;

}

4. 编译

$ g++ -std=c++11 mysqltoml.cpp -o mysqltoml

5. 执行

$ ./mysqltoml

Host:127.0.0.1

Port:3306

Database:testdb

Username:root