ASCAN( ) (Función)
Busca en una matriz un elemento que contenga los mismos datos y el mismo tipo de datos que una expresión.
ASCAN(ArrayName, eExpression [, nStartElement [, nElementsSearched [, nSearchColumn [, nFlags ]]]])
Valores devueltos
Numeric
Parámetros
ArrayName
Especifica el nombre de la matriz en la que se va a buscar.eExpression
Especifica la expresión general que se va a buscar.nStartElement
Especifica el número de elemento en el que empieza la búsqueda. El número de elemento que especifique se incluirá en la búsqueda. Si omite nStartElement, se buscará en toda la matriz de forma predeterminada.nElementsSearched
Especifica el número de elementos que se van a buscar. Si omite nStartElement y nElementsSearched, la búsqueda empezará por el primer elemento y continuará hasta el último elemento de la matriz si no se especifica nSearchColumn.Nota Puede hacer referencia de dos formas a un elemento de una matriz bidimensional de variables. El primer método utiliza dos subíndices para especificar la posición de fila y columna del elemento de la matriz; el otro método utiliza un número de elemento. Esta función y otras que manipulan matrices de dos dimensiones requieren números de elemento (nStartElement y nElementsSearched). Utilice AELEMENT( ) para devolver el número de elemento a partir de los subíndices de fila y columna de una matriz de dos dimensiones.
nSearchColumn
Especifica la columna de matriz para la búsqueda. A menudo resulta útil en matrices creadas por funciones tales como AFIELDS( ).Puede utilizar 0 o un número negativo para nSearchColumn, para imponer una búsqueda en toda la matriz. Si utiliza un valor mayor de 0 para nSearchColumn, ASCAN( ) trata la columna especificada como una matriz de una dimensión y utiliza cada fila de datos como elemento de la búsqueda. Por ejemplo, el ejemplo siguiente busca sólo en los elementos 3º y 4º de la columna (en lugar de hacerlo en toda la matriz).
? ASCAN(abc,"M",3,2,2)
Visual FoxPro genera un error si nSearchColumn es un número mayor que el número de columnas disponibles.
nFlags
Especifica criterios de búsqueda adicionales para aplicarlos a la función de búsqueda. Las búsquedas predeterminadas distinguen entre mayúsculas y minúsculas.El número que se especifica en nFlags proporciona un valor de bit que determina si se distingue entre mayúsculas o minúsculas o la configuración de exactitud de una búsqueda, de acuerdo con la tabla siguiente:
NFlag Bit Descripción 0 0000 Comportamiento actual existente en la versión anterior de Visual FoxPro 1 0001 No distingue entre mayúsculas y minúsculas 2 0010 Comportamiento actual existente en la versión anterior de Visual FoxPro 3 0011 No distingue entre mayúsculas y minúsculas 4 0100 Exactitud desactivada 5 0101 No distingue entre mayúsculas y minúsculas; exactitud desactivada 6 0110 Exactitud activada 7 0111 No distingue entre mayúsculas y minúsculas; exactitud activada 8 1000 Devolver número de fila 9 1001 No distingue entre mayúsculas y minúsculas; devolver número de fila 10 1010 Devolver número de fila 11 1011 No distingue entre mayúsculas y minúsculas; devolver número de fila 12 1100 Devolver número de fila; exactitud desactivada 13 1101 No distingue entre mayúsculas y minúsculas; devolver número de fila; exactitud desactivada 14 1110 Devolver número de fila; exactitud activada 15 1111 No distingue entre mayúsculas y minúsculas; devolver número de fila; exactitud activada
Los valores de bit son los siguientes:
Bit | Descripción |
---|---|
0 | Bit para distinguir entre mayúsculas y minúsculas |
1 | Bit para exactitud activada (sólo es efectivo si se establece el bit 2) |
2 | Bit para suplantar la configuración de exactitud del sistema |
3 | Devolver el número de fila si es una matriz de dos dimensiones |
nFlags se aplica sólo a la función ASCAN( ) y no afecta a las configuraciones de SET EXACT.
Observaciones
Si se encuentra alguna coincidencia, ASCAN( ) devolverá el número del elemento que contiene la expresión. Si no se encuentra ninguna coincidencia, devolverá 0.
Los criterios para la coincidencia correcta de los datos de caracteres están determinados por la configuración en el sistema de SET EXACT, si no está establecido nFlag con el bit 2. Si SET EXACT está establecido en ON, el elemento deberá coincidir con la expresión de búsqueda carácter a carácter y tener la misma longitud. Si SET EXACT está establecido en OFF y el elemento y la expresión de búsqueda coinciden hasta el final de la expresión, la coincidencia será válida. Si desea obtener más información sobre los criterios de coincidencia de las cadenas de caracteres, vea la tabla de comparación de cadenas en el tema SET EXACT.
En la versión anterior de Visual FoxPro, los parámetros nStartElement y nElementsSearched son opcionales. nStartElement debe ser > 0, mientras que nElementsSearched puede ser cualquier valor. Para acomodar el nuevo parámetro nSearchColumn, deberá pasar por alto estos parámetros; para ello, deberá pasarles un valor de –1.
Los parámetros nStartElement y nElementsSearched adquieren un significado especial si nSearchColumn es mayor de 0. En la versión anterior de Visual FoxPro, siempre hacían referencia a la matriz completa. Para esta versión de Visual FoxPro, si se pasa un valor positivo de nSearchColumn, los valores de nStartElement y nElementsSearched hacen referencia a la matriz única monodimensional representada por nSearchColumn. Por ejemplo, lo siguiente buscaría sólo en el tercer y el cuarto elementos de la columna 2, no en la matriz completa:
? ASCAN(abc,"M",3,2,2)
Ejemplo
El ejemplo siguiente crea y llena una matriz con nombres de empresas, a continuación utiliza ASCAN( ) para buscar el nombre de una empresa determinada. Si encuentra el nombre de la empresa, lo elimina de la matriz.
CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'Data\testdata')
USE customer && Open customer table
SELECT company FROM customer ;
WHERE country = 'UK' ;
INTO ARRAY gaCompanies
gnCount = _TALLY
gcName = 'Seven Seas Imports'
CLEAR
DISPLAY MEMORY LIKE gaCompanies*
gnPos = ASCAN(gaCompanies, gcName) && Search for company
IF gnPos != 0
** Company found, remove it from the array ** = ADEL(gaCompanies, gnPos) gnCount = gnCount - 1 ENDIF DISPLAY MEMORY LIKE gaCompanies
Vea también
ACOPY( ) | ADEL( ) | ADIR( ) | AELEMENT( ) | AFIELDS( ) | AINS( ) | ASORT( ) | ASUBSCRIPT( ) | DIMENSION | SET EXACT