文档章节

使用cpptoml 读取 TOML 格式配置文件

for。
 for。
发布于 2015/12/28 21:40
字数 280
阅读 243
收藏 1

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 <iostream>
#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 << "    Host:" << mysqlArg.host << std::endl;
        std::cout << "    Port:" << mysqlArg.port << std::endl;
        std::cout << "Database:" << mysqlArg.database << std::endl;
        std::cout << "Username:" << mysqlArg.username << std::endl;
        std::cout << "Password:" << mysqlArg.password << std::endl;
    }

    return 0;
}

bool readMySQLConfig(const char *file, MySQLArg &mysqlArg)
{
    std::shared_ptr<cpptoml::table> g;
    try {
        g = cpptoml::parse_file(file);
    } catch (const cpptoml::parse_exception &e) {
        std::cerr << "parse_file error: " << e.what() << std::endl;
        return false;
    }

    auto Strings = [&](const char *key, const char * value)->std::string {
        if (g->contains_qualified(key)) {
            return g->get_qualified(key)->as<std::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<int64_t>()->get();
            return static_cast<int>(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


© 著作权归作者所有

共有 人打赏支持
for。

for。

粉丝 83
博文 47
码字总数 18257
作品 0
深圳
程序员
加载中

评论(1)

h
hhello-wow
你好,谢谢你的回复,我大概看了下c源码,准备用起来出现了问题,能否帮忙解决,我是cmake之后make 出现
make2: *** No rule to make target 'RAGEL-NOTFOUND', needed by 'toml_parse.c'. Stop.
CMakeFiles/Makefile2:104: recipe for target 'CMakeFiles/toml.dir/all' failed
make1: *** [CMakeFiles/toml.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2

这样的错误,'toml_parse.c',在源码中是以.rl格式出现的,是否需要将其拷贝为c文件,还是其他方式,小白一枚,烦请解答
用cpptoml 读取 TOML 格式配置文件

@for 你好,想跟你请教个问题:关于你的博文:使用cpptoml 读取 TOML 格式配置文件,好像并没有给出很好的解释,能不能再具体点呢,有没有用c试过?

hhello-wow
2016/11/26
174
3
小型配置脚本语言--TOML

TOML -> Tom's Obvious, Minimal Language. TOML 类似 INI 配置的语法,但更好!TOML 的目标是成为一个极简的配置文件格式。TOML 被设计成可以无歧义地被映射为哈希表,从而被多种语言解析。...

匿名
2013/02/25
4.7K
2
PhalGo-Viper获取配置

PhalGo-Viper获取配置 viper项目地址:https://github.com/spf13/viper 什么是viper viper是国外大神spf13编写的开源配置解决方案,viper拥有一下功能以及特性如下: 设置默认值 从JSON,toml ...

喵了_个咪
2016/06/01
188
0
TOML-to-Go : 帮你快速生成 Go 结构体

TOML 的目标是成为一个极简的配置文件格式。TOML 被设计成可以无歧义地被映射为哈希表,从而被多种语言解析。 通过 toml-to-go 提供的 Web UI,可以方便的将 TOML 转换成 Golang 结构体。 在...

xuri
03/16
0
0
将 TOML 转换为 Go 结构体--TOML-To-Go

TOML 的目标是成为一个极简的配置文件格式。TOML 被设计成可以无歧义地被映射为哈希表,从而被多种语言解析。 通过 toml-to-go 提供的 Web UI,可以方便的将 TOML 转换成 Golang 结构体。 在...

xuri
2016/08/20
557
0

没有更多内容

加载失败,请刷新页面

加载更多

Bash常用内置变量介绍

Bash常用内置变量介绍 Bash中有很多内置变量,这些变量不仅影响Bash的相关行为,也大大的方便了用户的常见操作。**Bash内置变量大体上包括两类,一类是传统Shell所具备的,另一类就是Bash所特...

小陶小陶
36分钟前
1
0
05-《深度拆解Java虚拟机》之JVM是如何执行方法调用的?(下)

一、问题引入 我们知道,设计模式大量使用了虚方法来实现多态。但是虚方法的性能效率并不高,所以作者就想在此基础上写篇文章,评估每一种设计模式因为虚方法调用而造成的性能开销,并且在文...

飞鱼说编程
56分钟前
3
0
nginx统一入口 多服务出口

nginx配置多ip和端口统一调用入口log_format中$upstream_addr 标识打印转发的url地址配置upstream和locationhttp {include mime.types;default_type application/octet-stream...

GoldenVein
57分钟前
3
0
阿里P9架构师谈:高并发网站的监控系统选型、比较、核心监控指标

在高并发分布式环境下,对于访问量大的业务、接口等,需要及时的监控网站的健康程度,防止网站出现访问缓慢,甚至在特殊情况出现应用服务器雪崩等场景,在高并发场景下网站无法正常访问的情况...

我是你大哥
59分钟前
2
0
华为HiAI 助力苏宁易购,让你尽享完美视觉购物体验!

还在感慨商品照片与实物存在差距,又要退货? 还在抱怨被忽视的图片小细节,影响了生活品质? 想要“买买买”, 又担心海量的商品图片耗光你的流量? 就在近期 搭载HiAI能力的苏宁易购新版上线...

华为终端开放实验室
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部