Biblioteka plików właściwości dla C (lub c++)
Tytuł jest dość oczywisty: czy ktoś zna (dobrą) bibliotekę czytników plików dla C lub, jeśli nie, C++?
[Edit: aby być konkretnym, chcę bibliotekę, która obsługuje .format pliku właściwości używany w Javie: http://en.wikipedia.org/wiki/.properties]
4 answers
STLSoft ' S 1.10 alpha zawiera klasę platformstl::properties_file
. Można go użyć do odczytu z pliku:
using platformstl::properties_file;
properties_file properties("stuff.properties");
properties_file::value_type value = properties["name"];
Lub z pamięci:
properties_file properties(
"name0=value1\n name1 value1 \n name\\ 2 : value\\ 2 ",
properties_file::contents);
properties_file::value_type value0 = properties["name0"];
properties_file::value_type value1 = properties["name1"];
properties_file::value_type value2 = properties["name 2"];
Wygląda na to, że najnowsza Wersja 1.10 ma kilka kompleksowych testów jednostkowych i że zaktualizowali klasę tak, aby obsługiwała wszystkie reguły i przykłady podane w dokumentacji Javy .
Jedynym pozornym rub jest to, że value_type
jest instancją stlsoft::basic_string_view
(opisane w to Dr Dobb ' s Artykuł ), który jest nieco podobny do std::string
, ale tak naprawdę nie posiada swojej pamięci. Prawdopodobnie robią to, aby uniknąć niepotrzebnych przydziałów, prawdopodobnie ze względu na wydajność, co jest czymś, co projekt STLSoft jest drogi. Ale to znaczy, że nie możesz po prostu napisać
std::string value0 = properties["name0"];
Możesz jednak zrobić to:
std::string value0 = properties["name0"].c_str();
I to:
std::cout << properties["name0"];
Nie jestem pewien, czy Zgadzam się z tą decyzją projektową, ponieważ jak prawdopodobne jest, że odczyt właściwości - z pliku lub z pamięci-jest będzie potrzebował absolutnego ostatniego cyklu. Myślę, że powinni zmienić go na domyślne użycie std::string
, a następnie użyć "widoku ciągów", jeśli jest to jawnie wymagane.
Poza tym, Klasa properties_file
wygląda na to, że robi sztuczkę.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-23 20:46:41
Libconfuse (biblioteka C) jest również przydatna; istnieje od zawsze i jest elastyczna.
- ( www.nongnu.org/confuse/) http://www.nongnu.org/confuse/tutorial-html/index.html
To daleko, daleko poza Javą.util.Właściwości. Jednak nie musi obsługiwać narożnych przypadków formatu pliku java properties (który wydaje się być twoim wymaganiem).
Zobacz przykłady:
- proste: www.nongnu.org/confuse/simple.conf
- crazy: www.nongnu.org/confuse/test.conf
Brak biblioteki wrapperów C++, O której jednak wiem.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-24 03:55:42
Domyślam się ,że przez 'properties file' masz na myśli plik konfiguracyjny.
W tym przypadku Google daje (pierwsze 4 trafienia dla C config file library
):
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-17 07:50:48
Poco ma również implementację do odczytu plików właściwości http://pocoproject.org/docs/Poco.Util.PropertyFileConfiguration.html
Prosty przykład skopiowany stąd: http://pocoproject.org/slides/180-Configuration.pdf
Zawartość pliku właściwości:
# a comment
! another comment
key1 = value1
key2: 123
key3.longValue = this is a very \
long value
path = c:\\test.dat
Przykład kodu
#include <Poco/Util/PropertyFileConfiguration.h>
using Poco::AutoPtr;
using Poco::Util::PropertyFileConfiguration;
AutoPtr<PropertyFileConfiguration> pConf;
pConf = new PropertyFileConfiguration("test.properties");
std::string key1 = pConf->getString("key1");
int value = pConf->getInt("key2");
std::string longVal = pConf->getString("key3.longValue");
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-23 06:57:19