
Una de las cosas necesarios para RAGE es el leer y escribir archivos ini. Parseadores de este tipo de archivos existen muchos como por ejemplo inih. Aunque en Razón Artificial usaremos uno derivado del proyecto GQE que se adapta muy bien a SFML.
Generar ficheros ini
La cuestión es a la hora de crear estos archivos, generar un ini no he encontrado nada, supongo que por lo trivial y la simpleza que supone ya que no es más que generar un fichero de texto. Por tanto he implementado una clase que se encarga de generar ficheros .ini
Definición
class ConfigCreate { public: ConfigCreate(); ~ConfigCreate(); void Open(const std::string& filename); void Close(); void PutSection(const std::string& section); void PutValue(const std::string& key, const std::string& value); void PutComment(const std::string& comment); void PutBlankLine(); private: std::ofstream file; }; // class ConfigCreate
Implementación
ConfigCreate::ConfigCreate() { } ConfigCreate::~ConfigCreate() { } void ConfigCreate::Open(const std::string& filename) { file.open(filename); file.clear(); } void ConfigCreate::Close() { file.close(); } void ConfigCreate::PutSection(const std::string& section) { file << "[" << section << "]" << std::endl; } void ConfigCreate::PutValue(const std::string& key, const std::string& value) { file << key << "=" << value << std::endl; } void ConfigCreate::PutComment(const std::string& comment) { file << "# " << comment << std::endl; } void ConfigCreate::PutBlankLine() { file << std::endl; }
Cuidado al crear un fichero sobreescribe otro preexistente, si lo que se quiere es modificar un archivo ini, primero usa un parser para obtener le contenido del fichero y luego generalo de nuevo a partir de los valores obtenidos y los nuevos y/o modificados.
por último su tilización no puede se más sencilla.
ConfigCreate c; c.Open("prueba.cfg"); c.PutSection("window"); c.PutValue("width", "640"); c.PutValue("height", "480"); c.PutComment("Activa la pantalla completa"); c.PutValue("fullscreen", "0"); c.PutBlankLine(); c.PutSection("Otra"); c.PutComment("lalalalala"); c.PutValue("djd", "edjie"); c.Close();
Esto generaría el siguiente fichero llamado prueba.cfg.
[window] width=640 height=480 # Activa la pantalla completa fullscreen=0 [Otra] # lalalalala djd=edjie