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

Extendiendo la clase JSON - Encode2
#1
Bug 

Hola amigos.
Aquí les propongo una función que formatea un texto Json de una forma mas legible para humanos.
Gracias al aporte de  Laurent Carlier
https://gitlab.com/lordheavy/alpha/-/blo...class#L100
Para usar esto les recomiendo que creen una clase en vuestro proyecto llamada JSON (en mayúsculas) y luego pongan esto dentro y luego llamen al método normalmente desde todas partes con JSON.Encode2

GAMBAS
  1. ' Gambas class file
  2.  
  3. ' This program is free software; you can redistribute it and/or modify
  4. ' it under the terms of the GNU General Public License as published by
  5. ' the Free Software Foundation; either version 2 of the License, or
  6. ' (at your option) any later version.
  7.  
  8.  
  9. '' Encode in JSON format in a human readable way. Based on a Laurent tool
  10.  
  11.  
  12.   Dim sInput As String
  13.   Dim sOutput As String
  14.   Dim iStream As Stream
  15.  
  16.   Dim $sReadChar As String
  17.   Dim $iTab As Integer
  18.   Dim $bQuote, $bBracket As Boolean
  19.  
  20.   sInput = JSON.Encode(vData)
  21.  
  22.   iStream = Open String sInput For Read
  23.  
  24.   While (Not Eof(iStream))
  25.     $sReadChar = Read #iStream, 1
  26.     If ($sReadChar = "{" And Not $bQuote) Then
  27.       $iTab += 1
  28.       $sReadChar &= "\n" & Space$($iTab * 2)
  29.     Else If ($sReadChar = "}" And Not $bQuote) Then
  30.       $iTab -= 1
  31.       $sReadChar = "\n" & Space$($iTab * 2) & $sReadChar
  32.     Else If ($sReadChar = "\"") Then
  33.       $bQuote = Not $bQuote
  34.     Else If ($sReadChar = "[") Then
  35.       $bBracket = True
  36.     Else If ($sReadChar = "]") Then
  37.       $bBracket = False
  38.     Else If ($sReadChar = ":" And Not $bQuote) Then
  39.       $sReadChar &= " "
  40.     Else If ($sReadChar = "," And Not $bQuote) Then
  41.       If (Not $bBracket) Then
  42.         $sReadChar &= "\n" & Space$($iTab * 2)
  43.       Else
  44.         $sReadChar &= " "
  45.       Endif
  46.     Endif
  47.     sOutput &= $sReadChar
  48.   Wend
  49.  
  50.   Close iStream
  51.   ' replace null with ""
  52.   sOutput = Replace(sOutput, " null", " \"\"")
  53.  
  54.   Return sOutput
  55.  



1 Saludo.
    ¡Gracias!
#2

Hay un "error" en esta función y no logro encontrar por que la primera colección no es formateada como las siguientes.
A ver si a alguien se le ocurre que puede ser.

Javascript
  1. [{
  2.   "Entity": "line", "Index": 0, "Block": false, "Level": 1, "Color": 1, "Style": 1, "Weight": 2, "Points": [[236, 37],
  3.   [286, 37]]
  4. },
  5. {
  6.   "Entity": "line",
  7.   "Index": 1,
  8.   "Block": false,
  9.   "Level": 1,
  10.   "Color": 1,
  11.   "Style": 1,
  12.   "Weight": 2,
  13.   "Points": [[251, 35],
  14.   [251, 38]]
  15. },
  16. {
  17.   "Entity": "line",
  18.   "Index": 2,
  19.   "Block": false,
  20.   "Level": 1,
  21.   "Color": 1,
  22.   "Style": 1,
  23.   "Weight": 2,
  24.   "Points": [[236, 41],
  25.   [286, 41]]
  26. }]



1 Saludo.
    ¡Gracias!
#3

no tenes un programa ejemplo que exponga el error?

"Es mejor saber todo de muy poco que muy poco de todo" - anonimo
    ¡Gracias!
#4

Si, podes descargarte Gauchosketch desde:
https://gitlab.com/belmotek/gauchosketch
Luego tener que seguir los siguientes pasos:
  1. Abrir el programa y crear un documento
  2. Dibujar, al menos dos lineas, y luego guardar
[Imagen: 1RCrUjg.png]
El archivo generado estara en /home/USUARIO/.config/gauchosketch/ con extension .json
Lo que quiero lograr es que la primera entidad este "formateada" igual que el resto.

1 Saludo.
    ¡Gracias!
#5

Le he echado un ojo, pero ni idea, oiga.
Al principio he pensado que podría ser cosa de usar Variant, cuyo tipo no está definido hasta que se opera con él... pero si es eso no lo he podido arreglar.
El bucle de read stream que  usas para el formateo me parece muy engorroso... pero si funciona para las entidades siguientes no veo por qué no puede funcionar para la primera, así que... nada.

Sólo una cosa: en mi aparato el fondo para dibujar es negro y las líneas rojas... con lo que el cursor, negro, no se vé.

Saludos

