gpt4 book ai didi

c++ - 使用 C++ 解析文件,将值加载到结构中

转载 作者:行者123 更新时间:2023-12-01 13:51:11 30 4
gpt4 key购买 nike

我有以下文件/行:

pc=1 ct=1 av=112 cv=1100 cp=1700 rec=2 p=10001 g=0 a=0 sz=5 cr=200
pc=1 ct=1 av=113 cv=1110 cp=1800 rec=2 p=10001 g=0 a=10 sz=5 cr=200

等等。
我希望解析它并获取键值对并将它们放入一个结构中:
struct pky
{
pky() :
a_id(0),
sz_id(0),
cr_id(0),
cp_id(0),
cv_id(0),
ct_id(0),
fr(0),
g('U'),
a(0),
pc(0),
p_id(0)
{ }
};

其中要么使用所有结构字段,要么可能省略一些。

我如何创建一个 C++ 类,它会做同样的事情?我是 C++ 的新手,不知道有任何函数或库可以完成这项工作。

每行都将被处理,并且在刷新之前,每次将填充该结构并使用一行。该结构后来用作函数的参数。

最佳答案

你可以这样做:

std::string line;
std::map<std::string, std::string> props;
std::ifstream file("foo.txt");
while(std::getline(file, line)) {
std::string token;
std::istringstream tokens(line);
while(tokens >> token) {
std::size_t pos = token.find('=');
if(pos != std::string::npos) {
props[token.substr(0, pos)] = token.substr(pos + 1);
}
}

/* work with those keys/values by doing properties["name"] */
Line l(props["pc"], props["ct"], ...);

/* clear the map for the next line */
props.clear();
}

我希望它有帮助。行可以是这样的:
struct Line { 
std::string pc, ct;
Line(std::string const& pc, std::string const& ct):pc(pc), ct(ct) {

}
};

现在只有当分隔符是空格时才有效。您也可以使其与其他分隔符一起使用。改变
while(tokens >> token) {

例如,如果你想有一个分号:
while(std::getline(tokens, token, ';')) {

实际上,看起来您只有整数作为值,空格作为分隔符。你可能想改变
    std::string token;
std::istringstream tokens(line);
while(tokens >> token) {
std::size_t pos = token.find('=');
if(pos != std::string::npos) {
props[token.substr(0, pos)] = token.substr(pos + 1);
}
}

进入这个然后:
    int value;
std::string key;
std::istringstream tokens(line);
while(tokens >> std::ws && std::getline(tokens, key, '=') &&
tokens >> std::ws >> value) {
props[key] = value;
}
std::ws只吃空格。您应该将 Prop 的类型更改为
std::map<std::string, int> props;

然后也是,并使 Line 接受 int 而不是 std::string。我希望这不是一次太多的信息。

关于c++ - 使用 C++ 解析文件,将值加载到结构中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/271612/

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