2009-05-17 5 views
11

El título es bastante autoexplicativo: ¿alguien sabe de una (buena) biblioteca de lectores de archivos de propiedades para C o, si no, C++?Biblioteca de archivos de propiedades para C (o C++)

[Editar: Para ser más específicos, quiero una biblioteca que maneja el formato de archivo .properties utilizado en Java: http://en.wikipedia.org/wiki/.properties]

+6

self e xplanatory en realidad, ¿qué es un "archivo de propiedades"? –

+3

Bueno, supongo que el formato de archivo de propiedades, un elemento básico de Java, no es tan conocido fuera del mundo de Java, lo que explica en parte por qué no puedo encontrar uno. Consulte http://en.wikipedia.org/wiki/.properties (no tengo suficiente reputación para agregar esto a la pregunta). – JamieH

+1

Lo he agregado para usted - Espero haberme parafraseado correctamente. –

Respuesta

5

STLSoft 's 1.10 alpha contiene un platformstl::properties_file clase. Se puede utilizar para leer desde un archivo:

using platformstl::properties_file; 

properties_file properties("stuff.properties"); 

properties_file::value_type value = properties["name"]; 

o desde la memoria:

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"]; 

Parece que la última versión 1.10 tiene un montón de unidad de pruebas exhaustivas, y que se ha realizado la actualización del clase para manejar todas las reglas y ejemplos dados en el Java documentation.

El único RUB aparente es que la value_type es una instancia de stlsoft::basic_string_view (descrito en this Dr Dobb's article), que es algo similar a std::string, pero en realidad no poseen su memoria. Presumiblemente hacen esto para evitar asignaciones innecesarias, presumiblemente por razones de rendimiento, que es algo que el diseño STLSoft tiene en gran estima. Pero esto significa que no se puede simplemente escribir

std::string value0 = properties["name0"]; 

Puede, sin embargo, hacer esto:

std::string value0 = properties["name0"].c_str(); 

y esto:

std::cout << properties["name0"]; 

No estoy seguro estoy de acuerdo con esta decisión de diseño, ya que es probable que las propiedades de lectura, desde el archivo o desde la memoria, necesiten el último ciclo absoluto. Creo que deberían cambiarlo para usar std::string de forma predeterminada, y luego usar la "vista de cadena" si se requiere explícitamente.

Aparte de eso, parece que la clase properties_file hace el truco.

+0

Gracias, eso es más o menos lo que estaba buscando. Lo comprobaré. Su enlace [4] está roto, por cierto – JamieH

4

libconfuse (C library) es útil también; ha existido por siempre & es flexible.

va mucho, mucho más allá de java.util.Properties. Sin embargo, no manejará necesariamente los casos de esquina del formato de archivo de propiedades de Java (que parece ser su requisito).

Véanse los ejemplos:

  • sencilla: www.nongnu.org/confuse/simple.conf
  • loco: www.nongnu.org/confuse/test.conf

n C++ wrapper library, que yo sepa, sin embargo.

0

Poco también tiene una implementación para la lectura PropertyFiles http://pocoproject.org/docs/Poco.Util.PropertyFileConfiguration.html

Un ejemplo simple copiado de aquí: http://pocoproject.org/slides/180-Configuration.pdf

el contenido del archivo del inmueble:

# a comment 
! another comment 
key1 = value1 
key2: 123 
key3.longValue = this is a very \ 
long value 
path = c:\\test.dat 

ejemplo Código

#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"); 
No
Cuestiones relacionadas