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