ASCAN ( )
Examina una matriz, buscando un valor determinado o hasta que un bloque devuelva el valor verdadero (.T.)
Sintaxis
ASCAN(, <expBúsqueda>,
[], []) –> nParadaEn
Argumentos
es la matriz que se va a examinar.
<expBúsqueda> es el valor de tipo simple que se va a buscar o un bloque de código. Si <expBúsqueda> es un valor simple, puede ser de tipo carácter, fecha, lógico o numérico.
es el elemento donde se inicia la búsqueda. Si no se especifica este argumento, la posición inicial por defecto es uno.
es el número de elementos que se van a examinar a partir de la posición inicial. Si no se especifica este argumento, se examinan todos los elementos, desde el elemento inicial hasta el final de la matriz.
Devuelve
ASCAN() devuelve un valor numérico que representa la posición en la matriz del último elemento examinado. Si <expBúsqueda> es un valor simple, ASCAN() devuelve la posición del primer elemento que coincida, o cero si no se encuentra ninguno. Si <expBúsqueda> es un bloque de código, ASCAN() devuelve la posición del elemento donde el bloque devuelve verdadero (.T.).
Descripción
ASCAN() es una función de matrices que busca un valor especificado en una matriz. Funciona como SEEK cuando se busca un valor simple. El valor de <expBúsqueda> se compara con los elementos de la matriz de destino, empezando por el carácter situado más a la izquierda de cada elemento y continuando hasta que no queden más caracteres en <expBúsqueda>. Si no encuentra ninguna coincidencia, ASCAN() continúa en el siguiente elemento de la matriz.
Como ASCAN() utiliza el operador igual (=) para las comparaciones, puede distinguir el estado de EXACT. Si EXACT está activado, el elemento de matriz destino debe ser exactamente igual que el resultado de <expBúsqueda> para que sean coincidentes.
Si el argumento <expBúsqueda> es un bloque de código, ASCAN() examina la matriz ejecutando el bloque en todos los elementos a los que se accede. A medida que encuentra cada elemento, ASCAN() pasa como argumento el valor del elemento al bloque de código y ejecuta una función EVAL() en el bloque. La operación de búsqueda se detiene cuando el bloque de código devuelve verdadero (.T.) o cuando ASCAN() llega al último elemento de la matriz.
Ejemplos
¦ El ejemplo siguiente muestra el examen de una matriz de tres
elementos que contiene valores simples, con un bloque de código como
criterio de búsqueda. El criterio del bloque de código muestra la
forma de realizar una búsqueda que diferencie mayúsculas y
minúsculas:
aMatriz := { “Tomás”, “María”, “Susana” }
? ASCAN(aMatriz, “María”) //Resultado: 2
? ASCAN(aMatriz, “maría”) //Resultado: 0
//
? ASCAN(aMatriz, { x UPPER(x) ;
== “MARIA” }) //Resultado: 2
¦ El ejemplo siguiente muestra una búsqueda de apariciones
múltiples de un argumento tras encontrar una coincidencia:
LOCAL aMatriz := { “Tomás”, “María”, “Susana”,;
“María” }, nInicio := 1
//
// Obtiene la posición del último elemento de la matriz
nEnFin := LEN(aMatriz)
DO WHILE (nPos := ASCAN(aMatriz, “María”, ;
nInicio)) > 0
? nPos, aMatriz[nPos]
//
// Obtiene la nueva posición inicial y
// comprueba la condición límite
IF (nInicio := ++nPos) > nEnFin
EXIT
ENDIF
ENDDO
¦ El ejemplo siguiente examina una matriz bidimensional
utilizando un bloque de código. Observe que el parámetro aVal del
bloque de código es una matriz:
LOCAL aMat:={}
CLS
AADD(aMat,{“uno”,”dos”})
AADD(aMat,{“tres”,”cuatro”})
AADD(aMat,{“cinco”,”seis”})
? ASCAN(aMat, {aVal aVal[2] == “cuatro”}) // Resultado: 2
Ficheros: La biblioteca asociada es DPXBASE.CH.