在 YAML 中迭代
Iterate in YAML
我有以下 YAML:
Configuracion:
vel_personaje: 3
merge_scroll: 30
Tipos:
nombre: arbol
imagen: img/tree
ancho_base: 2
alto_base: 2
pixel_ref_x: 30
pixel_ref_y: 40
fps: 10
delay: 5
nombre: casa
imagen: img/house
nombre: auto
imagen: img/tree
ancho_base: 2
alto_base: 2
问题是我可以拥有任意数量的 "Tipos",但有时它们有 8 个参数,有时只有 2 个,或者介于这两者之间的任何数字。我试图弄清楚如何使用 yaml-cpp 读取这些值,但我做不到。我尝试了以下方法,但没有成功。
while (contador < tipos_size){
try {
name = tipos["nombre"].as<string>();
contador++;
} catch (YAML::Exception& yamlException) {
name = "pepe";
}
try {
imagen = tipos["imagen"].as<string>();
contador++;
} catch (YAML::Exception& yamlException) {
imagen = "img/def";
}
try {
ancho_base = tipos["ancho_base"].as<int>();
contador++;
} catch (YAML::Exception& yamlException) {
ancho_base = 1;
}
try {
alto_base = tipos["alto_base"].as<int>();
contador++;
} catch (YAML::Exception& yamlException) {
alto_base = 1;
}
try {
pixel_ref_x = tipos["pixel_ref_x"].as<int>();
contador++;
} catch (YAML::Exception& yamlException) {
pixel_ref_x = 10;
}
try {
pixel_ref_y = tipos["pixel_ref_y"].as<int>();
contador++;
} catch (YAML::Exception& yamlException) {
pixel_ref_y = 10;
}
try {
fps = tipos["fps"].as<int>();
contador++;
} catch (YAML::Exception& yamlException) {
fps = 24;
}
try {
delay = tipos["delay"].as<int>();
contador++;
} catch (YAML::Exception& yamlException) {
delay = 100;
}
如有任何帮助,我将不胜感激。谢谢!
编辑代码:
for (YAML::Node tipo : tipos) {
try {
name = tipo["nombre"].as<string>();
} catch (YAML::Exception& yamlException) {
name = "pepe";
}
您似乎希望 Tipos
成为地图序列,而不是地图:
Configuracion:
vel_personaje: 3
merge_scroll: 30
Tipos:
- nombre: arbol
imagen: img/tree
ancho_base: 2
alto_base: 2
pixel_ref_x: 30
pixel_ref_y: 40
fps: 10
delay: 5
- nombre: casa
imagen: img/house
- nombre: auto
imagen: img/tree
ancho_base: 2
alto_base: 2
那个,你可以这样迭代:
for (YAML::Node tipo : tipos) {
// handle tipo
}
我有以下 YAML:
Configuracion:
vel_personaje: 3
merge_scroll: 30
Tipos:
nombre: arbol
imagen: img/tree
ancho_base: 2
alto_base: 2
pixel_ref_x: 30
pixel_ref_y: 40
fps: 10
delay: 5
nombre: casa
imagen: img/house
nombre: auto
imagen: img/tree
ancho_base: 2
alto_base: 2
问题是我可以拥有任意数量的 "Tipos",但有时它们有 8 个参数,有时只有 2 个,或者介于这两者之间的任何数字。我试图弄清楚如何使用 yaml-cpp 读取这些值,但我做不到。我尝试了以下方法,但没有成功。
while (contador < tipos_size){
try {
name = tipos["nombre"].as<string>();
contador++;
} catch (YAML::Exception& yamlException) {
name = "pepe";
}
try {
imagen = tipos["imagen"].as<string>();
contador++;
} catch (YAML::Exception& yamlException) {
imagen = "img/def";
}
try {
ancho_base = tipos["ancho_base"].as<int>();
contador++;
} catch (YAML::Exception& yamlException) {
ancho_base = 1;
}
try {
alto_base = tipos["alto_base"].as<int>();
contador++;
} catch (YAML::Exception& yamlException) {
alto_base = 1;
}
try {
pixel_ref_x = tipos["pixel_ref_x"].as<int>();
contador++;
} catch (YAML::Exception& yamlException) {
pixel_ref_x = 10;
}
try {
pixel_ref_y = tipos["pixel_ref_y"].as<int>();
contador++;
} catch (YAML::Exception& yamlException) {
pixel_ref_y = 10;
}
try {
fps = tipos["fps"].as<int>();
contador++;
} catch (YAML::Exception& yamlException) {
fps = 24;
}
try {
delay = tipos["delay"].as<int>();
contador++;
} catch (YAML::Exception& yamlException) {
delay = 100;
}
如有任何帮助,我将不胜感激。谢谢!
编辑代码:
for (YAML::Node tipo : tipos) {
try {
name = tipo["nombre"].as<string>();
} catch (YAML::Exception& yamlException) {
name = "pepe";
}
您似乎希望 Tipos
成为地图序列,而不是地图:
Configuracion:
vel_personaje: 3
merge_scroll: 30
Tipos:
- nombre: arbol
imagen: img/tree
ancho_base: 2
alto_base: 2
pixel_ref_x: 30
pixel_ref_y: 40
fps: 10
delay: 5
- nombre: casa
imagen: img/house
- nombre: auto
imagen: img/tree
ancho_base: 2
alto_base: 2
那个,你可以这样迭代:
for (YAML::Node tipo : tipos) {
// handle tipo
}