gpt4 book ai didi

c++ - 从文件读取和设置变量的更有效方法?

转载 作者:行者123 更新时间:2023-11-28 00:48:02 24 4
gpt4 key购买 nike

有没有更好的方法让我从文件中读取值并相应地设置它们?我能以某种方式从文件中读取变量名并在程序中相应地设置它吗?例如,读取 BitDepth 并将其设置为文件中规定的值?因此,我不必检查此行是否为 BitDepth 然后将 bit_depth 设置为后面的值?

std::ifstream config (exec_path + "/Data/config.ini");
if (!config.good ()) SetStatus (EXIT_FAILURE);
while (!config.eof ()) {
std::string tmp;
std::getline (config, tmp);
if (tmp.find ("=") != 1) {
if (!tmp.substr (0, tmp.find (" ")).compare ("BitDepth")) {
tmp = tmp.substr (tmp.find_last_of (" ") + 1, tmp.length ());
bit_depth = atoi (tmp.c_str ());
} else if (!tmp.substr (0, tmp.find (" ")).compare ("WindowWidth")) {
tmp = tmp.substr (tmp.find_last_of (" ") + 1, tmp.length ());
screen_width = atoi (tmp.c_str ());
} else if (!tmp.substr (0, tmp.find (" ")).compare ("WindowHeight")) {
tmp = tmp.substr (tmp.find_last_of (" ") + 1, tmp.length ());
screen_height = atoi (tmp.c_str ());
}
}
}

配置文件

[Display]
BitDepth = 32
WindowWidth = 853
WindowHeight = 480

最佳答案

您可以使用 std::map 使这种方法更加灵活。另请注意,与其检查 config.eof() 的 erturn 值,不如直接检查 std::getline 的返回值要好得多:

std::map<std::string, int> myConfig;

std::string line, key, delim;
while (std::getline(config, line))
{
// skip empty lines:
if (line.empty()) continue;

// construct stream and extract tokens from it:
std::string key, delim;
int val;
if (!(std::istringstream(line) >> key >> delim >> val) || delim != "=")
break; // TODO: reading from the config failed

// store the new key-value config record:
myConfig[key] = val;
}

这取决于你如何处理其中一个配置行的解析失败的情况:)

关于c++ - 从文件读取和设置变量的更有效方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15475300/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com