Compartir a través de


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