Operador $ búsqueda de cadena

HMG en Español

Moderator: Rathinagiri

Post Reply
jparada
Posts: 433
Joined: Fri Jan 23, 2009 5:18 pm

Operador $ búsqueda de cadena

Post 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
jparada
Posts: 433
Joined: Fri Jan 23, 2009 5:18 pm

Re: Operador $ búsqueda de cadena

Post by jparada »

Ascan es la solución, peroooo me queda la duda...

Saludos,
Javier
User avatar
Claudio Ricardo
Posts: 367
Joined: Tue Oct 27, 2020 3:38 am
DBs Used: DBF, MySQL, MariaDB
Location: Bs. As. - Argentina

Re: Operador $ búsqueda de cadena

Post 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
Corrige al sabio y lo harás más sabio, Corrige al necio y lo harás tu enemigo.
WhatsApp / Telegram: +54 911-63016162
User avatar
andyglezl
Posts: 1461
Joined: Fri Oct 26, 2012 7:58 pm
Location: Guadalajara Jalisco, MX
Contact:

Re: Operador $ búsqueda de cadena

Post 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	
Andrés González López
Desde Guadalajara, Jalisco. México.
jparada
Posts: 433
Joined: Fri Jan 23, 2009 5:18 pm

Re: Operador $ búsqueda de cadena

Post by jparada »

Hola,
Gracias a todos por su ayuda.

Saludos,
Javier
franco
Posts: 877
Joined: Sat Nov 02, 2013 5:42 am
DBs Used: DBF
Location: Canada

Re: Operador $ búsqueda de cadena

Post by franco »

You could also use,
if "bar" $ cTemp .or. "line" $ cTemp .or. "horizontalBar" $ cTemp
But Andres is less writing.
All The Best,
Franco
Canada
User avatar
Claudio Ricardo
Posts: 367
Joined: Tue Oct 27, 2020 3:38 am
DBs Used: DBF, MySQL, MariaDB
Location: Bs. As. - Argentina

Re: Operador $ búsqueda de cadena

Post 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 "
Attachments
Prueba_OP.zip
(1.47 MiB) Downloaded 109 times
Corrige al sabio y lo harás más sabio, Corrige al necio y lo harás tu enemigo.
WhatsApp / Telegram: +54 911-63016162
Post Reply