Mensajes: 931
Temas: 150
Gracias Recibidas: 137 en 117 posts
Gracias Dadas: 113
Registro en: Jul 2020
01-06-2021, 10:37
(Última modificación: 04-12-2021, 15:33 por
tincho.)
![[Imagen: nnwUBmA.jpg]](https://i.imgur.com/nnwUBmA.jpg)
Hola amigos.
Deseo presentarles un método para gestionar la configuración de un programa, que a mi me parece interesante.
En conjunto con TercoIDE preparamos este ejemplo en el cual en una clase existen todos los parámetros de un programa y con gran flexibilidad pueden agregarse mas. Luego en cualquier otra parte del programa se pueden leer y escribir esas variables.
Finalmente existe un método (Save) que recorre los simbolos de la clase y los guarda en un archivo de texto en formato json para futuros usos recuperando estos datos con el método "Load".
Por favor siéntanse en libertad de opinar, comentar o mejorar este programa.
Config.class
GAMBAS
' Gambas class file
''Configuration variables to be saved, add as needed below
sFile
= User.
Home &/ ConfigFile
jConfig
= JSON.
FromString(File.
Load(sFile
)) Object.
SetProperty(obj, sSymbol, jConfig
[sSymbol
])
sFile
= User.
Home &/ ConfigFile
'' Verifying that it is a property or a variable.
valor
= Object.
GetProperty(obj, var
) jConfig.Add(Valor, var)
File.
Save(sFile, JSON.
Encode(jConfig
))
Por ejemplo en un formulario...
GAMBAS
Config.Load()
Print "Color saved", Config.
CurrentColor Config.CurrentColor = Rand(0, 255)
Print "Color to save", Config.
CurrentColor Config.Save()
Agregado - 2021.08.20
Este método extiende la clase JSON y lo que hace es codificar el texto Json en una forma mas legible para humanos. Para usarla tienen que crear una clase en su proyecto que se llame JSON (con mayúsculas) y luego poner este código (Encode2) listo luego en vez de usar JSON.Encode en sus proyectos usen JSON.Encode2 y listo.
GAMBAS
' Gambas class file
'
' Copyright (C) GauchoCAD Team
'
' This program is free software; you can redistribute it and/or modify
' it under the terms of the GNU General Public License as published by
' the Free Software Foundation; either version 2 of the License, or
' (at your option) any later version.
'' Encode in JSON format in a human readable way. Based on a Laurent tool
sInput = JSON.Encode(vData)
$sReadChar
= Read #iStream,
1 $iTab += 1
$sReadChar
&= "\n" & Space$($iTab
* 2) $iTab -= 1
$sReadChar
= "\n" & Space$($iTab
* 2) & $sReadChar
$sReadChar &= " "
$sReadChar
&= "\n" & Space$($iTab
* 2) $sReadChar &= " "
sOutput &= $sReadChar
' replace null with ""
sOutput
= Replace(sOutput,
" null",
" \"\"")
Saludos.
1 Saludo.
Mensajes: 175
Temas: 11
Gracias Recibidas: 16 en 16 posts
Gracias Dadas: 17
Registro en: Jul 2020
La principal ventaja con respecto a settings es que a medida que el programa se expande , simplemente agregamos variables Public que luego tenemos a mano escribiendo en cualquier parte del codigo Config y el punto. Asi, no tenemos q estar recordandolas. Y si tenemos diversas configuraciones, simplemente copiamos y renombramos la clase: Config, WindowPositions, UserOptions , etc .
Lo cómico es que la clase pueda inspeccionarse a si misma en busca de variables.
"Es mejor saber todo de muy poco que muy poco de todo" - anonimo
Mensajes: 531
Temas: 54
Gracias Recibidas: 171 en 108 posts
Gracias Dadas: 172
Registro en: Jul 2020
Está chulo. Supera la clase settings, que es lo que yo ahora uso.
No podemos regresar
Mensajes: 931
Temas: 150
Gracias Recibidas: 137 en 117 posts
Gracias Dadas: 113
Registro en: Jul 2020
(01-06-2021, 17:04)Shordi escribió: Supera la clase settings
Settings esta bien para unas pocas variables pero tiene dos problemas, uno es que si alguna variable se guarda como, 0, cadena vacía o Null se pierde del archivo de texto, simplemente desaparece, el otro es que la forma de recuperar o escribir datos es Settings["El_asunto", "default"] y Settings["El_asunto"] = "123456" y en este sistema hay que recordar el texto exacto, no es posible usar el operador .
Saludos.
1 Saludo.
Mensajes: 323
Temas: 7
Gracias Recibidas: 57 en 48 posts
Gracias Dadas: 52
Registro en: May 2020
Me ha gustado mucho el detalle de la "introspección", algo muy usual en Python.
La base del funcionamiento son los propios objetos declarados dentro de la clase Config, sin embargo sería genial que no hiciera falta hacerlo y que se creasen dinámicamente a partir del fichero que guardamos. Pero eso ya es otro cantar...
Enhorabuena, me ha gustado mucho!
Por favor, usa el corrector ortográfico antes de pulsar el botón 'Enviar'
Mensajes: 931
Temas: 150
Gracias Recibidas: 137 en 117 posts
Gracias Dadas: 113
Registro en: Jul 2020
(01-06-2021, 20:25)jguardon escribió: ...sería genial ... que se creasen dinámicamente a partir del fichero que guardamos. Pero eso ya es otro cantar...
Al así como hConfic.AddSymbol .... ? pero aunque se pudiese hacer, creo que es mejor mantenerlo como esta porque el archivo de configuracion no existe la primera vez que se usa el programa.
Saludos.
1 Saludo.
Mensajes: 931
Temas: 150
Gracias Recibidas: 137 en 117 posts
Gracias Dadas: 113
Registro en: Jul 2020
Hola Amigos.
Hice una actualización, concretamente una clase que Extiende JSON para mejorar la codificación y hacerla mas legible por humanos.
Puse todo al pincipio.
Saludos.
1 Saludo.