
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.