Problemas con isEmpty ()


([N2] ramiro) #1

Buenas tardes:

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…

Saludos. Ramiro


([N2] basesoft) #2

Gracias, Ramiro
Un abrazo fuerte

Juan Figueroa


([N4] Infortic) #3

eeee, tengo MILES de fórmulas con isempty()

Cómo pueden modificar algo así?

ME PARECE INCREIBLE, ¿ qué ha dicho soporte de algo así ?

es sólo isEmpty(CADENA) o también #CAMPO:isEmpty()


([N4] Juega) #4

Gracias por el aviso Ramiro

Para ser justos deberíamos decir que ‘han corregido’ un error, pues el espacio es un carácter más que debe contar.

Lo que no es de recibo es que se corrija ‘sin avisar’ cuando ya todo el mundo está usando la función.

Aunque parezca un poco exagerado me parece una prueba más, y van unas cuantas, de lo ‘life is hard’ en que se está convirtiendo el asunto.

Carlos Juega


([N4] ns) #5

+1


([N3] pacosatu) #6

Hola Ramiro.

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)

Saludos
Paco Satué


([N2] Esfero) #7

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?


([N2] Esfero) #8

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.


([N3] pacosatu) #9

Hola Esfero.

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.

Saludos
Paco Satué


([N2] ramiro) #10

Buenas tardes:

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…)

Saludos. Ramiro


([N2] ramiro) #11

Buenas:

No he contactado con soporte sobre este tema.
No me parecía necesario: la cosa era clara y estábamos en fin de semana…

Saludos. Ramiro


([N2] Esfero) #12

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())


([N3] pacosatu) #13

Hola Ramiro.

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.

Saludos
Paco Satué


([N4] Juega) #14

Hola mundo

Jope, más madera.
Casi que vale la pena no seguir escarbando.

A mí no se me ha dado el caso aún, pero tarde o temprano encontraré un usuario que quiera llenar un campo alfa con espacios.

Resulta que no va a poder porque la BBDD se los quita?

Repito, un espacio es un carácter tan significativo como cualquier otro y el usuario debe poder grabar lo que él quiera grabar.

PD: Por favor, que nadie me diga que es una ‘tontá’ grabar un campo con espacios en blanco.

Saludos
Carlos Juega


([N2] Mgalvezh) #15

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?

Saludos.
Miguel.


([N4] Infortic) #16

Si campo:isEmpty() está afectado por esto la fiesta es importante…


([N4] Juega) #17

Bueno, ni un minuto más a este tema

No se trata de cómo se va a pintar un dato, sino de cuándo y cómo se va a usar.
Ramiro lo ha sufrido .

Animo a los velneadores a ir a todas las facultades de informática del mundo munudial y gritar que un espacio es lo mismo que un nulo.

El que sobreviva a los ladrillazos y el cachondeo subsiguiente que nos lo cuente.

Ay, si kernigan y Richie leyyeran este foro…

Saludos
Carlos Juega