AADD() Añade un nuevo elemento al final de una matriz ------------------------------------------------------------------------------ Sintaxis AADD(<aDestáno >, <expValor>) --> Valor Argumentos <aDestáno> es la matriz a la que se va a a.adir un nuevo elemento. <expValor> es el valor que se va a asignar al nuevo elemento. Devuelve AADD() eval.a <expValor> y devuelve su valor. Si no se especifica <expValor>, AADD() devuelve NIL. Descripción AADD() es una función de tratamiento de matrices que aumenta en uno la longitud real de la matriz destáno. Al elemento reci.n creado se le asigna el valor especificado por <expValor>. AADD() se utiliza para ampliar din.micamente una matriz. Resulta .til para crear listas o colas din.micas. Un buen ejemplo de esto es la matriz GetList, que utiliza el sistema GET para almacenar objetos Get. Despu.s de ejecutar READ o CLEAR GETS, GetList pasa a ser una matriz vac.a. Cada vez que se ejecuta un mandato @...GET, el sistema GET utiliza AADD() para a.adir un elemento nuevo al final de la matriz GetList y, a continúa.ión, asigna un nuevo objeto Get al nuevo elemento. AADD() es similar a ASIZE(), excepto en que a.ade los elementos de uno en uno. ASIZE(), en cambio, puede ampliar o reducir una matriz directamente a un tama.o especificado. AADD() tiene la ventaja de que permite asignar un valor al nuevo elemento, mientras que ASIZE() no lo permite. AADD() también puede parecer similar a AINS(), pero se diferencian en que AINS() desplaza elementos dentro de una matriz, pero no cambia la longitud de la misma. Nota: Si <expValor> es otra matriz, el nuevo elemento de la matriz destáno contendr. una referencia a la matriz especificada por <expValor>. Ejemplos . Los ejemplos siguientes muestran los resultados de llamadas m.ltiples a AADD() con una matriz: aMatriz := {} //Resultado: aMatriz es una matriz //vac.a AADD(aMatriz, 5) //Resultado: aMatriz es { 5 } AADD(aMatriz, 10) //Resultado: aMatriz es { 5, 10 } AADD(aMatriz, { 12, 10 }) //Resultado: aMatriz es //{ 5, 10, { 12, 10 } } Ficheros: La biblioteca asociada es CLIPPER.LIB.
ABS() Devuelve el valor absoluto de una expresión numérica ------------------------------------------------------------------------------ Sintaxis ABS(<nExp>) --> nPositivo Argumentos <nExp> es la expresión numérica que se va a evaluar. Devuelve ABS() devuelve un número que representa el valor absoluto de su argumento. El valor devuelto puede ser un número positivo o cero. Descripción ABS() es una función numérica que determina la magnitud de un valor numérico, independientemente de su signo. Permite, por ejemplo, obtener la diferencia entre dos números como valor positivo, sin conocer de antemano cu.l de los dos es mayor. Formalmente, ABS(x) se define en función de su argumento x de la siguiente manera: si x >= 0, ABS(x) devuelve x; en caso contrario, ABS(x) devuelve el valor negativo de x. Ejemplos . Los ejemplos siguientes muestran resultados t.picos de ABS(): nNum1 := 100 nNum2 := 150 ? nNum1 - nNum2 //Resultado:-50 ? ABS(nNum1 - nNum2) //Resultado: 50 ? ABS(nNum2 - nNum1) //Resultado: 50 ? ABS(-12) //Resultado: 12 ? ABS(0) //Resultado: 0 Ficheros: La biblioteca asociada es CLIPPER.LIB.
ACHOICE() Ejecuta un men. emergente ------------------------------------------------------------------------------ Sintaxis ACHOICE(<nSup>, <nIzq>, <nInf>, <nDer>, <acElementosMen.>, [<alElementosSeleccionables> | <lElementosSeleccionables>], [<cfunciónUsuario>], [<nElementoInicial>], [<nFilaVentana>]) --> nPosici.n Argumentos <nSup>, <nIzq> y <nInf>, <nDer> son las coordenadas superior izquierda e inferior derecha de la ventana. Los valores de fila pueden estar comprendidos entre cero y MAXROW() y los valores de columna entre cero y MAXCOL(). <acElementosMen.> es una matriz de cadenas de carácteres que se va a mostrar como elementos de men.. Los elementos de men. individuales se identifican por sus posiciónes numéricas en esta matriz. <alElementosSeleccionables> es una matriz paralela de valores lógicos (un elemento para cada elemento de <acElementosMen.>), que especifica los elementos de men. seleccionables. Los elementos de esta matriz pueden ser valores lógicos o cadenas de carácteres. ACHOICE() no permite cadenas nulas y detiene la visualización si encuentra una. Si alg.n elemento es una cadena de carácteres, se eval.a como macroexpresión y debe dar un resultado de tipo l.gico. En cualquier caso, un valor falso (.F.) significa que el elemento de men. correspondiente no va a estar disponible y un valor verdadero (.T.) significa que lo estar.. Si se especifica los <lElementosSeleccionables> en vez de una matriz, falso (.F.) hace que los elementos de men. no están disponibles y verdadero (.T.) hace que lo están. Por defecto, todos los elementos de men. están disponibles para su selecci.n. <cfunciónUsuario> es el nombre de una función que se ejecuta cuando se pulsa una tecla irreconocible. El nombre de función debe especificarse como una expresión de carácteres sin paréntesis ni argumentos. Recuerde que el comportamiento de ACHOICE() se ve afectado por la presencia de este argumento. Si desea más información, consulte el comentario siguiente. <nElementoInicial> es la posición en la matriz <acElementosMen.> del elemento que aparece resaltado al mostrarse el men. por primera vez. Si se especifica un elemento de men. no disponible o no se especifican argumentos, el elemento de men. inicial ser. el primer elemento seleccionable de la matriz. <nFilaVentana> es el número de fila de la ventana en la que aparece el elemento de men. inicial. La numeraci.n de las filas comienza desde cero. Por defecto, el elemento de men. inicial aparece lo m.s cerca posible de la parte superior de la ventana, sin dejar filas vac.as al final. Si existen suficientes elementos de men. a continúa.ión del elemento inicial para llenar la ventana, el elemento inicial aparece en la primera fila (fila cero) del men.. Este argumento se utiliza para controlar el aspecto del men. inicial cuando hay m.s elementos de men. de los que caben en la ventana. Como ocurre con las dem.s funciónes, los argumentos opciónales pueden omitirse utilizando una coma en vez del argumento real. Devuelve ACHOICE() devuelve la posición numérica en la matriz <acElementosMen.> del elemento de men. seleccionado. Si se aborta el proceso de selecci.n, ACHOICE() devuelve cero. Descripción ACHOICE() es una función de interfaz de usuario que permite crear varios tipos de men.s emergentes. Cada men. utiliza una matriz de cadenas de carácteres como elementos de men. y una matriz paralela de valores lógicos para determinar si los elementos deben ser seleccionables o no. Cuando se invoca ACHOICE(), la lista de elementos de men. aparece dentro de las coordenadas de ventana especificadas. Si el usuario pulsa Intro, se selecciona el elemento actual y ACHOICE() devuelve la posición del elemento de men. en <acElementosMen.>. Si el usuario pulsa Esc, ACHOICE() se aborta y devuelve cero. Los elementos de men. pueden desplazarse si el número de elementos de <acElementosMen.> excede el número de filas de la ventana de men. y el usuario intenta desplazar la zona resaltada m.s all. del principio o del final de la ventana. Recuerde que la zona resaltada no salta de línea cuando se llega al principio o al final de la lista de elementos. No obstante, la zona resaltada puede saltar de línea si se pulsa la primera letra de un elemento del grupo cuya primera letra coincida con la tecla pulsada. . Desplazamiento por el men.: ACHOICE() posee dos modos, dependiendo de si se especifica el argumento <cfunciónUsuario>. Si no se especifica, se activan las siguientes teclas de desplazamiento: Teclas de ACHOICE() (sin función de usuario) --------------------------------------------------------------------- Tecla Acción --------------------------------------------------------------------- Arriba Va al elemento anterior Abajo Va al elemento siguiente Inicio Va al primer elemento del men. Fin Va al último elemento del men. Ctrl-Inicio Va al primer elemento de la ventana Ctrl-Fin Va al último elemento de la ventana ReP.g Va a la p.gina anterior AvP.g Va a la p.gina siguiente Ctrl-ReP.g Va al primer elemento del men. Ctrl-AvP.g Va al último elemento del men. Intro Selecciona el elemento actual Esc Anula la selecci.n Izquierda Anula la selecci.n Derecha Anula la selecci.n Primera Letra Va al elemento siguiente que comience con esa letra --------------------------------------------------------------------- . Color: Los elementos de men. aparecen en el color estándar, la zona resaltada en el color resaltado y los elementos no disponibles en el color no seleccionado. Por ejemplo, la siguiente sentencia de color: SETCOLOR("W+/N, BG+/B, , , W/N") muestra un men. blanco brillante sobre negro, la zona resaltada en c.an brillante sobre azul y los elementos de men. no disponibles en blanco atenuado sobre negro. . función de Usuario: Al igual que las restántes funciónes de interfaz de usuario, ACHOICE() permite utilizar una función definida por el usuario. Esta función se especifica cuando se desean anidar invocaciones a ACHOICE() para crear men.s jer.rquicos o redefinir teclas. Si se especifica una función de usuario, ACHOICE() sólo procesa autom.ticamente un grupo de teclas reducido que se lista en la tabla siguiente. Todas las dem.s teclas generan una excepci.n de teclado que pasa el control a la función de usuario para su tratamiento. El control pasa también a la función de usuario cuando ACHOICE() queda inactiva (es decir, cuando no quedan teclas para procesar). Teclas de ACHOICE() (función de Usuario Especificada) --------------------------------------------------------------------- Tecla Acción --------------------------------------------------------------------- Arriba Va al elemento anterior Abajo Va al elemento siguiente Ctrl-Inicio Va al primer elemento de la ventana Ctrl-Fin Va al último elemento de la ventana ReP.g Va a la p.gina anterior AvP.g Va a la p.gina siguiente Ctrl-ReP.g Va al primer elemento del men. Ctrl-AvP.g Va al último elemento del men. --------------------------------------------------------------------- Cuando ACHOICE() ejecuta la función de usuario, le pasa autom.ticamente estos tres parámetros: - Modo actual de ACHOICE() - Elemento actual de la matriz de elementos - Posici.n de fila relativa en la ventana de men. El modo indica el estado actual de ACHOICE(), que depende de la tecla pulsada y de la acci.n que realiza ACHOICE() antes de ejecutar la función de usuario. El parámetro de modo puede poseer los valores que se indican a continúa.ión: Modos de ACHOICE() --------------------------------------------------------------------- Modo Achoice.ch Descripción --------------------------------------------------------------------- 0 AC_IDLE Inactivo 1 AC_HITTOP Intento de desplazar el cursor por encima del principio de la lista 2 AC_HITBOTTOM Intento de desplazar el cursor por debajo del final de la lista 3 AC_EXCEPT Excepciones del teclado 4 AC_NOITEM No quedan elementos seleccionables --------------------------------------------------------------------- Una vez que la función de usuario completa las acciones correspondientes al modo de ACHOICE() o de LASTKEY(), devuelve un valor que solicita ACHOICE() que realice una de las operación.s siguientes: Valores de Retorno de la función de Usuario de ACHOICE() --------------------------------------------------------------------- Valor Achoice.ch Acción --------------------------------------------------------------------- 0 AC_ABORT Anular la selecci.n 1 AC_SELECT Confirmar la selecci.n 2 AC_CONT Continuar ACHOICE() 3 AC_GOTO Ir al pr.ximo elemento cuyo primer carácter coincida con la tecla pulsada --------------------------------------------------------------------- Ejemplos . El ejemplo siguiente utiliza dos matrices literales que especifican los elementos de men. y los criterios de selecci.n. Cuando el men. aparece en pantalla y el usuario ha realizado la selecci.n, se muestra el nombre del elemento de men. seleccionado: acElementosMenu := {"Uno", "Dos", "-------", "Tres"} alElementosSeleccionables := {.T., .T., .F., .T.} nPosicion := ACHOICE(10, 10, 12, 15, acElementosMenu,; alElementosSeleccionables) ? acElementosMenu [nPosicion] . El ejemplo siguiente declara una matriz de elementos de men. y utiliza una función de usuario que muestra un mensaje con cada opción resaltada: #include "achoice.ch" #include "inkey.ch" PROCEDURE Main() LOCAL acElementosMenu [4], nValDev LOCAL nTecla, nPos acElementosMenu[1] := "A.adir" acElementosMenu[2] := "Editar" acElementosMenu[3] := "Borrar" acElementosMenu[4] := "Actualizar" CLS nPos := ACHOICE( 10, 10, 13, 15, acElementosMenu,; .T., "cfunciónUsuario" ) DO CASE CASE nPos == 1 // Poner aqu. la rutina que a.ade CASE nPos == 2 // Poner aqu. la rutina que edita CASE nPos == 3 // Poner aqu. la rutina que borra CASE nPos ==4 // Poner aqu. la rutina que actualiza ENDCASE RETURN FUNCTION cfunciónUsuario (nModo nElementoAct nRosFila) LOCAL nValDev := AC_CONT //Por defecto, //continúa. LOCAL nTecla := LASTKEY() DO CASE // Despu.s de procesar todas las teclas //pendientes, se visualiza el mensaje CASE nModo == AC_IDLE DO CASE CASE nElementoAct == 1 @ 22, 5 SAY " A.adiendo " CASE nElementoAct == 2 @ 22, 5 SAY " Editando " CASE nElementoAct == 3 @ 22, 5 SAY " Borrando " CASE nElementoAct == 4 @ 22, 5 SAY " Actualizando " ENDCASE nValDev := AC_CONT // Continuar ACHOICE() CASE nModo == AC_HITTOP // Intento de ir antes // del principio TONE( 100, 3 ) CASE nModo == AC_HITBOTTOM // Intento de ir // por debajo del final TONE( 100, 3 ) CASE nModo == AC_EXCEPT // Excepci.n de teclado DO CASE CASE nTecla == K_RETURN // Si se pulsa la // tecla INTRO, // confirmar selecci.n nValDev := AC_SELECT CASE nTecla == K_ESC // Si se pulsa la tecla // ESCAPE, anular selecci.n nValDev := AC_ABORT OTHERWISE nValDev := AC_GOTO // En caso // contrario, ir al // elemento ENDCASE ENDCASE RETURN nValDev . El ejemplo siguiente declara las matrices, especifica una condición de selecci.n para uno de los elementos de men. y utiliza una función de usuario: EXTERNAL UPDATED // FUNCTION MiMenu LOCAL acElementosMenu[4], alElementosSeleccionables[4],; cfunciónUsuario := "Hacerlo" // acElementosMenu[1] := "A.adir Registro" acElementosMenu[2] := "Editar Registro" acElementosMenu[3] := "Borrar Registro" acElementosMenu[4] := "Actualizar Registro" // alElementosSeleccionables[1] := .T. alElementosSeleccionables[2] := .T. alElementosSeleccionables[3] := .T. alElementosSeleccionables[4] := "!UPDATED()" // Condici.n de Selecci.n RETURN ACHOICE(10, 10, 12, 15, acElementosMenu,; alElementosSeleccionables, cfunciónUsuario) . El ejemplo siguiente utiliza dos matrices que especifican los elementos de men. y los bloques de acci.n correspondientes. Cuando el men. aparece en pantalla y el usuario ha realizado una selecci.n, se utiliza el valor de retorno de ACHOICE() para determinar qu. bloque de acciones de aElementosAcción debe evaluarse: PROCEDURE Main() LOCAL nSeleccion LOCAL aElementosMenu := { "A.adir Registro ", ; "Editar Registro ", ; "Borrar Registro", ; "Actualizar Registro" } LOCAL aElementosAcción := { {|| AnadFunc() }, ; {|| EditFunc() }, ; {|| BorrFunc() }, ; {|| ActuFunc() } } nSeleccion := ACHOICE( 10, 10, 13, 22, aElementosMenu ) IF nSeleccion == 0 QUIT // Se ha pulsado ESCAPE ENDIF EVAL( aElementosAcción [nSeleccion] ) RETURN Ficheros: La biblioteca asociada es EXTEND.LIB, los ficheros de cabecera asociados son Achoice.ch e Inkey.ch.
ACLONE() Duplica una matriz anidada o multidimensiónal ------------------------------------------------------------------------------ Sintaxis ACLONE(<aFuente>) --> aDuplicado Argumentos <aFuente> es la matriz que se va a duplicar. Devuelve ACLONE() devuelve un duplicado de <aFuente>. Descripción ACLONE() es una función de matrices que crea un duplicado completo de la matriz <aFuente>. Si <aFuente> contiene submatrices, ACLONE() crea las submatrices correspondientes y las llena con copias de los valores de las submatrices de <aFuente>. ACLONE() es similar a ACOPY(), pero ACOPY() no duplica matrices anidadas. Ejemplos . El ejemplo siguiente crea una matriz y luego la duplica con ACLONE(). Luego, la primera matriz se modifica, pero la copia duplicada no resulta afectada: LOCAL aUno, aDos aUno := { 1, 2, 3 } //Resultado: aUno es {1, 2, 3} aDos := ACLONE(aUno) //Resultado: aDos es {1, 2, 3} aUno[1] := 99 //Resultado: aUno es {99, 2, 3} //aDos sigue siendo {1, 2, 3} Ficheros: La biblioteca asociada es CLIPPER.LIB.
ACOPY() Copia elementos de una matriz a otra ------------------------------------------------------------------------------ Sintaxis ACOPY(<aFuente>, <aDestáno>, [<nInicio>], [<nPosiciones>], [<nPosDestáno>]) --> aDestáno Argumentos <aFuente> es la matriz cuyos elementos se van a copiar. <aDestáno> es la matriz en la que se van a copiar los elementos. <nInicio> es la posición del elemento inicial de la matriz <aFuente>. Si no se especifica, el valor por defecto es uno. <nPosiciones> es el número de elementos que se van a copiar de <aFuente>, comenzando en la posición <nInicio>. Si no se especifica <nPosiciones>, se copian todos los elementos de <aFuente> desde el elemento inicial. <nPosDestáno> es la posición del elemento inicial de la matriz <aDestáno> que va a recibir los elementos de <aFuente>. Si no se especifica, el valor por defecto es uno. Devuelve ACOPY() devuelve una referencia a la matriz destáno, <aDestáno>. Descripción ACOPY() es una función de matrices que copia elementos de la matriz <aFuente> en la matriz <aDestáno>. La matriz <aDestáno> debe existir prevíamente y debe ser lo suficientemente grande para almacenar los elementos copiados. Si la matriz <aFuente> tiene m.s elementos, algunos de ellos no se copiar.n. ACOPY() copia valores de cualquier tipo de datos, incluyendo NIL y bloques de código. Si un elemento de la matriz <aFuente> es una submatriz, el elemento correspondiente de la matriz <aDestáno> contendr. una referencia a la submatriz. Por tanto, ACOPY() no crear. un duplicado completo de una matriz multidimensiónal. Para ello, es necesario utilizar la función ACLONE(). Ejemplos . El ejemplo siguiente crea dos matrices, cada una de las cuales se llena con un valor. A continúa.ión, los dos primeros elementos de la matriz fuente se copian en la matriz destáno: LOCAL nPosiciones := 2, nInicio := 1, aUno, aDos aUno := { 1, 1, 1 } aDos := { 2, 2, 2 } ACOPY(aUno, aDos, nInicio, nPosiciones) //Resultado: aDos ahora es { 1, 1, 2 } Ficheros: La biblioteca asociada es CLIPPER.LIB.
ADEL() Borra un elemento de una matriz ------------------------------------------------------------------------------ Sintaxis ADEL(<aDestáno>, <nPosici.n>) --> aDestáno Argumentos <aDestáno> es la matriz cuyo elemento se va a borrar. <nPosici.n> es la posición del elemento que se va a borrar. Devuelve ADEL() devuelve una referencia a la matriz destáno, <aDestáno>. Descripción ADEL() es una función de matrices que borra un elemento de una matriz. El contenido del elemento de matriz especificado se pierde y todos los elementos que haya desde esa posición hasta el final de la matriz se desplazan una posición. El último elemento de la matriz toma el valor NIL. .Advertencia! CA-Clipper crea las matrices multidimensiónales anidando unas matrices dentro de otras. Si la matriz <aDestáno> es una matriz multidimensiónal, ADEL() puede borrar una submatriz completa si se encuentra en <nPosici.n>, haciendo que <aDestáno> describa una matriz con una estructura diferente de la original. Ejemplos . Este ejemplo crea una matriz constante de tres elementos y, a continúa.ión, borra el segundo elemento. El tercer elemento se desplaza una posición y al nuevo tercer elemento se le asigna un valor NIL: LOCAL aMatriz aMatriz := { 1, 2, 3 } //Resultado: aMatriz es // ahora { 1, 2, 3 } ADEL(aMatriz, 2) //Resultado: aMatriz es // ahora { 1, 3, NIL } Ficheros: La biblioteca asociada es CLIPPER.LIB.
ADIR()* Llena una serie de matrices con información del directorio ------------------------------------------------------------------------------ Sintaxis ADIR([<cEspecFichero>], [<aNombresFichero>], [<aTama.os>], [<aFechas>], [<aHoras>], [<aAtributos>]) --> nFicheros Argumentos <cEspecFichero> es la especificación de la vía de los ficheros que se van a incluir en la b.squeda del directorio por defecto. Es una especificación de ficheros estándar, que permite incluir carácteres comod.n * y ? y referencias de unidades y vías. Si se omite, la especificación por defecto es *.*. <aNombresFichero> es la matriz que se va a llenar con los nombres de ficheros seleccionados con <cEspecFichero>. Cada elemento contiene el nombre y la extensión del fichero en forma de cadena de carácteres en mayúsculas. <aTama.os> es la matriz que se va a llenar con los tama.os de los ficheros correspondientes de la matriz <aNombresFichero>. Todos sus elementos son de tipo numérico. <aFechas> es la matriz que se va a llenar con las fechas de los ficheros correspondientes de la matriz <aNombresFichero>. Todos sus elementos son de tipo fecha. <aHoras> es la matriz que se va a llenar con las horas de los ficheros correspondientes de la matriz <aNombresFichero>. Todos sus elementos contienen una cadena de carácteres de formato: hh:mm:ss. <aAtributos> es la matriz que se va a rellenar con atributos de los ficheros correspondientes de la matriz <aNombresFichero>. Todosólos elementos son cadenas de carácteres. Si se especifica <aAtributos>, pueden incluirse ficheros ocultos, de sistema y de directorio junto a los ficheros normales. Si no se especifica <aAtributos>, solamente se incluyen ficheros normales. Devuelve ADIR() devuelve el número de ficheros seleccionables con el patr.n de directorios descrito por <cEspecFichero>. Descripción ADIR() es una función de matrices que realiza dos operación.s b.sicas. En primer lugar, devuelve el número de ficheros seleccionables con la especificación de ficheros. En segundo lugar, llena una serie de matrices con los nombres, tama.os, fechas, horas y atributos de los ficheros. ADIR() es una función de compatibilidad y, por tanto, su utilización no es recomendable. Puede sustituirse por la función DIRECTORY(), que devuelve toda la información de ficheros en una matriz multidimensiónal. Notas . Directorios: Si se utiliza un argumento <aAtributos> y una <cEspecFichero> *.*, pueden incluirse directorios en <aNombresFichero>. En la matriz <aAtributos>, para indicar directorios se utiliza un atributo "D." Si se ejecuta ADIR() en un subdirectorio, las dos primeras entradas de <aNombresFichero> ser.n "." y "..", los alias de los directorios principal y actual respectivamente. Se indica también la fecha y hora de la .ltima actualizaci.n de un directorio, pero su tama.o es siempre cero. Ejemplos . El ejemplo siguiente crea una matriz que va a contener los nombres de todos los ficheros (.txt) del directorio por defecto actual y, a continúa.ión, utiliza AEVAL() para listarlos en la consola: LOCAL aFicheros[ADIR("*.TXT")] ADIR("*.TXT", aFicheros) AEVAL(aFicheros, { |elemento| QOUT(elemento) }) Ficheros: La biblioteca asociada es EXTEND.LIB.
AEVAL() Ejecuta un bloque de código en cada elemento de una matriz ------------------------------------------------------------------------------ Sintaxis AEVAL(<aMatriz>, <bBloque>, [<nInicio>], [<nPosiciones>]) --> aMatriz Argumentos <aMatriz> es la matriz que se va a recorrer. <bBloque> es el bloque de código que se va a ejecutar en cada elemento encontrado. <nInicio> es el elemento inicial. Si no se especifica, el valor por defecto es el elemento uno. <nPosiciones> es el número de elementos que se van a procesar, contados desde <nInicio>. Si no se especifica, el valor por defecto es todos los elementos hasta el final de la matriz. Devuelve AEVAL() devuelve una referencia a <aMatriz>. Descripción AEVAL() es una función de matrices que eval.a un bloque de código en cada elemento de una matriz, pasando el valor y el índice del elemento como parámetros al bloque. El valor devuelto por el bloque se ignora. Se procesan todos los elementos de <aMatriz>, a no ser que se especifique <nInicio> o <nPosiciones>. AEVAL() no comprueba el contenido de los elementos de matriz que pasa al bloque. Se supone que el bloque correspondiente conoce el tipo de datos que hay en cada elemento. AEVAL() es similar a DBEVAL(), que aplica un bloque a cada registro de un fichero de base de datos. Al igual que DBEVAL(), AEVAL() puede utilizarse como primitiva para crear mandatos iterativos, tanto para estructuras de matriz simples como complejas. Si desea más información sobre la teor.a y la sintaxis de los bloques de código, consulte la secci.n Bloques de C.digo del capítulo Conceptos Básicos de la guía de Programación y Utilidades. Ejemplos . El ejemplo siguiente utiliza AEVAL() para mostrar en pantalla una matriz de nombres y tama.os de fichero devueltos por la función DIRECTORY(): #include "Directry.ch" // LOCAL aFicheros := DIRECTORY("*.dbf"), nTotal := 0 AEVAL(aFicheros,; { | aFicheroDBF |; QOUT(PADR(aFicheroDBF[F_NAME], 10), aFicheroDBF[F_SIZE]),; nTotal += aFicheroDBF[F_SIZE]); } ) // ? ? "Bytes totales:", nTotal . El ejemplo siguiente utiliza AEVAL() para crear una lista formada por los elementos seleccionados en una matriz multidimensiónal: #include "Directry.ch" // LOCAL aFicheros := DIRECTORY("*.dbf"), aNombres := {} AEVAL(aFicheros,; { | fichero | AADD(aNombres, fichero[F_NAME]) }; ) . El ejemplo siguiente modifica el contenido de un elemento de matriz, dependiendo de una condición. Observe la utilización de los parámetros de bloque de código: */ LOCAL aMatriz[6] AFILL(aMatriz,"anterior") AEVAL(aMatriz,; {|cValor,níndice| IF(cValor == "anterior",; aMatriz[níndice] := "nuevo",)}) Ficheros: La biblioteca asociada es CLIPPER.LIB.
AFIELDS()* Llena matrices con la estructura del fichero actual de base de datos ------------------------------------------------------------------------------ Sintaxis AFIELDS([<aNombresCampo>], [<aTipos>], [<aAnchuras>], [<aDecimales>]) --> nCampos Argumentos <aNombresCampo> es la matriz que se va a llenar con los nombres de campo. Todos sus elementos son cadenas de carácteres. <aTipos> es la matriz que se va a llenar con los tipos de campo de <aNombresCampo>. Todos sus elementos son cadenas de carácteres. <aAnchuras> es la matriz que se va a llenar con las anchuras de los campos de <aNombresCampo>. Todos sus elementos son de tipo numérico. <aDecimales> es la matriz que se va a llenar con el número de decimales definido para los campos de <aNombresCampo>. Todosólos elementos son de tipo numérico. Si el tipo del campo no es numérico, el elemento de <aDecimales> ser. cero. Devuelve AFIELDS() devuelve el número de campos o la longitud del argumento de matriz m.s corto, el que sea menor de los dos. Si no se especifican argumentos o no se est. utilizando un fichero de base de datos en el área de trabajo actual, AFIELDS() devuelve cero. Descripción AFIELDS() es una función de matrices que llena una serie de matrices (de atributos de estructura) con la estructura del fichero de base de datos actualmente abierto, un elemento de cada matriz por campo. AFIELDS() act.a como ADIR(), que llena una serie de matrices existentes con información. Para utilizar AFIELDS(), primero debe crear las matrices que van a contener la información de la estructura de la base de datos. Todas las matrices deben tener el mismo número de elementos que de campos (es decir, FCOUNT()). Una vez que se hayan creado las matrices de atributos de estructura, puede invocar AFIELDS() para rellenar estas matrices con la información de cada campo. Por defecto, AFIELDS() opera en el área de trabajo actual. Para operar en un área de trabajo no seleccionada, debe especificarla con una expresión de alias (consulte el ejemplo siguiente). AFIELDS() es una función de compatibilidad y, por tanto, su utilización no es recomendable. Puede sustituirse por DBSTRUCT(), que no requiere la existencia de matrices antes de la invocaci.n y devuelve una matriz multidimensiónal que contiene la estructura de fichero actual de base de datos. Ejemplos . Este ejemplo muestra la forma de utilizar AFIELDS() y ACHOICE() simultáneamente para crear una lista de selecci.n de campos: USE Ventas NEW PRIVATE aNombresCampo[FCOUNT()] AFIELDS(aNombresCampo) @ 1, 0 TO 10, 10 DOUBLE nSeleccion := ACHOICE(2, 1, 9, 9, aNombresCampo) @ 12, 0 SAY IF(nSeleccion != 0, aNombresCampo[nSeleccion],; "Ninguno seleccionado") RETURN . El ejemplo siguiente utiliza AFIELDS() con una expresión de alias para llenar matrices con la estructura del fichero Ventas.dbf, abierto en un área de trabajo no seleccionada: LOCAL aNombresCampo, aTipos, aAnchuras, aDecimales USE Ventas NEW USE Cliente NEW // aNombresCampo := Ventas->(ARRAY(FCOUNT())) aTipos := Ventas->(ARRAY(FCOUNT())) aAnchuras := Ventas->(ARRAY(FCOUNT())) aDecimales := Ventas->(ARRAY(FCOUNT())) // Ventas->(AFIELDS(aNombresCampo, aTipos, ; aAnchuras, aDecimales)) Ficheros: La biblioteca asociada es EXTEND.LIB.
AFILL() Rellena una matriz con un valor especificado ------------------------------------------------------------------------------ Sintaxis AFILL(<aDestáno>, <expValor>, [<nInicio>], [<nPosiciones>]) --> aDestáno Argumentos <aDestáno> es la matriz que se va a rellenar. <expValor> es el valor que se va a colocar en cada elemento de la matriz. Puede ser una expresión de cualquier tipo víaacute;lido. <nInicio> es la posición del primer elemento que se va a llenar. Si se omite este argumento, el valor por defecto es uno. <nPosiciones> es el número de elementos que se van a llenar comenzando por <nInicio>. Si se omite este argumento, los elementos se rellenan desde el elemento inicial hasta el final de la matriz. Devuelve AFILL() devuelve una referencia a <aDestáno>. Descripción AFILL() es una función de matrices que rellena la matriz especificada con un valor de cualquier tipo de datos (incluyendo matrices, bloques de código o valores NIL), asignando <expValor> a cada elemento de matriz dentro del rango especificado. .Advertencia! AFILL() no puede utilizarse para llenar matrices multidimensiónales. CA-Clipper crea las matrices las multidimensiónales anidando unas matrices dentro de otras. La utilización de AFILL() con una matriz multidimensiónal sobreescribe las submatrices que se utilizan para las otras dimensiónes de la matriz. Ejemplos . El ejemplo siguiente crea una matriz de tres elementos, la rellena con el valor l.gico (.F.) y, finalmente, a los elementos de las posiciónes dos y tres les asigna el valor verdadero (.T.): LOCAL aLogico[3] //Resultado: aLogico es { NIL, NIL, NIL } AFILL(aLogico, .F.) //Resultado: aLogico es { .F., .F., .F. } AFILL(aLogico, .T., 2, 2) //Resultado: aLogico es { .F., .T., .T. } Ficheros: La biblioteca asociada es CLIPPER.LIB.
AINS() Inserta un elemento NIL en una matriz ------------------------------------------------------------------------------ Sintaxis AINS(<aDestáno>, <nPosici.n>) --> aDestáno Argumentos <aDestáno> es la matriz en la que se va a insertar el nuevo elemento. <nPosici.n> es la posición en la que se va a insertar el nuevo elemento. Devuelve AINS() devuelve una referencia a la matriz destáno, <aDestáno>. Descripción AINS() es una función de matrices que inserta un nuevo elemento en una matriz especificada. El elemento reci.n insertado ser. de tipo NIL hasta que se le asigne un nuevo valor. Despu.s de la inserci.n, el último elemento de la matriz se descarta y todos los elementos que van detrás del elemento nuevo se desplazan una posición. .Advertencia! AINS() debe utilizarse con cuidado en matrices multidimensiónales. En CA-Clipper las matrices multidimensiónales se crean anidando unas matrices dentro de otras. La utilización de AINS() en una matriz multidimensiónal elimina el último elemento de la matriz y, si dicho elemento es una submatriz, se pierden una o más dimensiónes. Para insertar una nueva dimensión en una matriz, a.ada primero un nuevo elemento al final de la matriz mediante AADD() o ASIZE() antes de utilizar AINS(). Ejemplos . El ejemplo siguiente muestra el resultado de la utilización de AINS() en una matriz: LOCAL aMatriz aMatriz := { 1, 2, 3 } //Resultado: aMatriz es // ahora { 1, 2, 3 } AINS(aMatriz, 2) //Resultado: aMatriz es // ahora { 1, NIL, 2 } Ficheros: La biblioteca asociada es CLIPPER.LIB.
ALERT() Muestra en pantalla un panel de diálogo modal sencillo ------------------------------------------------------------------------------ Sintaxis ALERT( <cMensaje>, [<aOpciones>] ) --> nSelecci.n Argumentos <cMensaje> es el texto del mensaje, mostrado y centrado en el cuadro de advertencia. Si el mensaje contiene uno o m.s signos de punto y coma, el texto que va detrás de estos signos se centra en las líneas siguientes del panel de diálogo. <aOpciones> define una lista de hasta cuatro posibles respuestas al panel de diálogo. Devuelve ALERT() devuelve un valor numérico que indica la opción escogida. Si se pulsa la tecla Esc, el valor devuelto es cero. Descripción La función ALERT() crea un panel de diálogo modal sencillo. Es .til para manejadores de error y otras funciónes de "pausa". El usuario puede responder moviendo una barra resaltada y pulsando las teclas Intro o Barra espaciadora, o pulsando la tecla correspondiente a la primera letra de la opción. Si no se especifica <aOpciones>, sólo aparece la opción "OK". ALERT() es sensible a la utilización del sistema de entrada/salida de pantalla completa de CA-Clipper. Si no se utiliza el sistema de pantalla completa, ALERT() utiliza la entrada/salida estándar y muestra el mensaje y las opciónes en estilo de teleimpresora (es decir, 80 columnas, sin saltos de línea autom.ticos y cada línea terminada con un retorno de carro/salto de línea). Ejemplos . El ejemplo de la p.gina siguiente muestra la utilización de un panel de advertencia . Primero se define la matriz de las opciónes, la función ALERT() recoge la selecci.n del usuario y, finalmente, ésta se procesa con una estructura de control DO CASE...ENDCASE: #define AL_SAVE 1 #define AL_CANCEL 2 #define AL_CONT 3 // Define una matriz de opciónes aOpciones := {"Salvar", "No Salvar", "Continuar"} // Muestra el panel de diálogo y recoge la // selecci.n del usuario nSeleccion := ALERT("El fichero ha sido modificado ..", aOpciones) // Procesa la selecci.n del usuario DO CASE CASE nSeleccion == AL_SAVE ? "Salvar" CASE nSeleccion == AL_CANCEL ? "No Salvar" CASE nSeleccion == AL_CONT ? "Continuar" OTHERWISE ? "Escape" ENDCASE // RETURN Ficheros: La biblioteca asociada es CLIPPER.LIB.
ALIAS() Devuelve el alias del área de trabajo especificada ------------------------------------------------------------------------------ Sintaxis ALIAS([<nAreaTrabajo>]) --> cAlias Argumentos <nAreaTrabajo> es cualquier número de área de trabajo. Devuelve ALIAS() devuelve el alias del área de trabajo, especificado como una cadena de carácteres. Si no se indica <nAreaTrabajo>, se devuelve el alias del área de trabajo actual. Si no se est. utilizando ningún fichero de base de datos en el área de trabajo especificada, ALIAS() devuelve una cadena nula (""). Descripción ALIAS() es una función de base de datos que determina el alias del .rea de trabajo especificada. Un alias es el nombre asignado a un .rea de trabajo cuando utiliza un fichero de base de datos. El nombre asignado realmente es el nombre del fichero de base de datos o un nombre asignado explícitamente con la cláusula ALIAS del mandato USE. ALIAS() es la función inversa de SELECT(). ALIAS() recibe un número de área de trabajo y devuelve el alias. SELECT() recibe el alias y devuelve el número del área de trabajo. . El ejemplo siguiente devuelve el nombre del área de trabajo seleccionada: USE Fichero1 NEW ALIAS Prueba1 nAreaAnterior := SELECT() USE Fichero2 NEW ALIAS Prueba2 ? ALIAS( nAreaAnterior ) // Devuelve Prueba1 Ficheros: La biblioteca asociada es CLIPPER.LIB.
ALLTRIM() Suprime los espacios en blanco iniciales y finales de una cadena de carácteres ------------------------------------------------------------------------------ Sintaxis ALLTRIM(<cCadena>) --> cSuprCadena Argumentos <cCadena> es la expresión de carácteres que se va a recortar. Devuelve ALLTRIM() devuelve una cadena de carácteres en la que se han eliminado los espacios iniciales y finales en blanco. Descripción ALLTRIM() es una función de carácteres que elimina tanto los espacios iniciales como los finales de una cadena. Está relacionada con LTRIM() y RTRIM(), que eliminan los espacios iniciales y finales, respectivamente. Las funciónes inversas de ALLTRIM(), LTRIM() y RTRIM() son PADC(), PADL() y PADR(), que centran, justifican a la izquierda o justifican a la derecha cadenas de carácteres, rellen.ndolas con carácteres de relleno. Ejemplos . El ejemplo siguiente crea una cadena con espacios iniciales y finales en blanco y luego los elimina con ALLTRIM(): cCadena := SPACE(10) + "cadena" + SPACE(10) ? LEN(cCadena) //Resultado: 26 ? LEN(ALLTRIM(cCadena)) //Resultado: 6 Ficheros: La biblioteca asociada es EXTEND.LIB.
ALTD() Invoca al depurador de CA-Clipper ------------------------------------------------------------------------------ Sintaxis ALTD([<nAcción>]) --> NIL Argumentos <nAcción> define la acci.n que realiza ALTD() cuando se invoca. A continúa.ión se da la una lista completa de los valores de <nAcción> y sus resultados: Acciónes de ALTD() ------------------------------------------------------------------------ Argumento Acción ------------------------------------------------------------------------ Ninguno Invoca al depurador si est. habilitado 0 Desactiva Alt-D 1 Activa Alt-D Otro Ninguna acci.n ------------------------------------------------------------------------ Devuelve ALTD() siempre devuelve NIL. Descripción ALTD() realiza distintas acciones, dependiendo de su argumento, tal como se indica en la tabla anterior. Si desea más información sobre la utilización del depurador, consulte el capítulo El Depurador de CA-Clipper de la guía de Programación y Utilidades. Ejemplos . El ejemplo siguiente muestra una serie de constantes declaradas que pueden utilizarse como argumentos de ALTD() antes de invocar al depurador de programas: #define ALTD_DISABLE 0 #define ALTD_ENABLE 1 // ALTD(ALTD_ENABLE) Ficheros: La biblioteca asociada es CLIPPER.LIB.
ARRAY() Crea una matriz de una longitud especificada, sin inicializar ------------------------------------------------------------------------------ Sintaxis ARRAY(<nElementos> [, <nElementos>...]) --> aMatriz Argumentos <nElementos> es el número de elementos de la dimensión especificada. El número máximo de elementos de una dimensión es 4096. Las matrices de CA-Clipper pueden tener un número de dimensiónes ilimitado. Devuelve ARRAY() devuelve una matriz con las dimensiónes especificadas. Descripción ARRAY() es una función de matrices que devuelve una matriz no inicializada con el número de elementos y dimensiónes especificado. Si se especifica m.s de un argumento <nElementos>, se crear. una matriz multidimensiónal con un número de dimensiónes igual al número de argumentos <nElementos> especificado. Si alg.n argumento <nElementos> es una matriz, se crea una matriz anidada. En CA-Clipper, existen varias formas de crear una matriz. Puede declararse utilizando una sentencia LOCAL o STATIC; también puede crearse con una declaración PRIVATE o PUBLIC; puede asignarse una matriz en forma literal a una variable existente o puede usarse la función ARRAY(). ARRAY() tiene la ventaja de que permite crear matrices dentro de expresiónes o bloques de código. Ejemplos . El ejemplo siguiente crea una matriz unidimensiónal de cinco elementos utilizando la función ARRAY(). Luego, muestra la acci.n equivalente asignando una matriz literal con valores NIL: aMatriz := ARRAY(5) aMatriz := { NIL, NIL, NIL, NIL, NIL } . El ejemplo siguiente muestra tres sentencias distintas que crean la misma matriz multidimensiónal: aMatriz := ARRAY(3, 2) aMatriz := { {NIL, NIL}, {NIL, NIL}, {NIL, NIL} } aMatriz := { ARRAY(2), ARRAY(2), ARRAY(2) } . El ejemplo siguiente crea una matriz anidada multidimensiónal: aMatriz := ARRAY(3, {NIL,NIL}) Ficheros: La biblioteca asociada es CLIPPER.LIB.
ASC() Convierte un carácter en su valor ASCII ------------------------------------------------------------------------------ Sintaxis ASC(<cExp>) --> nC.digo Argumentos <cExp> es la expresión de carácteres que va a convertirse en un número. Devuelve ASC() devuelve un valor numérico entero entre 0 y 255 que representa el valor ASCII de <cExp>. Descripción ASC() es una función de conversión de carácteres que devuelve el valor ASCII del carácter situado m.s a la izquierda de una cadena de carácteres. ASC() se utiliza fundamentalmente en expresiónes que requieran cálculos numéricos con el valor ASCII de un carácter. CHR() y ASC() son funciónes inversas. Ejemplos . Los ejemplos siguientes muestran distintos resultados de ASC(): ? ASC("A") //Resultado: 65 ? ASC("Apple") //Resultado: 65 ? ASC("a") //Resultado: 97 ? ASC("Z") - ASC("A") //Resultado: 25 ? ASC("") //Resultado: 0 Ficheros: La biblioteca asociada es CLIPPER.LIB.
ASCAN() Examina una matriz, buscando un valor determinado o hasta que un bloque devuelva el valor verdadero (.T.) ------------------------------------------------------------------------------ Sintaxis ASCAN(<aDestáno>, <expB.squeda>, [<nInicio>], [<nPosiciones>]) --> nParadaEn Argumentos <aDestáno> 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. <nInicio> es el elemento donde se inicia la b.squeda. Si no se especifica este argumento, la posición inicial por defecto es uno. <nPosiciones> 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 ningúno. 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. funcióna como SEEK cuando se busca un valor simple. El valor de <expB.squeda> se compara con los elementos de la matriz de destáno, empezando por el carácter situado m.s a la izquierda de cada elemento y continúa.do hasta que no queden m.s carácteres en <expB.squeda>. Si no encuentra ningúna 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 destáno 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 <aDestáno> 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 bidimensiónal 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 CLIPPER.LIB.
ASIZE() Amplía o reduce una matriz ------------------------------------------------------------------------------ Sintaxis ASIZE(<aDestáno>, <nLongitud>) --> aDestáno Argumentos <aDestáno> matriz que se va a ampliar o reducir. <nLongitud> es el nuevo tama.o de la matriz. Devuelve ASIZE() devuelve una referencia a la matriz destáno, <aDestáno>. Descripción ASIZE() es una función de tratamiento de matrices que cambia la longitud real de la matriz <aDestáno>. La matriz se acorta o se alarga hasta que coincida con la longitud especificada. Si la matriz se acorta, los elementos que se encuentren al final de la misma se pierden. Si la matriz se alarga, se a.aden nuevos elementos al final de la matriz y se les asigna el valor NIL. ASIZE() es similar a AADD(), que a.ade un nuevo elemento al final de una matriz y, si se desea, le asigna un nuevo valor. Recuerde que ASIZE() es diferente a AINS() y ADEL(), que no cambian realmente la longitud de la matriz. Ejemplos . Los ejemplos siguientes muestran la adici.n de nuevos elementos y el borrado de elementos existentes: aMatriz := { 1 } //Resultado: aMatriz es { 1 } ASIZE(aMatriz, 3) //Resultado: aMatriz es { 1, NIL, NIL } ASIZE(aMatriz, 1) //Resultado: aMatriz es { 1 } Ficheros: La biblioteca asociada es CLIPPER.LIB.
ASORT() Ordena una matriz ------------------------------------------------------------------------------ Sintaxis ASORT(<aDestáno>, [<nInicio>], [<nPosiciones>], [<bOrden>]) --> aDestáno Argumentos <aDestáno> es la matriz que se va a ordenar. <nInicio> es el primer elemento que se va a ordenar. Si no se especifica, la posición inicial por defecto es uno. <nPosiciones> es el número de elementos que se van a ordenar. Si no se especifica, se ordenan todos los elementos de la matriz desde el elemento inicial. <bOrden> es un bloque de código opciónal que se utiliza para determinar el criterio de ordenación. Si no se especifica, el criterio por defecto es ascendente. Devuelve ASORT() devuelve una referencia a la matriz <aDestáno>. Descripción ASORT() es una función de matrices que clasifica, total o parcialmente, una matriz que contiene elementos del mismo tipo de datos. Los tipos de datos que pueden ordenarse son carácteres, fechas, valores lógicos y numéricos. Si no se especifica el argumento <bOrden>, el orden por defecto es ascendente. Los elementos con valores bajos se sit.an al principio de la matriz (primer elemento) y los elementos con valores altos se colocan al final de la misma (último elemento). Si se especifica un argumento <bOrden> en forma de bloque, el bloque se eval.a para determinar el orden de clasificaci.n. Cada vez que se eval.a el bloque, se le pasan como parámetros dos elementos de la matriz destáno. El bloque devuelve verdadero (.T.) si los elementos están en el orden correcto. Esta opción permite crear un criterio de ordenación descendente o cualquier otro. Consulte los ejemplos siguientes. Al ordenarse, las cadenas de carácteres se sit.an secuencialmente seg.n el valor de su código ASCII, los valores lógicos se clasifican con falso (.F.) como valor bajo; los valores de fecha se clasifican cronol.gicamente; y los valores numéricos se clasifican por su magnitud. Nota: Como CA-Clipper crea las matrices multidimensiónales anidando submatrices dentro de otras matrices, ASORT() no puede ordenar directamente una matriz multidimensiónal. Para ordenar una matriz anidada, debe especificarse un bloque de código que permita manejar adecuadamente submatrices. Ejemplos . El ejemplo siguiente crea una matriz de cinco elementos sin ordenar, la clasifica en orden ascendente y, a continúa.ión, la clasifica en orden descendente con un bloque de código: aMatriz := { 3, 5, 1, 2, 4 } ASORT(aMatriz) //Resultado: { 1, 2, 3, 4, 5 } ASORT(aMatriz,,, { |x, y| x > y }) //Resultado: { 5, 4, 3, 2, 1 } . El ejemplo siguiente ordena una matriz de cadenas de carácteres en orden ascendente, sin diferenciar mayúsculas o minúsculas. Para ello, utiliza un bloque de código que convierte los elementos en mayúsculas antes de compararlos: aMatriz := { "Federico", "Catalina", "ALBERTO", "amigo" } ASORT(aMatriz,,, { |x, y| UPPER(x) < UPPER(y) }) . El ejemplo siguiente clasifica una matriz anidada utilizando el segundo elemento de cada submatriz: aChicos := { {"Mar.a", 14}, {"Jos.", 23}, {"Arturo", 16} } aClasifChicos := ASORT(aChicos,,, { |x, y| x[2] < y[2] }) Resultado: { {"Mar.a", 14}, {"Arturo", 16}, {"Jos.", 23} } Ficheros: La biblioteca asociada es EXTEND.LIB.
AT() Devuelve la posición de una subcadena dentro de una cadena de carácteres ------------------------------------------------------------------------------ Sintaxis AT(<cB.squeda>, <cDestáno>) --> nPosici.n Argumentos <cB.squeda> es la subcadena de carácteres que se va a buscar. <cDestáno> es la cadena de carácteres en la que se realiza la b.squeda. Devuelve AT() devuelve la posición de la primera aparici.n de <cB.squeda> dentro de <cDestáno>, como valor numérico entero. Si no se encuentra <cB.squeda>, AT() devuelve cero. Descripción AT() es una función de tratamiento de carácteres que se utiliza para determinar la posición de la primera aparici.n de una subcadena dentro de otra cadena. Si sólo necesita saber si una subcadena se encuentra dentro de otra, utilice el operador $. Para encontrar la .ltima aparici.n de una cadena dentro de otra, utilice RAT(). Ejemplos . Los ejemplos siguientes muestran la utilización normal de AT(): ? AT("a", "abcde") //Resultado: 1 ? AT("bcd", "abcde") //Resultado: 2 ? AT("a", "bcde") //Resultado: 0 . El ejemplo siguiente divide una cadena de carácteres bas.ndose en la posición de una coma en la cadena destáno: cDestáno := "L.pez, Luisa" ? SUBSTR(cDestáno, 1, AT(",", cDestáno) - 1) //Resultado: L.pez ? SUBSTR(cDestáno, AT(",", cDestáno) + 2) //Resultado: Luisa Ficheros: La biblioteca asociada es CLIPPER.LIB.
ATAIL() Devuelve el último elemento de una matriz ------------------------------------------------------------------------------ Sintaxis ATAIL(<aMatriz>) --> Elemento Argumentos <aMatriz> es la matriz que se va a tratar. Devuelve ATAIL() devuelve un valor o una referencia a una matriz u objeto. La matriz no se modifica. Descripción ATAIL() es una función de matrices que devuelve el elemento de una matriz que tenga el número m.s alto. Puede utilizarse en las aplicaciónes como forma abrevíada de <aMatriz>[LEN(<aMatriz>)] cuando necesite obtener el último elemento de una matriz. Ejemplos . El ejemplo siguiente crea una matriz literal y devuelve el último elemento de la misma: aMatriz := {"a", "b", "c", "d"} ? ATAIL(aMatriz) //Resultado: "d" Ficheros: La biblioteca asociada es CLIPPER.LIB.