Page 1 of 1

Operador $ búsqueda de cadena

Posted: Sat Dec 05, 2020 3:54 am
by jparada
Hola,
Estoy obteniendo error de argumento $ en éste código

Code: Select all

procedure main
	local cTemp := GetType()

	? cTemp
	
	if cTemp $ { "bar", "line", "horizontalBar" }
		? 'ok...'
	else
		? 'NO ok...'
	endif
return

function GetType
	local cType := "bar"
return cType
Hacía ya tiempo que no utilizaba esto y estaba pensando que había cometido algún error, pero he revisado código "viejo" y en varios fuentes me he encontrado código mío o de algún compañero que hace exactamente ese tipo de validación, así que no sé por qué me está dando ese error.

Hay algún error que no estoy viendo? y en su caso alguna idea para hacer de otra manera lo que requiero.

Saludos,
Javier

Re: Operador $ búsqueda de cadena

Posted: Sat Dec 05, 2020 4:36 am
by jparada
Ascan es la solución, peroooo me queda la duda...

Saludos,
Javier

Re: Operador $ búsqueda de cadena

Posted: Sat Dec 05, 2020 7:19 am
by Claudio Ricardo
Hola...
El operador $ sólo funciona con cadenas de texto (strings)
En un array debes usar Ascan (aArray,cBusca,nInicia,nCuenta) que recorre el array buscando el parámetro
"cBusca" y nos devuelve la posición (numérico) si lo encuentra o cero si nó.

Pero en tu función puedes usar:

If cTemp == "bar" .OR. cTemp == "line" .OR. cTemp == "horizontalBar"
---> Encontrado
Else
---> No encontrado
EndIf

O si son muchos elementos mejor asi:

aArray := { "bar", "line", "horizontalBar" } // agregar más elementos al array si se necesitan

If Ascan ( aArray, cTemp) > 0
---> Encontrado
Else
---> No encontrado
EndIf

Re: Operador $ búsqueda de cadena

Posted: Sat Dec 05, 2020 8:07 am
by mol
A $ "ABC" // .T.
a $ "ABC" // .F.

Re: Operador $ búsqueda de cadena

Posted: Sat Dec 05, 2020 1:43 pm
by andyglezl
if cTemp $ { "bar", "line", "horizontalBar" }
? 'ok...'
else
? 'NO ok...'
endif

Code: Select all

	if cTemp $ "bar,line,horizontalBar"
		? 'ok...'
	else
		? 'NO ok...'
	endif	

Re: Operador $ búsqueda de cadena

Posted: Sat Dec 05, 2020 7:39 pm
by jparada
Hola,
Gracias a todos por su ayuda.

Saludos,
Javier

Re: Operador $ búsqueda de cadena

Posted: Sun Dec 06, 2020 12:33 am
by franco
You could also use,
if "bar" $ cTemp .or. "line" $ cTemp .or. "horizontalBar" $ cTemp
But Andres is less writing.

Re: Operador $ búsqueda de cadena

Posted: Sun Dec 06, 2020 9:39 am
by Claudio Ricardo
Hola...
Cuando se necesita encontrar un valor exacto y no una fracción de él se puede usar Hb_Ascan ()

Va programita ejemplo de los tres modos ( $ , Ascan () y Hb_Ascan () ) y cómo se comportan
ante diferentes valores de la variable " cTemp "