Creo que con la versión 7.19.1 la función isEmpty() ha cambiado de comportamiento (los blancos ahora cuentan)
Tenía una rutina que lee datos de un fichero de texto e identificaba cosas en función de textos en posiciones fijas
Algo parecido a esto (sea X el texto de una linea):
Será Linea de producto si:
( isEmpty ( mid ( X , 00 , 06 ) ) = 0 ) & ( isEmpty ( mid ( X , 06 , 02 ) ) = 1 ) & …
Funcionaba bien, pero con la versión 7.19 para que funcione he tenido que reescribirlo en la forma
( len ( trimmedString ( mid ( X , 00 , 06 ) ) ) > 0 ) & ( len ( trimmedString ( mid ( X , 06 , 02 ) ) ) = 0 ) & …
Lo cuento para que no perdáis tiempo y paciencia como yo…
Si ha cambiado lo que Velneo considera como cadena vacía sería necesario una aclaración por parte de Soporte, para conocer si es algo premeditado o un despiste del equipo de desarrollo (o una nueva broma pesada de las librerías QT).
Desde luego puede ser un problema grave si este cambio afecta a la lógica de negocio de la aplicación.
Ahora la expresión isEmpty(CSTRING) = 1 es cierta y solo cierta cuando len(CSTRING) = 0, lo cual implica que la función isEmpty() es totalmente innecesaria ya que se puede sustituir por la función len().
Para saber si una cadena CSTRING contiene únicamente “espacios en blanco, tabulaciones, retornos de carro o avances de línea o cualquier combinación de éstos” usaremos la expresión: len(trimmedString(CSTRING)) = 0
Para saber si una cadena CSTRING contiene únicamente “espacios en blanco” usaremos la expresión: countString(CSTRING, " ") = len(CSTRING)
Hola, he estado probando el comportamiento de isEmply() con la 7.19.1 y lo cierto es que no le encuentro ningún comportamiento extraño.
Las pruebas que he realizado son las siguientes:
Pongo en un formulario un campo texto (Alfa 256) enlazado a un cuadro de texto y un botón al lado con la siguiente condición en la propiedad “Condición Activa” ==> choose(isEmpty(#CAMPO), 0, 1)
Y como os comento el comportamiento es normal, puedo introducir todos los espacios que quiera que mientras no pulse una letra o numero el botón no se activa.
He insertado manualmente espacios en blanco en el campo antes de grabar y al volver a entrar el funcionamiento seguía siendo correcto
El problema con el isEmply(),
¿Con que tipo de campo se producía?,
¿sobre que control tenías enlazado los datos?,
¿soporte te ha comentado algo más?
Hola de nuevo,
acabo de realizar las mismas pruebas, pero cambiando el campo Alfa 256 por una variable local tipo texto y el comportamiento es el que nos especifica Ramiro, esta claro que isEmply() contra un campo de la base de datos aparentenmente funciona por la limpieza de los espacios que realiza velneo en el momento que guarda el dato en la base de datos, aunque en el control los espacios sigan presentes todavía.
Efectívamente, los campos de tipo Alfa pierden siempre los espacios del final y la función isEmpty() devuelve 1 por mucho que tecleemos espacios en blanco.
La duda que tengo es a partir de qué versión ha cambiado el comportamiento de la función isEmpty(), si es que realmente ha cambiado. He probado una 7.18RC y el comportamiento es como en la 7.19, es decir, isEmpty(" ") = 0.
Que Ramiro nos diga la respuesta de Soporte o en qué versión empezó a fallar su rutina.
El código que explicaba en mi primer post y que dejó de funcionar lo había escrito en Febrero de este año (versión 7.18.1)
Durante Febrero y Marzo lo usé mucho y funcionaba correctamente (es decir isEmpty (cadena texto) devolvía vacío cuando la cadena solo contenía blancos). Durante un par de meses no necesité usar esa opción y el viernes cuando volví a usarla, la lógica no funcionaba. Me llevó horas descubrir que se trataba de un cambio de comportamiento en isEmpty()
La broma era tan pesada que añadí un par de horas más para eliminar por completo su uso como función independiente en mi código (y no lo hice con Campo:isEmpty() porque me hubiera llevado semanas…)
Hola, acabo de probar el isEmpty() en la versión 7.16 y obtengo la misma respuesta que en la 7.19.1
isEmpty("") = 1
isEmpty(“A”) = 0
isEmpty(" ") = 0
En fin, lo que esta claro es que este es el funcionamiento que tiene la función y hay que tenerlo en cuenta, para no llevarnos sustos.
Ademas hay que tener en cuenta el borrado de los espacios no significativos que hace Velneo en los campos Alfa, para no llevarnos sorpresas, puesto que ejecutar un isEmpty() sobre un campo Alfa: #CAMPO = “” ==> isEmpty(#CAMPO) = 1 #CAMPO = “A” ==> isEmpty(#CAMPO) = 0 #CAMPO = " " ==> isEmpty(#CAMPO) = 1 (Velneo elimina los espacios de la derecha antes de ejecutar isEmpty())
Acabo de ver la respuesta de Esfero y añado una prueba más.
He probado con la versión 7.17.9991.13113 y la función isEmpty() funciona igual que la 7.19, por lo tanto no entiendo qué es lo que ha sucedido con tu código. Puede ser que isEmpty() cambió su funcionamiento solo en la 7.18.1.
En cualquier caso, si fuera cierto, es un problema gravísimo y me gustaría que alguien del foro con versiones más antiguas de vDevelop hiciera las pruebas correspondientes. Un cambio como éste pondría los pelos de punta ante cualquier aplicación en producción.
Ramiro, espero que todo haya sido un susto sin mayores consecuencias.
jejeje, hombre Carlos, no seamos drásticos, un campo alfa ‘solo’ con espacios en blanco, no se ve (a no ser que cambiemos el color claro), entonces que queremos significar haciendo esto?, ya sabemos que para una celda de memoria no es lo mismo, pero a nivel de usuario?