Comunidad Gambas-es
Retrocompatibilidad de Gambas 3.19 con antiguas versiones [SOLUCIONADO] - Versión para impresión

+- Comunidad Gambas-es (https://gambas-es.org)
+-- Foro: Gambas (https://gambas-es.org/forum-3.html)
+--- Foro: General (https://gambas-es.org/forum-4.html)
+--- Tema: Retrocompatibilidad de Gambas 3.19 con antiguas versiones [SOLUCIONADO] (/thread-1765.html)



Retrocompatibilidad de Gambas 3.19 con antiguas versiones [SOLUCIONADO] - FranChesstein - 13-08-2024

Buenas !!
 
Acabo de actualizar Linux Mint, de la versión 21.3 a la 22 Wilma, y curiosamente se ha actualizado la versión de Gambas a la 3.19.0. Mi antigua versión si no recuerdo mal era la 3.15.

Para mi sorpresa el ejecutable de uno de los programas que tenía hechos ha dejado de funcionar con el error 'out of bounds'.

He intentado solucionarlo pero desgraciadamente concatena error tras error todos ellos derivados de la gestión de variables y arrays con desbordamientos y fuera de límites. Por lo que me preguntaba si sería posible recompilar el mismo programa para que fuera compatible con la versión antigua o hubiera alguna forma de hacerlo funcionar sin tener que reescribir todo el código.

Gracias



RE: Retrocompatibilidad de Gambas 3.19 con antiguas versiones - tercoide - 14-08-2024

Para mi lo mejor es revisar esos errores porque la 3.19 trae muchas mejoras. Vale la pena el esfuerzo.


RE: Retrocompatibilidad de Gambas 3.19 con antiguas versiones - FranChesstein - 14-08-2024

Estoy en ello, aunque ando un poco a ciegas porque no conozco exactamente cuales han sido los cambios que ha sufrido gambas. De momento he observado que al leer un archivo con open, concretamente con este formato:

 f = Open Dialog.Paths[0] For Read

y luego ir leyendo con

input #f, variable

los valores que toma "variable" siempre son los mismos e igual a 32 ¿¿???, esto me está generando que al asignarlos a arrays se salgan fuera de los límites para los que fueron declarados.

Con la versión de gambas que usaba anteriormente no tenía ese problema, a parte de, leía tanto valores numéricos como strings. Puede ser que estuviera mal programado, pero lo cierto es que funcionaba.

Las ayudas de gambas tampoco son muy aclaratorias porque no veo que se indique que estas instrucciones hayan cambiado. Simplemente he visto en los cambios de la versión 3.19 la siguiente mejora "Allow to open a directory in direct mode for reading only, as Linux allows that." que no se si habrá afectado al comportamiento para leer ficheros

En cualquier caso gracias por el consejo y seguiré buscando como volver a hacerlo funcionar


RE: Retrocompatibilidad de Gambas 3.19 con antiguas versiones - cogier - 14-08-2024

¿Has probado a recompilar el programa? Proyecto>Compilar todo.


RE: Retrocompatibilidad de Gambas 3.19 con antiguas versiones - tercoide - 14-08-2024

(14-08-2024, 17:30)FranChesstein escribió: Puede ser que estuviera mal programado, pero lo cierto es que funcionaba.

Gambas se puso mas estricto en algunas cosas pero eso tuvo como resultado mayor velocidad de ejecución en algunas tareas.


RE: Retrocompatibilidad de Gambas 3.19 con antiguas versiones [SOLUCIONADO] - FranChesstein - 15-08-2024

Buenas de nuevo  !

@cogier lo probé al decirmelo y no ha funcionado, de hecho en las propiedades del proyecto se puede generar distintos bytecodes para las diferentes versiones de gambas pero ninguna de ellas ha funcionado. Estuve trasteando pero no parece ser un problema de ese tipo.

Al final, he dado con el "problema" y lo voy a exponer aquí por si le sirve de orientación a alguien más:

La aplicación que tenía hecha grababa un archivo en modo texto que contenía valores numericos y etiquetas en modo texto (y de una sola palabra) con "file.save",  iba metiendo todos los valores en una variable tipo string y separaba los valores con un espacio en blanco " ". Al modo de string = string & valor & " " y luego simplemente file.save(destino, string)

Luego, ese mismo archivo lo recuperaba abriendolo con "open" e iba leyendo valor a valor con "input#", de forma que a la vez que leía un valor lo asignaba a su correspondiente campo.

Como he comentado, con la versión que usaba de Gambas no tenía ningún problema, pero por lo que sea Gambas 3.19 no lee los datos correctamente usando input#, de hecho omite datos en la lectura y provocaba que los datos se asignaran mal, lo que provocaba un "out of Bounds" al asignarse a matrices cuya dimensión declarada era inferior y "desbordamiento" porque intentaba seguir leyendo datos una vez alcanzado el "End of File", es como si no estuviera bien sincronizado al leer del archivo y asignarlos a la variable.

La solución que he adoptado de momento es la siguiente:

Usar la función complementaria de file.save, osea, leer el archivo con "file.load" y una vez asignado a un string cualquiera he generado una matriz de valores con la función "split" y he ido asignado cada elemento de la matriz a su correspondiente valor.

Y voila !      funcionó !!!!

Voy a marcar como solucionado el hilo de momento porque seguramente me encontraré más cosillas, pero al menos esto se dónde estaba el problema, aunque desconozco si es algo intencionado en Gambas o un bug.

Gracias por las molestias y un saludo


RE: Retrocompatibilidad de Gambas 3.19 con antiguas versiones [SOLUCIONADO] - tercoide - 15-08-2024

(15-08-2024, 14:08)FranChesstein escribió: Usar la función complementaria de file.save, osea, leer el archivo con "file.load" y una vez asignado a un string cualquiera he generado una matriz de valores con la función "split" y he ido asignado cada elemento de la matriz a su correspondiente valor.

Exactamente, hay que usar las funciones complementarias.