如何将 YAML 节点中的序列作为字符串返回?
How to return sequences in YAML node as string?
我正在尝试使用 yaml-cpp 解析C++中的对话树 (YAML)。下面是一个示例 YAML:
dialogue_block:
character_name:
- Hello
- How are you?
- :main
main:
- 1: ["I'm fine, thank you", :response1]
- 2: ["Not very well", :response2]
- 3: ["I don't want to talk", :exit]
我对C++和Yaml相对较新,所以如果有更简单/更直观的方法,请指出我正确的方向。我的想法是将每个块存储为对话节点。在上面的例子中,我希望能够调用dialogue_block
,并提取character_name
来识别说话的角色,打印所有序列,直到:main
,它将切换到main
节点,玩家有 3 个选择。我目前停留在第 1 步 - 解析 yaml 文件...
以下作品...
YAML::Node dialogue = YAML::LoadFile("dialogue.yaml");
if(dialogue["dialogue_block"]){
std::cout << dialogue["dialogue_block"]["character_name"][0].as<std::string>() << "n";
}
它打印"你好"。但是,我对接下来的步骤感到困惑:如何在不将字符串硬编码到代码中的情况下检索"character_name"?有没有办法打印所有导致但不包括":main"的字符串?然后让"主"成为下一个节点?
第一次在stackoverflow上发帖,所以如果需要更多信息,请告诉我!谢谢。
编辑:这是我正在使用的更新代码:
// read in file
YAML::Node dialogue = YAML::LoadFile("dialogue.yaml");
// Extract names of each block
std::vector<std::string> dialogueBlocks;
for (const auto& kv : dialogue) {
dialogueBlocks.push_back(kv.first.as<std::string>());
} // will return "dialogue_block" and "main"
std::string character;
// if first_encounter exists, always start at that block
if(dialogue["first_encounter"]){
for(YAML::iterator it = dialogue["first_encounter"].begin(); it != dialogue["first_encounter"].end(); ++it){
character = it->first.as<std::string>();
std::cout << "nCharacter: " << character << "n";
for (YAML::iterator it=dialogue["first_encounter"][character].begin();it!=dialogue["first_encounter"][character].end(); ++it) {
std::cout << it->as<std::string>() << "n";
}
}
}
我可以成功提取角色名称和对话,但有几件事我正在努力: 1)它还打印":main",我希望它省略。我不确定当它到达以":"开头的字符串时如何终止它,或者是否有合适的内置函数可以使用。 2) 存储 ":main" 作为下一个块,以便在调用时通过 for 循环。
您正在询问如何找到列表的"键名称"。你当然可以查看dialogue["dialogue_block"]
下的所有键,但是将character
与它们的lines
分开的字段会更习惯的yaml,就像这样
dialogue_block:
character: Bob
lines:
- Hello
- How are you?
- :main
或者,如果块旨在成为列表,
dialogue_block:
- character: Bob
lines:
- Hello
- How are you?
- :main
- character: Alice
lines:
- Blah
- :main
相关文章:
- C 字符串返回字符串的整数/双精度/长整型值
- std::hash<std::string> 可以为不同的字符串返回相同的值吗?
- Java 调用 dll 字符串返回类型方法
- 返回具有C++字符串返回值的函数的本地 C 字符串
- 如何将两个 jlong 数据类型转换为 jstring,然后将两个字符串连接在一起以便从 JNI 将字符串返回给 jav
- 尝试以随机字符(长读取)打印字符串返回结果
- 从字符串返回 i(索引)字
- 函数读取最大和min int值,并用文本字符串返回
- 如何将 YAML 节点中的序列作为字符串返回?
- 将注册表项读取为字符串返回数值
- 为什么我在尝试打印字符串返回时收到编译器错误?
- 使用 char*array 存储条形图的条形图,以便我可以动态制作它并作为字符串返回
- 字符串返回功能不起作用 - 'identifier is underfined'
- 将C 本地字符串返回到另一个功能
- 在MATLAB中仅接受INT32PTR时,将错误编号作为字符串返回
- 字符串流到字符串返回
- 字符串返回错误的长度
- 从共享指针矢量字符串返回值
- C++随机字符串返回意外结果
- 临时标准::字符串返回垃圾