Page 1 of 1

como puedo corregir este error que tengo en codigo?

Posted: Sat Dec 31, 2016 8:29 pm
by goosfancito
Hola

tengo que inicializar un get con:
v:= space(2)
pero necesito analizar luego de que el usuario ingrese datos, que si ingresa un espacio
lo tome como valido.
if (alltrim(v)) == " " )
....
el problema es justamente ese, que si algo un alltrim(v) saca todos los espacios.
hay alguna otra forma de inicializar esa variable "v"?

gracias.

Re: como puedo corregir este error que tengo en codigo?

Posted: Sat Dec 31, 2016 9:00 pm
by lubin
Holas

Quizas algo asi (.not. empty(v) .and. " " $ v ) ---->>> "que no este vacio y que un espacio esta contenido en v"

Saludos y FELIZ AÑO

Lubin

Re: como puedo corregir este error que tengo en codigo?

Posted: Sat Dec 31, 2016 9:04 pm
by goosfancito
Pero el empty(v) si son dos espacios, no lo tomaria como empty?

Re: como puedo corregir este error que tengo en codigo?

Posted: Sun Jan 01, 2017 4:01 pm
by lubin
Luego de fiesta....

que tal asi len(alltrim(v)) > 1 ---->>> "si quito los espacios y aun queda un carácter o mas ... es valido ??? "

Saludosss y reitero FELIZ 2017

Lubin

Re: como puedo corregir este error que tengo en codigo?

Posted: Mon Jan 02, 2017 11:31 am
by goosfancito
El Alltrim(x) para mi saca todos los espacios que existen en la cadena.
Si el valor que "tipie" en el get fue un espacio, a ese espacio tambien lo saca.
Es por ese mi problema.

gracias.

Re: como puedo corregir este error que tengo en codigo?

Posted: Mon Jan 02, 2017 10:55 pm
by FranciscoA
Intenta asi:
if alltrim(substr(v,2,1)) == " "

Re: como puedo corregir este error que tengo en codigo?

Posted: Mon Jan 02, 2017 11:22 pm
by FiveWiDi
Ahí va mi idea, a ver si sirve.

Cuando inicias tu DIALOG debes iniciar una variable, por ejemplo 'nEspacios := 0'

DESPUÉS de la definición del GET debes colocar esta 'instrucción':

oMyGet:bKeyDown = {|nKey, nFlags| IIF( nKey == VK_SPACE, nEspacios++, Nil ) }

Después en tu código (finalizado el DIALOG) puedes comprobar si la longitud del GET es superior a '0' (ó a '1' ó al valor que desees controlar) y si además 'nEspacios' vale '1'.
A partir de ahí lo que quieras.
No me he planteado como resolver si borra las teclas pulsadas antes de finalizar el DIALOG, pués 'nEspacios' podría tener un valor que no fuese cierto.

Re: como puedo corregir este error que tengo en codigo?

Posted: Tue Jan 03, 2017 12:59 am
by goosfancito
PAra mi es un tema que deberian de tomarlo en cuenta para las proximas salidas
del xharbour o harbour.

porque pasan varias cosas cuando tenes que inicializar las variables, entre ellas esto:

una variable inicializada con un valor queda definida por el tamaño de la misma y no por la que uno
desea. Ej:
v:= space(30)
v:= "hola"

en el primer caso el maxlen es 30, en el segundo es 4. deberia de poder definirse el maxlen
y cuando se le pase un valor que no lo cambie, esto ocurre (me) cuando tengo que leer un dato
desde una DB, si el codigo existe, a "V" le paso el valor de la DB y ahi queda definida el maxlen y
deberia de poder decirle que el maxlen es 30 no el tamaño del dato.

las variables deberian (con respecto a los get) de poder inicializarse y que esos valores no sean espacios


Solo sugerencias.
gracias.

Re: como puedo corregir este error que tengo en codigo?

Posted: Tue Jan 03, 2017 1:46 am
by nnicanor
v:=padr("hola",30)

? Len( v ) // Resultado 30
? Len( alltrim(v) ) // Resultado 4


Slds,

Re: como puedo corregir este error que tengo en codigo?

Posted: Tue Jan 03, 2017 9:16 am
by goosfancito
gracias

Re: como puedo corregir este error que tengo en codigo?

Posted: Tue Jan 03, 2017 11:42 am
by Carlos Mora
Hay una cuestión de definición. No hay un espacio predefinido y otro mecanizado, los dos son Chr(32)
Si Chr(32) es válido, rellená la variable con otro caracter no válido.
En consola el Chr(255) no es visible, por lo que yo tomaría como valor inicial

v:= Replicate( Chr(255), 4 ) // Donde 4 es el largo que tiene que tener el get.
@get ...... PICTURE '@K XXXX' // El @K borra la variable si el usuario teclea algo, quedando en

valid v != Replicate( Chr(255), 4 )

mientras el usuario no tipea nada, la variable será igual a Replicate( Chr(255), 4 ), en cuanto teclee algo, incluyendo un espacio, ya se volverá lo digitado, estirado hasta la longitud, que en el ejemplo es 4.

Creo que con esto te funcionaría.