Page 1 of 1
Existe la función?
Posted: Mon Dec 04, 2023 6:53 pm
by Armando
Foreros:
Actualmente tengo este código
Code: Select all | Expand
CASE nVez == 5 .OR. nVez == 21 .OR. nVez == 37 .OR. nVez == 53 .OR. nVez == 71 .OR. nVez == 87 .OR. nVez == 103 .OR.;
nVez == 119 .OR. nVez == 137 .OR. nVez == 153 .OR. nVez == 169 .OR. nVez == 185
Pero cómo ven son muchos OR, me parece haber visto una función cuyos parámetros
serían solo separados por comas (,) algo así como esto:
Code: Select all | Expand
nVez = 5,21,37,53,71,87,103,119,137,153,169,185
Será que existe la función o solo estaba soñando?
Saludos
Re: Existe la función?
Posted: Mon Dec 04, 2023 7:26 pm
by Jimmy
hi,
Armando wrote:Code: Select all | Expand
CASE nVez == 5 .OR. nVez == 21 .OR. nVez == 37 .OR. nVez == 53 .OR. nVez == 71 .OR. nVez == 87 .OR. nVez == 103 .OR.;
nVez == 119 .OR. nVez == 137 .OR. nVez == 153 .OR. nVez == 169 .OR. nVez == 185
you can ASCAN for Value
Code: Select all | Expand
aVez := {5,21,37,53,71,87,103,119,137,153,169,185}
CASE ASCAN(aVez, nVez) > 0
Re: Existe la función?
Posted: Mon Dec 04, 2023 8:12 pm
by Armando
Jimmy:
It's a good idea.
Thanks so much
Regards
Re: Existe la función?
Posted: Sat Dec 09, 2023 1:24 pm
by RSalazarU
Esto tambien puede servir
Code: Select all | Expand
SWITCH nVez
CASE 5
CASE 21
CASE 37
CASE 53
CASE 71
CASE 87
CASE 103
Msqinfo("Caso1")
Exit //<- esto es SUPER IMPORTANTE
CASE 119
CASE 137
CASE 153
CASE 169
CASE 185
Msqinfo("Caso2")
Exit //<- esto es SUPER IMPORTANTE
DEFAULT
Msqinfo("Sin EXITO!!")
//
END
Att. Rolando
Cochabamba, Bolivia
Re: Existe la función?
Posted: Sat Dec 09, 2023 1:33 pm
by RSalazarU
Otro Ejemplo
Code: Select all | Expand
//--------------------------//
//Cambia xVar a string valido para Sql
FUNCTION Val2Str( xVar )
Local cStr
if xVar = NIL
cStr := "NULL"
else
SWITCH ValType(xVar)
CASE "L" //Logical
cStr := if(xVar,"TRUE","FALSE")
EXIT
CASE "N" //Numeric
CASE "F" //HB_FT_FLOAT S/G Harbour
CASE "B" //DBF_FT_DOUBLE S/G ADS
CASE "I" //Integer
CASE "S" //Short
CASE "+" //AutoInc(Integer)
CASE "Z" //Currency
CASE "Y" //Money
cStr := Str(xVar,,,.T.)
if Left(cStr,1)="*"
cStr := Str(xVar, LenNum(xVar)+15, 15 /*digitos de precision por tipo FLOAT/DOUBLE*/, .T. /*lTrim*/)
endif
cStr := LTrim( cQuitaCeros(cStr) )
EXIT
CASE "D" //Date
if Empty(xVar) //es necesario esta pregunta. Ejm: CTOD("") => ' / / '
cStr := "NULL"
else
cStr := cValToStr(xVar,"YYYY-MM-DD")
endif
EXIT
CASE "C" //Char
CASE "Q" //HB_FT_VARLENGTH //ADS_FT_VARCHAR
CASE "V" //
//NOTAS
//- Reemplazamos:
// . comilla simple(') por su similar (´), evitamos inyeccion sql y error 2113 Unexpected end of statement
// . chr(0) por chr(32), chr(0) en un string sql provoca error: 2113 Unexpected end of statement, 04/05/2017
cStr := StrTran(StrTran(xVar,"'","´"),chr(0),chr(32))
EXIT
/*cometeriamos un error
CASE "M" //Memo
CASE "W" //DBF_FT_BINARY
CASE "P" //DBF_FT_IMAGE
if Empty(xVar) //es necesario esta pregunta. Ejm: CTOD("") => ' / / '
cStr := "NULL"
else
cStr := StrTran(StrTran(xVar,"'","´"),chr(0),chr(32))
endif
EXIT
*/
/*va por DEFAULT
CASE "T" //Time
CASE "@" //TimeStamp
CASE "=" //ModTime
*/
DEFAULT
cStr := cValToChar(xVar)
END
endif
Return cStr
Rolando
Cochabamba, Bolivia
Re: Existe la función?
Posted: Sat Dec 09, 2023 3:07 pm
by Armando
Rolando:
Amigo, te agradezco la sugerencia, pero la idea es evitar tanto código como los .OR.
será que tal vez no entendí tu código?
Saludos
Re: Existe la función?
Posted: Sat Dec 09, 2023 4:55 pm
by FranciscoA
Armando, y asi?
Code: Select all | Expand
local nVez := 103
if alltrim(Str(nVez)) $ "5,21,37,53,71,87,103,119,137,153,169,185"
msginfo("Encontrado",nVez)
endif
Re: Existe la función?
Posted: Sat Dec 09, 2023 5:43 pm
by Armando
Francisco:
Esta sugerencia puede ser !
Muchas gracias, saludos
Re: Existe la función?
Posted: Sat Dec 09, 2023 7:27 pm
by FiveWiDi
FranciscoA wrote:Armando, y asi?
Code: Select all | Expand
local nVez := 103
if alltrim(Str(nVez)) $ "5,21,37,53,71,87,103,119,137,153,169,185"
msginfo("Encontrado",nVez)
endif
La idea para mi es válida, yo la utilizo así:
-->> if ( "," + alltrim( Str(nVez) ) + "," ) $ ",5,21,37,53,71,87,103,119,137,153,169,185,"
caso contrario daría como válido el valor '3'.
Re: Existe la función?
Posted: Sat Dec 09, 2023 7:38 pm
by Armando
Carlos:
Por supuesto que funcionaría y me parece que de manera exacta pues
el siguiente código mostraría encontrado y es falso.
Code: Select all | Expand
local nVez := 103
if alltrim(Str(nVez)) $ "5,1030,21,37,53,71,87,119,137,153,169,185"
msginfo("Encontrado",nVez)
endif
Saludos y gracias a ambos (Francisco y Carlos, Carlos y Francisco)
Re: Existe la función?
Posted: Mon Dec 11, 2023 8:11 pm
by nageswaragunupudi
This suggestion of Mr. Jimmy
you can ASCAN for Value
Code:
aVez := {5,21,37,53,71,87,103,119,137,153,169,185}
CASE ASCAN(aVez, nVez) > 0
is the best and the right one, in my opinion.
Re: Existe la función?
Posted: Tue Dec 12, 2023 5:21 pm
by Armando
Mr. Rao:
Thanks a lot.
Regards