赞
踩
下载地址:GitHub - cktan/tomlc99: TOML C library
只需要在工程当中添加toml.h / toml.c这两个文件就可以了
以下是从文件中获取值的常用步骤:
下面是解析示例表中的值的示例。
- #include <stdio.h>
- #include <string.h>
- #include <errno.h>
- #include <stdlib.h>
- #include "toml.h"
-
- static void error(const char* msg, const char* msg1)
- {
- fprintf(stderr, "ERROR: %s%s\n", msg, msg1?msg1:"");
- exit(1);
- }
-
-
- int main()
- {
- FILE* fp;
- char errbuf[200];
-
- // 1. Read and parse toml file
- fp = fopen("sample.toml", "r");
- if (!fp) {
- error("cannot open sample.toml - ", strerror(errno));
- }
-
- toml_table_t* conf = toml_parse_file(fp, errbuf, sizeof(errbuf));
- fclose(fp);
-
- if (!conf) {
- error("cannot parse - ", errbuf);
- }
-
- // 2. Traverse to a table.
- toml_table_t* server = toml_table_in(conf, "server");
- if (!server) {
- error("missing [server]", "");
- }
-
- // 3. Extract values
- toml_datum_t host = toml_string_in(server, "host");
- if (!host.ok) {
- error("cannot read server.host", "");
- }
-
- toml_array_t* portarray = toml_array_in(server, "port");
- if (!portarray) {
- error("cannot read server.port", "");
- }
-
- printf("host: %s\n", host.u.s);
- printf("port: ");
- for (int i = 0; ; i++) {
- toml_datum_t port = toml_int_at(portarray, i);
- if (!port.ok) break;
- printf("%d ", (int)port.u.i);
- }
- printf("\n");
-
- // 4. Free memory
- free(host.u.s);
- toml_free(conf);
- return 0;
- }
TOML 表是使用字符串键进行查找的字典。在一般情况下,表上的所有访问函数都命名为 toml_*_in(...);在正常情况下,您知道密钥及其内容类型,并且可以进行检索使用以下函数之一:
- toml_string_in(tab, key);
- toml_bool_in(tab, key);
- toml_int_in(tab, key);
- toml_double_in(tab, key);
- toml_timestamp_in(tab, key);
- toml_table_in(tab, key);
- toml_array_in(tab, key);
您还可以使用整数索引查询表中的键:
- toml_table_t* tab = toml_parse_file(...);
- for (int i = 0; ; i++) {
- const char* key = toml_key_in(tab, i);
- if (!key) break;
- printf("key %d: %s\n", i, key);
- }
可以使用整数索引对 TOML 数组进行去引用。通常,数组上的所有访问方法都命名为 toml_*_at();要获取数组的大小,请执行以下操作:
int size = toml_array_nelem(arr);
若要获取数组的内容,请使用有效的索引并调用以下函数之一:
- toml_string_at(arr, idx);
- toml_bool_at(arr, idx);
- toml_int_at(arr, idx);
- toml_double_at(arr, idx);
- toml_timestamp_at(arr, idx);
- toml_table_at(arr, idx);
- toml_array_at(arr, idx);
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。