property_tree Sınıfı
Giriş
Şu satırları dahil ederiz.
Şöyle yaparız.
Elimizde şöyle bir dosya olsun.
Şöyle yaparız. company isimli bir düğüm aranır. Düğüm bulunursa altına conditions ismi ile yeni bir düğüm eklenir.
string için şöyle yaparız.
Şöyle yaparız.
put metodu
Şöyle yaparız.
Free Style metodlar
read_ini metodu
Açıklaması şöyle
Elimizde bir ini dosyası olsun
Giriş
Şu satırları dahil ederiz.
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/ini_parser.hpp>
begin metoduŞöyle yaparız.
for (auto& section : ptree) {
...
}
ÖrnekElimizde şöyle bir dosya olsun.
[OBJECT]
properties1=val1, val2, val3
porperty2=Blah
property3=Blah
property4=Blah
porperty5=Bla bla bla
[OBJECT]
properties1=val1
porperty2=Blah
property3=Blah
property4=Blah
porperty5=Bla bla bla
Bu dosyayı şöyle bir nesneye okumak isteyelim.struct Object {
std::string properties1, property2, property3, property4, property5;
};
Her section'ı okumak için şöyle yaparız.void read(ptree const& pt, std::string& s) {
s = pt.get_value(s);
}
void read(ptree const& pt, Object& object) {
read(pt.get_child("properties1"), object.properties1);
read(pt.get_child("property2"), object.property2);
read(pt.get_child("property3"), object.property3);
read(pt.get_child("property4"), object.property4);
read(pt.get_child("property5"), object.property5);
}
equal_range metoduŞöyle yaparız. company isimli bir düğüm aranır. Düğüm bulunursa altına conditions ismi ile yeni bir düğüm eklenir.
auto it = root.equal_range("company").second;
if (it != root.not_found())
root.insert(root.to_iterator(it), make_pair("conditions",attached_node));
Aynı şeyi şöyle de yapabiliriz. Elimizde find_by_key metodu olsuntemplate <typename It>
It find_by_key(It f, It l, std::string const& key) {
return std::find_if(f, l, [&](auto const& pair) {
return pair.first == key;
});
}
Bu metodu kullanmak için şöyle yaparız. find_by_key reverse iterator kullandığı için döndürdüğü sonuç .base() metodu ile normal iterator haline getirilir.auto it = find_by_key(root.rbegin(), root.rend(), "company");
if (it != root.rend())
root.insert(it.base(), make_pair("conditions",attached_node));
get metodustring için şöyle yaparız.
boost::property_tree::ptree pt;
...
std::cout << pt.get<std::string>("Section1.Value1");
std::cout << pt.get<std::string>("Section1.Value2");
int için şöyle yaparız.int n = pt.get<int>("Section.ValueOfN");
get metodu - default değerŞöyle yaparız.
testval = pt.get("foo.bar", 1);
Eğer dönüş değerini açıkça belirtmek istersek şöyle yaparız.testval = pt.get<int>("foo.bar", 1); // gets foo.bar from pt, or 1 if not found.
insert metodu
Şöyle yaparız. Belirtilen iterator konumuna ismi olan yeni bir düğüm ekler. Şöyle yaparız.ptree root;
root.put("building.age", "42");
root.put("company.age", "32");
root.put("street.age", "19");
ptree attached_node;
attached_node.put("confirmed","yes");
attached_node.put("approved","yes");
for(auto it=root.begin();it!=root.end();++it)
{
std::cout
<< (it->first)
<< ": "
<< (it->second.get<std::string>("age"))
<< std::endl;
if(it->first=="company")
root.insert(it,make_pair("conditions",attached_node));
}
Şöyle yaparız.
ptree root;
root.put("building.age", "42");
root.put("company.age", "32");
root.put("street.age", "19");
read_ini metodu
Açıklaması şöyle
Şöyle yaparız.Clears existing contents of property tree. In case of error the property tree unmodified.
boost::property_tree::ptree pt;
boost::property_tree::ini_parser::read_ini("config.ini", pt);
Eğer ini dosyasında aynı section içinde aynı anahtar isimi varsa exception fırlatabilir. Bu durumda boost::program_options::parse_config_file() kullanılabilir.[section_1]
key_1=value_1
key_1=value_2
...
key_n=value_n
[section_2]
key1=value_1
key1=value_2
...
key_n=value_1
key_n=value_2
[]
...
[section_n]
...
write_ini metoduElimizde bir ini dosyası olsun
[Section1]
Value1=1
ini dosyasını okuyup bir alanı değiştirdikten sonra kaydetmek için şöyle yaparız.try
{
boost::property_tree::ptree pt;
boost::property_tree::ini_parser::read_ini("testini.ini", pt);
int i = pt.get<int>("Section1.Value1");
std::cout << i << std::endl;
pt.put("Section1.Value1", 32);
boost::property_tree::ini_parser::write_ini( "testini.ini", pt );
}
catch (std::exception& e)
{
std::cout << e.what() << std::endl;
}
Çıktı olarak şunu alırız[Section1]
Value1=32
Hiç yorum yok:
Yorum Gönder