No podemos regresar
    ¡Gracias!
#6

(30-04-2022, 19:35)Shordi escribió:  Le he echado un ojo, pero ni idea, oiga. Sólo una cosa: en mi aparato el fondo para dibujar es negro y las líneas rojas... con lo que el cursor, negro, no se vé.

ok, gracias por echar un vistazo.
Respecto al cursor, este debería adaptarse a tu escritorio, voy a cambiar el tema de mi escritorio a claro a ver si logro reproducir ese comportamiento.

1 Saludo.
    ¡Gracias!
#7

(30-04-2022, 19:35)Shordi escribió:  Sólo una cosa: en mi aparato el fondo para dibujar es negro y las líneas rojas... con lo que el cursor, negro, no se vé.

Idem
Código:
[{
  "Entity": "circle",
  "Index": 0,
  "Block": false,
  "Level": 1,
  "Color": 1,
  "Style": 1,
  "Weight": 2,
  "Points": [[409, 290], [581, 188]]
},
{
  "Entity": "polyline",
  "Index": 1,
  "Block": false,
  "Level": 1,
  "Color": 1,
  "Style": 1,
  "Weight": 2,
  "Points": [[282, 115], [732, 67], [974, 233], [892, 493], [793, 261], [694, 588]]
},
{
  "Entity": "line",
  "Index": 2,
  "Block": false,
  "Level": 1,
  "Color": 2,
  "Style": 1,
  "Weight": 2,
  "Points": [[85, 62], [786, 401]]
}]

este es el codigo que resuelve el problemita (me tomo un buen rato pues estaba tricky)

GAMBAS
  1.  
  2.   Dim sInput As String
  3.   Dim sOutput As String
  4.   Dim iStream As Stream
  5.  
  6.   Dim $sReadChar As String
  7.   Dim $iTab As Integer
  8.   Dim $bQuote, $bBracket As Boolean
  9.   Dim $BracketLevel As Integer            ' Nuevo
  10.  
  11.   sInput = JSON.Encode(vData)
  12.  
  13.   iStream = Open String sInput For Read
  14.  
  15.   While (Not Eof(iStream))
  16.     $sReadChar = Read #iStream, 1
  17.     If ($sReadChar = "{" And Not $bQuote) Then
  18.       $iTab += 1
  19.       $sReadChar &= "\n" & Space$($iTab * 2)
  20.     Else If ($sReadChar = "}" And Not $bQuote) Then
  21.       $iTab -= 1
  22.       $sReadChar = "\n" & Space$($iTab * 2) & $sReadChar
  23.     Else If ($sReadChar = "\"") Then
  24.       $bQuote = Not $bQuote
  25.     Else If ($sReadChar = "[") Then
  26.  
  27.       Inc $BracketLevel
  28.  
  29.       $bBracket = True
  30.  
  31.     Else If ($sReadChar = "]") Then
  32.       $bBracket = False
  33.       Dec $BracketLevel
  34.     Else If ($sReadChar = ":" And Not $bQuote) Then
  35.       $sReadChar &= " "
  36.     Else If ($sReadChar = "," And Not $bQuote) Then
  37.  
  38.       If $BracketLevel > 1 Then             ' solo agrego un salto de linea si no hay abierto nuevos brackets
  39.         $sReadChar &= " "                   
  40.       Else
  41.         $sReadChar &= "\n" & Space$($iTab * 2) 
  42.       End If
  43.  
  44.     Endif
  45.     sOutput &= $sReadChar
  46.   Wend
  47.  
  48.   Close iStream
  49.   ' replace null with ""
  50.   sOutput = Replace(sOutput, " null", " \"\"")
  51.  
  52.   Return sOutput
  53.  



"Es mejor saber todo de muy poco que muy poco de todo" - anonimo
[-] Los siguientes 1 usuarios dice gracias a tercoide por este post:
  • tincho
    ¡Gracias!
#8

(01-05-2022, 00:17)tercoide escribió:  Idem

Actualice el código por el tema del color del cursor, debería verse bien ahora ya que se adapta al color del DrawingArea.

 
(01-05-2022, 00:17)tercoide escribió:  este es el codigo que resuelve el problemita (me tomo un buen rato pues estaba tricky)

Buenisimo, funciona re bien. Gracias che.
[Imagen: 8MbqCo0.png]

Viendo tu código veo que le agregaste una variable. Perfecto, ya con este código puedo guardar los archivos en un formato "minimalista", que sera el formato de los bloques para las librerías de símbolos.

[Imagen: JEP5Tw8.png]

1 Saludo.
    ¡Gracias!
#9

Ahora sí se se ve bien el cursor. Blanco sobre Negro.

Saludos

No podemos regresar
    ¡Gracias!
#10

(01-05-2022, 17:13)Shordi escribió:  Ahora sí se se ve bien el cursor. Blanco sobre Negro.

Perfecto, gracias por corroborarlo.

1 Saludo.
    ¡Gracias!


Posibles temas similares…
Tema / Autor Respuestas Vistas Último mensaje

Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)