Este foro usa cookies
Este foro utiliza cookies para almacenar su información de inicio de sesión si está registrado y su última visita si no lo está. Las cookies son pequeños documentos de texto almacenados en su computadora; las cookies establecidas por este foro solo se pueden usar en este sitio web y no representan ningún riesgo de seguridad. Las cookies en este foro también rastrean los temas específicos que ha leído y la última vez que los leyó. Si Ud. continúa navegando, entenderemos que acepta todas las cookies.

Se almacenará una cookie en su navegador, independientemente de la elección, para evitar que se le vuelva a hacer esta pregunta. Podrá cambiar la configuración de sus cookies en cualquier momento utilizando el enlace en el pie de página.

El foro antiguo se encuentra accesible desde https://foro.gambas-es.org en modo de solo lectura.

Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5

Config class + archivo json
#1

[Imagen: 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
  1. ' Gambas class file
  2. Private Const ConfigFile As String = ".app/config.json"
  3. ''Configuration variables to be saved, add as needed below
  4. Public CurrentColor As Byte = 1
  5. Public CurrentWidth As Byte = 1
  6. Public CurrentLType As Byte = 1
  7. Public OtherParameter1 As String = "gambas-es.org"
  8. Public OtherParameter2 As String = "gambas.one"
  9. Public OtherParameter3 As String = "gambas-club.de"
  10. Public OtherParameter4 As String = "gambas-it.org"
  11.  
  12.  
  13.   Dim jConfig As Collection
  14.   Dim sSymbol As String
  15.   Dim obj As Object = Me
  16.   Dim MyClass As Class = Object.Class(obj)
  17.  
  18.   If sFile = "" Then
  19.     sFile = User.Home &/ ConfigFile
  20.  
  21.   If Exist(sFile) Then
  22.     jConfig = JSON.FromString(File.Load(sFile))
  23.     For Each sSymbol In myClass.Symbols
  24.       If jConfig.Exist(sSymbol) Then
  25.         Object.SetProperty(obj, sSymbol, jConfig[sSymbol])
  26.       Endif
  27.     Next
  28.  
  29.   Dim jConfig As New JSONCollection
  30.   Dim obj As Object = Me
  31.   Dim MyClass As Class = Object.Class(obj)
  32.   Dim Var As String
  33.   Dim Valor As Variant
  34.   If sFile = "" Then
  35.     sFile = User.Home &/ ConfigFile
  36.   For Each Var In myClass.Symbols
  37.     '' Verifying that it is a property or a variable.
  38.     If (MyClass[var].kind = Class.Variable) Or (MyClass[var].kind = Class.Property) Then
  39.       valor = Object.GetProperty(obj, var)
  40.       jConfig.Add(Valor, var)
  41.     End If
  42.   Next
  43.   If Not Exist(File.Dir(sFile)) Then
  44.     Shell "mkdir -p " & File.Dir(sFile) Wait
  45.   File.Save(sFile, JSON.Encode(jConfig))



Por ejemplo en un formulario...
GAMBAS
  1. Public Sub Form_Open()
  2.   Config.Load()
  3.   Print "Color saved", Config.CurrentColor
  4.   Config.CurrentColor = Rand(0, 255)
  5.   Print "Color to save", Config.CurrentColor
  6.   Config.Save()


Saludos.
    ¡Gracias!
#2

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
    ¡Gracias!
#3

Está chulo. Supera la clase settings, que es lo que yo ahora uso.

No podemos regresar
    ¡Gracias!
#4

(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.
    ¡Gracias!
#5

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'
    ¡Gracias!
#6

(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.
    ¡Gracias!


Posibles temas similares…
Tema / Autor Respuestas Vistas Último mensaje
Último mensaje por tincho
06-11-2020, 18:19

Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)