Ficheros INI de texto en C++/CLI

Recupero un artículo (recomiendo su lectura) ya viejo de otro de mis blogs en el que hablo de una clase que en su momento creé para trastear con ficheros INI al más puro estilo Win16.


El autor es de los clásicos, prefiere lo malo conocido a lo peor por conocer, y considera que el formato de los archivos INI es algo insuperable para guardar configuraciones. Combinado con el sistema de ficheros local por usuario de los últimos Windows (ya se sabe: C:Documents and Settings<user>Local Settings…) forman una pareja insuperable a la hora de guardar pequeñas -o no tanto- opciones.


Es por ello por lo que en su momento creó una clase llamada IniStream capaz de simular el funcionamiento desde C++/CLI de estos ficheros, con la limitación de no permitir comentarios. Aparte de lo anterior, la clase contenía un bug estúpido que devolvía siempre el valor por defecto al leer un Int32, bug que descubrió al utlizar dicha clase en una de las aplicaciones que realiza en eso que sus jefes llaman trabjo y él pasarlo en grande (por favor, no se lo digan a mis superiores o lo mismo me bajan el sueldo).


Ahora, con un nuevo proyecto personal que lleva entre manos, se ha visto obligado -o más bien ha comprendido la necesidad de tener comentarios en ficheros que la gente podría leer- a añadir el soporte para los citados. Y ahora sí que ha comprobado que la clase funciona perfectamente, porque la ha incorporado al proyecto anterior y nadie se ha quejado (¿Será porque nadie usa ya esa aplicación?, agónica duda existencial) y al nuevo y ahora sí, funciona.


Se trata simplemente de una actualización, y el código se puede descargar de aquí.


Para aquellos demasiado jóvenes que desconozcan el formato de un archivo INI, diremos que se trata de un grupo de secciones que a su vez contienen valores, y estos valores están en la forma “nombre=valor”. Un fichero podría estar compuesto así:



//Esto es un comentario
[Seccion1]
Elemento1=uno
Elemento2=dos
;Esto es otro comentario
[Seccion2]
Elemento1=1
Elemento2=2


Todo lo que no esté entre corchetes ni tenga un = de por medio se considera un comentario, al menos en mi especificación de fichero INI. Luego disponemos de métodos como



ReadString(String ^section,String ^name,String ^defValue);
WriteString(String ^section,String ^name,String ^value);


De este modo leemos un valor que se corresponda a un nombre de una sección dada, o lo escribimos. Podemos indicar una Sección por defecto si la asignamos a DefaultSection, y entonces ya no tenemos que especificar la sección en las llamadas. También podemos obtener un array con todos los nombres de todas las secciones, o todos los elementos de una de ellas, y soporta indexar mediante bucles con índice numérico y/o for each.


El funcionamiento es bastante sencillo, y utiliza genéricos CLI con diccionarios de datos. La clase contiene un diccionario de diccionarios, es decir, cada grupo de elementos de una sección dada está almacenado en un diccionario, y cada sección con su grupo en otro, de forma que podemos accecer a los datos así:



String ^value=iniStream[section][name];


Toda una gozada frente a otras formas de acceder, aunque sólo podamos leer cadenas de esta forma.

Un comentario sobre “Ficheros INI de texto en C++/CLI”

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *