文档章节

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

for。
 for。
发布于 2015/12/28 21:40
字数 280
阅读 194
收藏 1
点赞 0
评论 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。

粉丝 80
博文 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
nsqlookupd 入口文件分析

nsq 中 nsqlookupd 角色相对简单,适合作为分析 nsq 的入口 apps/nsqlookupd/nsqlookupd.go nsqlookupd 是一个独立的程序,所以放到 apps 目录下,依赖内部包 nsqlookupd, util,外部包: gi...

智深
2014/07/31
0
0
开源中国/svnsrv

svnsrv svnsrv 是 Subversion Protocol Dynamic Proxy Server (基于 svn 协议的动态代理服务器),通过对用户请求的解析, 得到资源目标的机器,即时与资源服务器建立连接,实现客户端与资源服...

开源中国
2016/02/19
0
0
Confman - 针对「Node 应用」的配置文件加载模块

一句话介绍 confman 是一个强大的配置文件加载器,无论你喜欢 yaml 、cson、json、properties、plist、ini、toml、xml 还是 js,都能满足你的愿望,并且更加简单、更加强大。 支持的特性 支持...

Hou_feng
2016/07/26
41
0
TCP 层的路由器--TcpRoute2

TcpRoute, TCP 层的路由器。对于 TCP 连接自动从多个线路(允许任意嵌套)、多个域名解析结果中选择最优线路。TcpRoute2 是 golang 重写的版本。 通过 socks5 代理协议对外提供服务。 代理功能...

GameXG
2015/12/31
4.2K
6
mylxsw/remote-tail

RemoteTail RemoteTail是一款支持同步显示多台远程服务器的日志文件内容更新的工具,使用它可以让你同时监控多台服务器中某个(某些)日志文件的变更,将多台服务器的命令的输出合并展示。相...

mylxsw
2016/09/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

什么?你的私钥泄漏了?

代码签名是一种当代标准做法,其中软件开发人员通过可信证书颁发机构的验证,并接收可用于签署脚本和可执行文件的证书和私钥。 几乎每个设备,操作系统和网络浏览器都经过硬编码,以尽可能少...

亚洲诚信
5分钟前
0
0
Iterm2安装Zsh + Oh My Zsh+Solarized

安装Oh My Zsh curl -L https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh | sh 安装Zsh: 1.安装zsh brew install zsh 2.配置iterm2 sudo vim /etc/shells输入:......

孟飞阳
13分钟前
0
0
缓解ddos攻击的有效解决办法

因为防火墙无法处理所有类型的ddos攻击,下一代防火墙生成内置的DDoS防御,但是无法处理所有类型的攻击。对抗DDoS攻击的最佳做法是有专属的设备或者服务在攻击透过防火墙或者其他的IT基础设施...

上树的熊
13分钟前
0
0
Spark Streaming如何使用checkpoint容错

在互联网场景下,经常会有各种实时的数据处理,这种处理方式也就是流式计算,延迟通常也在毫秒级或者秒级,比较有代表性的几个开源框架,分别是Storm,Spark Streaming和Filnk。 伦理片 http...

刺猬一号
15分钟前
1
0
Xamarin Essentials教程地理定位Geolocation

Xamarin Essentials教程地理定位Geolocation 通过地理定位功能,应用程序可以获取用户的当前地理位置,如经纬度值。利用地理位置,可以在地图上定位,也可以转化物理位置,划分用户的归属地。...

大学霸
28分钟前
0
0
vue 编译警告 Compiled with 4 warnings

There are multiple modules with names that only differ in casing. This can lead to unexpected behavior when compiling on a filesystem with other case-semantic. Use equal casing.......

落雪飞声
32分钟前
0
0
开篇文章,长期记录安全情形

密码位置 密码位于注释中 密码位于服务器端文件中 通过访问根目录下.htaccess、robots.txt查看禁查路径 密码文件可能存在的路径:/、/extra/、/extras/ 密码加密 binary to base16 sha256 彩虹...

hirainn
45分钟前
0
0
mysql数据库设置root可以远程登录的方法

mysql数据库设置root可以远程登录的方法 Posted on 2018-02-21 21:08 sishuisufeng 阅读(161) 评论(0) 编辑 收藏 允许root用户在任何地方进行远程登录,并具有所有库任何操作权限,具体操作如...

rootliu
49分钟前
1
0
TensorFlow 图的基本操作

图的创建,一般只需要使用默认图就能满足大部分的需求了 # 1 创建图的方法# 在默认图中创建常量c = tf.constant(0.0)# 新建一个图g = tf.Graph()# 设置上下文管理器,标明操作...

阿豪boy
今天
0
0
git 忽略文件失效

git update-index --assume-unchanged */.project

林子大鸟
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部