A raíz de unos comentarios de kiko me puse a investigar cómo podría vaciarse una sección de un archivo INI, es decir, no eliminarse por completo, sino eliminar sólo sus claves y valores correspondientes.
El caso es que mientras llevaba a cabo el algoritmo en Delphi para conseguir algo así, me he dado cuenta de que estaba usando las mismas funciones que en su día incorporé a NeoDouble en las correspondientes acciones.
Es decir, que el plugin ya cuenta con las acciones necesarias para conseguir "vaciar" una sección de un archivo INI. Ahora la duda estaría en si incluir o no una acción "npVaciarSeccion" en el plugin NeoDouble, pero, como digo, básicamente, sería traducir el siguiente código de Neobook a Delphi:
.// Nombre de la sección a vaciar SetVar "[SeccionINI]" "Seccion" .// Vamos a obtener todas las claves de la sección npSeccionIni "archivo.ini" "[SeccionINI]" .// Véase más abajo en esta entrada sobre estas líneas GetArrayInfo "[npResultadoAccion]" "[menor]" "[mayor]" "" Loop "[menor]" "[mayor]" "[indice]" SetVar "[Claves[indice]]" "[npResultadoAccion[indice]]" EndLoop .// Ahora sí, recorremos el Array de claves GetArrayInfo "[Claves]" "[menor]" "[mayor]" "" Loop "[menor]" "[mayor]" "[indice]" .// Y vamos borrando una a una las claves de la sección npBorrarClaveIni "archivo.ini" "[SeccionINI]" "[Claves[indice]]" EndLoop
Por cierto, ¿alguien sabe cómo asignar a una variable el valor de otra variable de tipo Array? Haciendo esto:
SetVar "[NuevaVariable]" "[VariableArray]"
El asunto no parece funcionar como se espera, de modo que ha de hacerse algo como lo que se ve más arriba, asignar los elementos de la variable Array a la otra variable, de uno en uno...
GetArrayInfo "[VariableArray]" "[menor]" "[mayor]" "" Loop "[menor]" "[mayor]" "[indice]" SetVar "[NuevaVariable[indice]]" "[VariableArray[indice]]" EndLoop
Pero, estoy seguro de que tiene que haber otro modo, ¿verdad? En fin. Espero que kiko se entere de que puede vaciar secciones de archivos INI ya, es decir, sin esperar a que NeoDouble incorpore más acciones, con las que ya existen en el plugin.
En definitiva, se trata de obtener todas las claves de una determinada sección, para, a continuación, borrar las claves una por una, de manera que no se borre la sección, puesto que, si es esto lo que se quiere conseguir, podría usarse la acción "npBorrarSeccionIni", directamente.
Publicada el Viernes, 28/12/2007 por David Esperalta
Suscribirse a esta entrada - URL para Trackbacks
Hola David, gracias por los consejos para vaciar una sección en ficheros ini. Eso trabaja bien, pero... (siempre hay un pero jeje) Sobre un disco duro es muy rápido, ejecútalo cuando el INI está en un disquete o en una llave usb 1.1, date cuenta que tiene que eliminar línea por línea, y una sección con 100 claves por ejemplo lleva su tiempo (bastante) escribir 100 veces en un medio lento.
Normalmente lo que hago para algún programilla cuando quiero guardar la configuración, es lo siguiente (sin archivos ini), tengo una variable de este tipo:
"clave1=xxx[#13][#10]clave2=xxx[#13][#10]clave3=xxx[#13][#10]"
... y cuando el programa es cerrado se ejecuta la rutina con el comando writefile para escribir mi configuración toda al mismo tiempo. Antes utilizaba lo de escribir línea por línea para salvar mi configuración, pero en dispositivos usb y disquetes tardaba muchísimo, de esta manera comentada sólo escribe una única vez en el fichero.
Respecto a lo de vaciar las secciones... prefiero eliminar la sección entera y luego con el comando writeln escribir en modo APPEND la línea de la sección eliminada anteriormente, ganando con ello velocidad.
Un saludo.
P.D. Sugerencia: ¿Qué tal un botón para mostrar el previo en los comentarios?
Hola,
Pues acaso llevas razón kiko. Una acción en el plugin que se encargara de vaciar una sección entera de un archivo INI sería más rápida, ¿por qué? Porque trabaja "en memoria".
No lee ni escribe en el archivo INI sino hasta que se ha completado la tarea, de modo que sí, debe ser más rápido. No puedo prometerte nada, pero, en fin, lo tendré en cuenta.
PD. Llevas razón también en que no vendría mal una "vista previa" para los comentarios de esta bitácora. Veré también qué puedo hacer sobre este asunto. Gracias por tu sugerencia.
Hola,
Echa un vistazo kiko, ya cuentas con la acción que querías en el plugin NeoDouble.