【发布时间】:2020-07-10 08:38:15
【问题描述】:
我有一个关于在我正在开发的 c++ 软件中读取settings.dat 文件的简单做法的问题。
我真的是 C++ 编程的业余爱好者……我是一名音乐家,对编写脚本以自动处理某些文档很感兴趣。请忍受我的大杂烩。
这就是我现在所拥有的。在我的主 C++ 程序中,我声明全局变量,读取 settings.dat 以获取我的运行设置,然后对许多数据文件执行各种操作。
/************************************/
/************************************/
/** now program.cpp *****************/
/************************************/
/************************************/
int show-warnings;
int indent-spaces;
// global variables
void readSettings()
{
ifstream inputFile ("settings.dat");
inputFile >> show-warnings;
inputFile >> indent-spaces;
inputFile.close();
}
int main(int argc, char *argv[])
{
readSettings();
// do various things
return 0;
}
/************************************/
/************************************/
/** now: settings.dat ***************/
/************************************/
/************************************/
3
1
2
这些设置没有标记。每次更改设置时,我都很难记住这些东西的顺序。
这就是我想要的:
/************************************/
/************************************/
/** i'd like settings.dat ***********/
/************************************/
/************************************/
indent-spaces: 3
show-warnings: yes
purpose: update
我试图通过 (1) 添加每个参数的含义,后跟一个冒号,以及 (2) 更改为 not-just-integers 参数,从而使我的 settings.dat 文件更有意义
如果我有 20 个参数,并且并非每次都在数据文件中指定所有参数,我想采用默认值。
有人可以指出一种在我的 c++ 软件中为这些参数管理变量的简单/稳健的方法吗?老实说,我什至不知道要在 Google 中搜索什么字词。
顺便说一下,我用的是Windows 7,MING++,直接编译。
非常感谢! -乔安娜
【问题讨论】:
-
最简单的方法是使用预先存在的格式和处理它的库,例如 nlohmann github link 的 JSON。特别是可以通过复制 json.hpp 文件,将其粘贴到您的项目中,然后将其包含在任何需要它的文件中来集成。
-
您必须编写 C++ 代码才能进行这种解析。也许重新考虑您的程序的设计,并将配置设置存储在
std::unordered_map中,每个设置都由其文本字符串标识,因此读取和解析它变得可笑地微不足道,并且检索特定的配置设置是通过其名称完成的。不是一个特别复杂的操作,但它确实需要一些 C++ 知识,而不是程序员的人可能无法掌握这些知识。就是这样。 -
搜索 INI 解析器或 TOML 解析器。这些格式很方便。
-
你期望的文件格式对我来说看起来像 YAML。试试github.com/jimmiebergmann/mini-yaml 只是一个头文件,构建或链接都不会有问题。
-
C++ 很难学。编写脚本不方便。如果您只需要脚本和自动化,请尝试 Python。 Python 适合初学者。它在学校作为第一种编程语言进行研究。此外,它也便于编写脚本。
标签: c++ data-files