Files
harbour-core/harbour/doc/es/array.txt
Viktor Szakats b2594752b3 2008-08-19 14:58 UTC+0200 Viktor Szakats (harbour.01 syenar hu)
* make_deb.sh
     * Removed wrong comment recently added.
       (we will need to fix hbfimage compilation anyway)

   * harbour-ce-spec
   * harbour-w32-spec
   * harbour.spec
   * debian/control
   * include/vm.api
   * include/extend.api
   * include/button.ch
   * include/hbstack.h
   * include/item.api
   * include/rdd.api
   * include/gt.api
   * include/dbinfo.ch
   * include/error.api
   * include/filesys.api
   * include/hbapigt.h
   * include/clipdefs.h
   * include/assert.ch
   * include/fm.api
   * include/extend.h
   * source/compiler/genhrb.c
   * config/os2/install.cf
   * tests/db_brows.prg
   * tests/debugtst.prg
   * tests/ac_test.prg
   * tests/testhtml.prg
   * tests/tstcolor.prg
   * doc/hdr_tpl.txt
   * doc/man/harbour.1
   * doc/dirstruc.txt
   * doc/howtobld.txt
   * doc/en/diskspac.txt
   * doc/en/string.txt
   * doc/en/rddord.txt
   * doc/en/math.txt
   * doc/en/error.txt
   * doc/en/treport.txt
   * doc/en/memvar2.txt
   * doc/en/terminal.txt
   * doc/en/dir.txt
   * doc/en/rddmisc.txt
   * doc/en/var.txt
   * doc/en/nation.txt
   * doc/en/dbstrux.txt
   * doc/en/datetime.txt
   * doc/en/memo.txt
   * doc/en/tgetlist.txt
   * doc/en/tlabel.txt
   * doc/en/hb_compa.txt
   * doc/en/array.txt
   * doc/en/rdddb.txt
   * doc/en/dbsdf.txt
   * doc/en/tbrowse.txt
   * doc/en/hvm.txt
   * doc/en/input.txt
   * doc/en/dbdelim.txt
   * doc/en/browse.txt
   * doc/en/menu.txt
   * doc/en/file.txt
   * doc/en/binnum.txt
   * doc/en/tclass.txt
   * doc/en/set.txt
   * doc/en/misc.txt
   * doc/en/sayget.txt
   * doc/en/readme.txt
   * doc/es/diskspac.txt
   * doc/es/tlabel.txt
   * doc/es/array.txt
   * doc/es/dbsdf.txt
   * doc/es/tbrowse.txt
   * doc/es/math.txt
   * doc/es/hvm.txt
   * doc/es/treport.txt
   * doc/es/input.txt
   * doc/es/dbdelim.txt
   * doc/es/browse.txt
   * doc/es/memvar2.txt
   * doc/es/command.txt
   * doc/es/dir.txt
   * doc/es/file.txt
   * doc/es/eval.txt
   * doc/es/binnum.txt
   * doc/es/nation.txt
   * doc/es/var.txt
   * doc/es/tclass.txt
   * doc/es/dbstrux.txt
   * doc/es/misc.txt
   * doc/es/datetime.txt
   * doc/es/sayget.txt
   * doc/es/memo.txt
   * doc/es/readme.txt
   * doc/es/tgetlist.txt
   * doc/readme.txt
   * contrib/hbct/ctnet.c
   * contrib/hbct/video.c
   * contrib/hbct/dattime3.c
   * contrib/hbct/color.c
   * contrib/hbnf/acctyear.prg
   * contrib/hbnf/byteneg.prg
   * contrib/hbnf/isshare.prg
   * contrib/hbnf/sinkey.prg
   * contrib/hbnf/dhkey.h
   * contrib/hbnf/kspeed.c
   * contrib/hbnf/prtscr.c
   * contrib/hbnf/descendn.c
   * contrib/hbnf/peek.c
   * contrib/hbnf/scancode.prg
   * contrib/hbnf/vidmode.prg
   * contrib/hbnf/nwsem.prg
   * contrib/hbnf/acctadj.prg
   * contrib/hbnf/week.prg
   * contrib/hbnf/vidcur.prg
   * contrib/hbnf/iamidle.c
   * contrib/hbnf/prtesc.prg
   * contrib/hbnf/miltime.prg
   * contrib/hbnf/proper.c
   * contrib/hbnf/acctmnth.prg
   * contrib/hbnf/savearr.prg
   * contrib/hbnf/rand1.prg
   * contrib/hbnf/madd.prg
   * contrib/hbnf/dispmsg.prg
   * contrib/hbnf/settime.prg
   * contrib/hbnf/restsets.prg
   * contrib/hbnf/page.prg
   * contrib/hbnf/byt2bit.prg
   * contrib/hbnf/setkeys.c
   * contrib/hbnf/month.prg
   * contrib/hbnf/byt2hex.prg
   * contrib/hbnf/findith.prg
   * contrib/hbnf/at2.prg
   * contrib/hbnf/acctweek.prg
   * contrib/hbnf/dispc.c
   * contrib/hbnf/gcd.prg
   * contrib/hbnf/pegs.prg
   * contrib/hbnf/min2dhm.prg
   * contrib/hbnf/acctqtr.prg
   * contrib/hbnf/numlock.c
   * contrib/hbnf/dosver.prg
   * contrib/hbnf/nooccur.prg
   * contrib/hbnf/dayofyr.prg
   * contrib/hbnf/metaph.prg
   * contrib/hbnf/ontick.c
   * contrib/hbnf/menu1.prg
   * contrib/hbnf/byteand.prg
   * contrib/hbnf/sqzn.prg
   * contrib/hbnf/bytexor.prg
   * contrib/hbnf/ftidle.c
   * contrib/hbnf/workdays.prg
   * contrib/hbnf/byteor.prg
   * contrib/hbnf/asum.prg
   * contrib/hbnf/shift.c
   * contrib/hbnf/sleep.prg
   * contrib/hbnf/wda.prg
   * contrib/hbnf/aavg.prg
   * contrib/hbnf/woy.prg
   * contrib/hbnf/origin.c
   * contrib/hbnf/any2any.prg
   * contrib/hbnf/chdir.c
   * contrib/hbnf/adessort.prg
   * contrib/hbnf/setdate.prg
   * contrib/hbnf/netpv.prg
   * contrib/hbnf/amedian.prg
   * contrib/hbnf/blink.prg
   * contrib/hbnf/stod.c
   * contrib/hbnf/vertmenu.prg
   * contrib/hbnf/qtr.prg
   * contrib/hbnf/linked.prg
   * contrib/hbnf/n2color.c
   * contrib/hbnf/aredit.prg
   * contrib/hbnf/alt.c
   * contrib/hbnf/xbox.prg
   * contrib/hbnf/ftround.prg
   * contrib/hbnf/hex2dec.prg
   * contrib/hbnf/nwuid.prg
   * contrib/hbnf/dectobin.prg
   * contrib/hbnf/bitset.prg
   * contrib/hbnf/aemaxlen.prg
   * contrib/hbnf/nwlstat.prg
   * contrib/hbnf/invclr.prg
   * contrib/hbnf/ctrl.c
   * contrib/hbnf/lastday.prg
   * contrib/hbnf/tempfile.prg
   * contrib/hbnf/diskfunc.prg
   * contrib/hbnf/scregion.prg
   * contrib/hbnf/mouse2.prg
   * contrib/hbnf/d2e.prg
   * contrib/hbnf/ftisprn.c
   * contrib/hbnf/pickday.prg
   * contrib/hbnf/firstday.prg
   * contrib/hbnf/daytobow.prg
   * contrib/hbnf/anomatch.prg
   * contrib/hbnf/pvid.prg
   * contrib/hbnf/isbiton.prg
   * contrib/hbnf/color2n.c
   * contrib/hbnf/isbit.prg
   * contrib/hbnf/putkey.c
   * contrib/hbnf/cntryset.prg
   * contrib/hbnf/datecnfg.prg
   * contrib/hbnf/getenvrn.c
   * contrib/hbnf/easter.prg
   * contrib/hbnf/bytenot.prg
   * contrib/hbnf/ntow.prg
   * contrib/hbnf/poke.c
   * contrib/hbnf/aeminlen.prg
   * contrib/hbnf/floptst.prg
   * contrib/hbnf/pchr.prg
   * contrib/hbnf/savesets.prg
   * contrib/hbnf/mkdir.c
   * contrib/hbnf/year.prg
   * contrib/hbnf/caplock.c
   * contrib/hbnf/rmdir.c
   * contrib/hbnf/calendar.prg
   * contrib/hbnf/e2d.prg
   * contrib/hbnf/elapsed.prg
   * contrib/hbnf/sysmem.prg
   * contrib/hbnf/bitclr.prg
   * contrib/hbnf/eltime.prg
   * contrib/hbnf/aading.prg
   * contrib/hbnf/dfile.prg
   * contrib/hbnf/elapmil.prg
   * contrib/hbnf/setlastk.c
   * contrib/hbnf/pending.prg
   * contrib/hbnf/clrsel.prg
   * contrib/rddads/doc/en/adsfuncs.txt
   * contrib/rddads/doc/en/readme.txt
   * contrib/hbclip/hbclip.ch
   * contrib/hbclip/readme.txt
   * contrib/hbmisc/doc/en/ht_dbf.txt
   * utils/hbdoc/rtf.prg
   * utils/hbdoc/fclass1.prg
   * utils/hbdoc/genos2.prg
   * utils/hbdoc/genng.prg
   * utils/hbdoc/genasc.prg
   * utils/hbdoc/genchm.prg
   * utils/hbdoc/os2.prg
   * utils/hbdoc/ng.prg
   * utils/hbdoc/genhpc.prg
   * utils/hbdoc/html.prg
   * utils/hbdoc/ffile1.prg
   * utils/hbdoc/ft_funcs.prg
   * utils/hbdoc/hbdoc.prg
   * utils/hbdoc/troff.prg
   * utils/hbdoc/genhtm.prg
   * utils/hbdoc/genpdf1.prg
   * utils/hbdoc/gentrf.prg
   * utils/hbdoc/genrtf.prg
   * utils/hbmake/fclass1.prg
   * utils/hbmake/prb_stak.prg
   * utils/hbmake/ffile1.prg
   * utils/hbmake/ft_funcs.prg
   * utils/hbmake/pickfile.prg
   * utils/hbmake/hbmutils.prg
     * More cleanups, formatting (filename casing, CA-Cl*pper, etc).
2008-08-19 13:11:22 +00:00

664 lines
24 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*
* $Id$
*/
/*
* Las siguientes partes son derechos adquiridos de sus autores individuales.
* www - http://www.harbour-project.org
*
* Copyright 2000 Alejandro de G rate <alex_degarate@hotmail.com>
* Documentaci¢n en Espa¤ol de:
* ARRAY(), AADD(), ASIZE(), ATAIL(), ASIZE(),
* AINS(), ADEL(), ADEL(), AFILL(), ASCAN()
* AEVAL(), ACOPY(), ACLONE(), ASORT()
*
* Vea doc/license.txt por los trminos de la licencia.
*
*/
/* $DOC$
* $FUNCNAME$
* ARRAY()
* $CATEGORY$
* ARRAY
* $ONELINER$
* Crea un array sin inicializar de la longitud especificada
* $SYNTAX$
* ARRAY( <nElementos> [, <nElementos>...] ) --> aArray
* $ARGUMENTS$
* <nElementos> es el n£mero de elementos de la dimensi¢n especificada.
* $RETURNS$
* Un array con las dimensiones especificadas.
* $DESCRIPTION$
* Esta funci¢n retorna un array sin inicializar de tama¤o <nElementos>
* Si par metros <nElementos> adicionales son especificados se crea
* un array anidado multidimensional sin inicializar dentro de la misma
* referencia del array.
* Crear una variable de memoria con el mismo nombre que el array puede
* destruir el array original y liberar el contenido entero del array.
* Esto depende, por supuesto del tipo de almacenamiento de ambos: del
* array y la variable con el mismo nombre que el array.
* $EXAMPLES$
* * El siguiente ejemplo crea un array de diez elementos iniciales,
* luego en cada elemento de ese array, va creando submatrices
* lineales con la funci¢n ARRAY(). Cada una con la misma cantidad
* de items que la posici¢n que ocupa en aArray. Finalmente lo
* muestra.
*
* LOCAL aArray := Array(10)
* LOCAL i := 1, j
*
* FOR i = 1 to LEN( aArray )
* aArray [i] := Array(i)
* NEXT
*
* FOR i = 1 to LEN( aArray )
* ? i
* FOR j = 1 to LEN( aArray [i] )
* ?? " ", aArray [i][j]
* NEXT
* NEXT
*
* $STATUS$
* R
* $COMPLIANCE$
* Esta funci¢n es CA-Cl*pper Compatible en todos los casos, excepto que
* los arrays en Harbour pueden tener un n£mero ilimitado de elementos
* mientras que Clipper tiene un l¡mite de 4096 elementos por dimensi¢n.
* Los arrays en Harbour pueden tener un n£mero ilimitado de dimensiones
* $FILES$
* El c¢digo fuente est  en source\vm\arrays.c
* La librer¡a asociada es vm
* $SEEALSO$
* AADD(),ADEL(),AFILL(),AINS()
* $END$
*/
* $DOC$
* $FUNCNAME$
* AADD()
* $CATEGORY$
* ARRAY
* $ONELINER$
* Agrega din micamente un nuevo elemento al final de un array
* $SYNTAX$
* AADD(<aDestino>, <xValor>) --> Valor
* $ARGUMENTS$
* <aDestino> es el array al cual se agrega un nuevo elemento.
*
* <xValor> es el valor asignado al nuevo elemento.
* $RETURNS$
* AADD() eval£a <xValor> y retorna su valor. Si <xValor> no esta
* especificado, AADD() retorna NIL.
* $DESCRIPTION$
* AADD() es una funci¢n que din micamente incrementa la longitud actual
* del array destino en un elemento y asigna el valor <xValor> al recin
* creado elemento del array.
* <xValor> puede ser un puntero de referencia a otro array, el cual
* puede ser asignado a la posici¢n sub¡ndice.
*
* Es £til para construir listas din micas o colas (queues).
* Cada vez que se ejecuta un comando @...GET, el sistema usa AADD()
* para agregar un nuevo elemento al final del array GetList, y entonces
* asignar un nuevo objeto Get al nuevo elemento.
* $EXAMPLES$
* * Este ejemplo muestra el efecto de m£ltiples llamadas de la funci¢n
* AADD() a un array, donde va agrgando un nuevo elemento cada vez.
*
* LOCAL aArray := {}
* FOR x:= 1 to 10
* AADD( aArray, x)
* NEXT
*
* * Este ejemplo crea un array multidemensional
* LOCAL aArray := {} // Resultado: aArray es un array vac¡o
* AADD( aArray, {10, 10122734 }) // Resultado: aArray es {10, 10122734}
* AADD( aArray, {11, 13173645 }) // Resultado: aArray es
* { { 10, 10122734 }, { 11, 13173645 } }
* $STATUS$
* R
* $COMPLIANCE$
* Esta funci¢n es totalmente compatible con CA-Cl*pper.
* $PLATFORMS$
* Todas las plataformas
* $FILES$
* El c¢digo fuente est  en source\vm\arrays.c
* La librer¡a asociada es vm
* $SEEALSO$
* AINS(), ASIZE()
* $END$
/* $DOC$
* $FUNCNAME$
* ASIZE()
* $CATEGORY$
* ARRAY
* $ONELINER$
* Ajusta (aumenta ¢ decrementa) el tama¤o de un array
* $SYNTAX$
* ASIZE(<aDestino>, <nLongitud>) --> aDestino
* $ARGUMENTS$
* <aDestino> es el nombre del array a ser din micamente alterado
*
* <nLongitud> es el valor Numrico del nuevo tama¤o de <aDestino>
* $RETURNS$
* ASIZE() retorna una referencia al array <aDestino>.
* $DESCRIPTION$
* Esta funci¢n din micamente incrementa ¢ decrementa el tama¤o del
* array <aDestino> ajustando la longitud del array a <nLongitud>
* posiciones.
*
* Si la longitud del array <aDestino> is acortada, aquellos elementos
* al final se pierden. Si la longitud del array es alargada un valor
* NIL es asignado a los elementos en las nuevas posiciones.
* $EXAMPLES$
* * El siguiente ejemplo crea un array con un s¢lo elemento, luego lo
* agranda y luego lo vuelve al tama¤o original.
*
* aArray := { 1 } // Resultado: aArray es { 1 }
* ASIZE( aArray, 3) // Resultado: aArray es { 1, NIL, NIL }
* ASIZE( aArray, 1) // Resultado: aArray es { 1 }
* $STATUS$
* R
* $COMPLIANCE$
* Si HB_COMPAT_C53 es definido, la funci¢n genera un Error, de otro
* modo retornar  el mismo array.
* $FILES$
* El c¢digo fuente est  en source\vm\arrays.c
* La librer¡a asociada es vm
* $SEEALSO$
* AADD(), ADEL(), AFILL(), AINS()
* $END$
*/
/* $DOC$
* $FUNCNAME$
* ATAIL()
* $CATEGORY$
* ARRAY
* $ONELINER$
* Retorna el £ltimo elemento de un array
* $SYNTAX$
* ATAIL( <aArray> ) --> Elemento
* $ARGUMENTS$
* <aArray> es el nombre del array a usar
* $RETURNS$
* ATAIL() retorna <Elemento> que puede ser un valor ¢ una referencia
* contenida en el £ltimo elemento en el array.
* $DESCRIPTION$
* Esta funci¢n devuelve el £ltimo elemento en el array llamado <aArray>
* No modifica el tama¤o del array ni el valor de ning£n sub¡ndice.
* $EXAMPLES$
* * El siguiente ejemplo crea un array unidimensional y devuelve el
* £ltimo elemento.
*
* aArray := { "Cu l", "es el", "futuro", "de xBase ?", "Harbour!" }
* ? ATAIL( aArray )
* $STATUS$
* R
* $COMPLIANCE$
* Esta funci¢n es totalmente compatible con CA-Cl*pper.
* $FILES$
* El c¢digo fuente est  en source\vm\arrays.c
* La librer¡a asociada es vm
* $SEEALSO$
* LEN(),ARRAY(),ASIZE(),AADD()
* $END$
*/
/* $DOC$
* $FUNCNAME$
* AINS()
* $CATEGORY$
* ARRAY
* $ONELINER$
* Inserta un elemento NIL en una posici¢n del array
* $SYNTAX$
* AINS( <aArray>, <nPos> ) --> aDestino
* $ARGUMENTS$
* <aArray> es el nombre del array al que se va a insertar un item
*
* <nPos> es la posici¢n en el <aArray>
* $RETURNS$
* AINS() retorna una referencia al array destino, <aDestino>
* $DESCRIPTION$
* Esta funci¢n inserta un valor NIL en el array llamado <aArray>
* en la posicion <nPos>.
*
* Todos los elementos del array comenzando con la <nPos> ser n
* desplazados hacia arriba una posici¢n y el £ltimo item en el array
* ser  removido completamente. En otras palabras, si se va a insertar
* un item en la quinta posici¢n de un array de diez elementos, el
* elemento que previamente estaba en la quinta posici¢n ahora ser 
* reubicado a la sexta posici¢n. El elemento recin agregado ser  de
* tipo NIL y el £ltimo elemento es descartado. La longitud del array
* <aArray> permanece sin cambios.
* $EXAMPLES$
* * El siguiente ejemplo crea un array lineal, al cual se inserta un
* elemento en la quinta posici¢n, perdindose el £ltimo.
*
* LOCAL aArray:= { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }
* AINS( aArray, 5)
*
* Resultado: aArray es { 1, 2, 3, 4, NIL, 5, 6, 7, 8, 9 }
* $STATUS$
* R
* $COMPLIANCE$
* Esta funci¢n es totalmente compatible con CA-Cl*pper.
* $FILES$
* El c¢digo fuente est  en source\vm\arrays.c
* La librer¡a asociada es vm
* $SEEALSO$
* AADD(), ACOPY(), ADEL(), AEVAL(), AFILL(), ASIZE()
* $END$
*/
/* $DOC$
* $FUNCNAME$
* ADEL()
* $CATEGORY$
* ARRAY
* $ONELINER$
* Borra un elemento del array
* $SYNTAX$
* ADEL(<aDestino>, <nPos>) --> aDestino
* $ARGUMENTS$
* <aDestino> es el nombre del array cuyo elemento ser  removido.
*
* <nPos> es la posici¢n del elemento a borrar
* $RETURNS$
* ADEL() retorna una referencia al array destino, <aDestino>
* $DESCRIPTION$
* Esta funci¢n borra el elemento que se encuentra en la posici¢n <nPos>
* en el array <aDestino>. Todos los elementos en el array <aDestino>
* m s all  de la posici¢n dada <nPos> ser n movidos hacia abajo una
* posici¢n en el array.
* En otras palabras, si se borra un item de la quinta posici¢n de un
* array de diez elementos, el elemento que estaba en la sexta posici¢n
* ahora ser  reubicado a la quinta posici¢n.
* La longitud del array <aDestino> permanece sin cambios y el £ltimo
* elemento en el array toma el valor NIL.
* $EXAMPLES$
* * El siguiente ejemplo crea un array lineal, del cual se borra el
* elemento en la quinta posici¢n.
*
* LOCAL aArray:= { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }
* ADEL( aArray, 5)
*
* Resultado: aArray es { 1, 2, 3, 4, 6, 7, 8, 9, NIL }
* $STATUS$
* R
* $COMPLIANCE$
* Esta funci¢n es totalmente compatible con CA-Cl*pper.
* $FILES$
* El c¢digo fuente est  en source\vm\arrays.c
* La librer¡a asociada es vm
* $SEEALSO$
* ACOPY(), AINS(), AFILL()
* $END$
*/
/* $DOC$
* $FUNCNAME$
* AFILL()
* $CATEGORY$
* ARRAY
* $ONELINER$
* Rellena un array con un valor especificado
* $SYNTAX$
* AFILL( <aDestino>, <xValor>, [<nInicio>], [<nContador>]) --> aDestino
* $ARGUMENTS$
* <aDestino> es el nombre del array a rellenar
*
* <xValor> es la expresi¢n con la que ser  rellenado <aDestino>
*
* <nInicio> es la posici¢n de comienzo, sub¡ndice del array
*
* <nContador> es el n£mero de elementos que se van a rellenar
* $RETURNS$
* AFILL() retorna una referencia al array destino, <aDestino>
* $DESCRIPTION$
* Esta funci¢n rellena cada elemento del array llamado <aDestino> con
* el valor <xValor>. Si es especificado, <nInicio> marca el elemento
* de inicio para continuar rellenando por <nContador> posiciones.
* Si no es especificado, el valor de <nInicio> ser  1, y el valor de
* <nContador> ser  el valor de LEN(<aDestino>); y todos las posiciones
* del array <aDestino> ser n llenadas con la expresi¢n de <xValor>.
*
* Advertencia !:
* Esta funci¢n s¢lo trabaja en una sola dimensi¢n de <aDestino>.
* Si hay punteros de referencia a otros arrays dentro de un sub¡ndice
* de <aDestino> estos valores se perder n, porque esta funci¢n los
* sobreescribe con los nuevos valores.
* $EXAMPLES$
* * El siguiente ejemplo crea un array con valores asignados, luego
* lo rellena con el valor cinco.
*
* LOCAL aTest := { NIL, 0, 1, 2 }
* Afill( aTest, 5) // Resultado aTest es { 5, 5, 5, 5 }
* $STATUS$
* R
* $COMPLIANCE$
* Esta funci¢n es totalmente compatible con CA-Cl*pper.
* $FILES$
* El c¢digo fuente est  en source\vm\arrays.c
* La librer¡a asociada es vm
* $SEEALSO$
* AADD(), AEVAL(), DBSTRUCT(), DIRECTORY()
* $END$
*/
/* $DOC$
* $FUNCNAME$
* ASCAN()
* $CATEGORY$
* ARRAY
* $ONELINER$
* Busca en un array por un valor o hasta que el block devuelva .T.
* $SYNTAX$
* ASCAN( <aDestino>, <xBuscar>,
* [<nInicio>], [<nContador>] ) --> nParadoEn
* $ARGUMENTS$
* <aDestino> es el nombre del array a examinar
*
* <xBuscar > es la expresi¢n a encontrar en <aDestino>
*
* <nInicio> es la posici¢n a la cual comenzar la b£squeda
*
* <nContador> es el n£mero de elementos a examinar
* $RETURNS$
* ASCAN() retorna un valor numrico <nParadoEn>, de la posici¢n donde
* <xBuscar> fu encontrada.
* $DESCRIPTION$
* Esta funci¢n examina el contenido de un array llamado <aDestino> en
* busca del valor de <xBuscar>. El valor devuelto es la posici¢n en el
* array <aDestino> en el cual <xBuscar> fue encontrada.
* Si esta expresi¢n no es encontrada el valor retornado es cero.
*
* Si es especificada, la posici¢n de inicio al cual comenzar la
* b£squeda puede ser establecida con el valor pasado en <nInicio>.
* Por defecto es uno.
*
* Si es especificado, el n£mero de elementos del array a examinar puede
* ser establecido con el valor pasado en <nContador>. Por defecto es
* el n£mero total de elementos en el array <aDestino>.
*
* Si <xBuscar> es un bloque de c¢digo, la operaci¢n de la funci¢n es
* ligeramente diferente. Cada referencia del subindice del array es
* pasada al bloque de c¢digo para ser evaluada. La rutina de b£squeda
* continuar  hasta que el valor obtenido del bloque de c¢digo sea
* verdadero (.T.) ¢ hasta que el final del array haya sido alcanzado.
* $EXAMPLES$
* * El siguiente ejemplo utiliza una funci¢n de biblioteca para llenar
* el array aDir con los nombres de archivos en el directorio actual.
* Posteriormente, busca si entre ellos esta presente el archivo
* test.prg, devuelve cero si no esta, ¢ mayor de cero si est .
*
* LOCAL aDir := DIRECTORY( "*.*")
* ? ASCAN( aDir,,,{|x,y| x[1] == "test.prg" } )
* $STATUS$
* R
* $COMPLIANCE$
* Esta funci¢n no es compatible con CA-Cl*pper . La funci¢n ASCAN() de
* Clipper es afectada por la condici¢n SET EXACT ON/OFF
* $FILES$
* El c¢digo fuente est  en source\vm\arrays.c
* La librer¡a asociada es vm
* $SEEALSO$
* AEVAL(), EVAL()
* $END$
*/
/* $DOC$
* $FUNCNAME$
* AEVAL()
* $CATEGORY$
* ARRAY
* $ONELINER$
* Ejecuta un bloque de c¢digo por cada elemento en el array
* $SYNTAX$
* AEVAL(<aArray>, <bBlock>, [<nInicio>], [<nContador>]) --> aArray
* $ARGUMENTS$
* <aArray> es el array a ser evaluado.
*
* <bBloque> es el bloque de c¢digo a evaluar para cada elemento
* procesado
* <nInicio> es el elemento de inicio del array a evaluar.
*
* <nContador> es el n£mero de elementos a procesar desde <nInicio>
* hasta el final del array <aArray>
* $RETURNS$
* AEVAL() retorna una referencia a <aArray>
* $DESCRIPTION$
* Esta funci¢n eval£a y procesa los elementos en <aArray>.
* Un bloque de c¢digo pasado como <bBloque> define la operacion a ser
* ejecutada sobre cada elemento del array. Todos los elementos en
* <aArray> ser n evaluados a menos que sea especificada la posici¢n de
* comienzo en <nInicio> por <nContador> elementos.
* Por defecto <nInicio> es uno.
*
* Dos par metros son pasados al bloque de c¢digo <bBloque>. Los
* elementos individuales en el array son el primer par metro y su
* posici¢n en el array es el segundo.
*
* AEVAL() no reemplaza al bucle FOR...NEXT para procesar arrays.
* Si un array es una unidad aut¢noma, AEVAL() es apropiado. Si el array
* va a ser alterado ¢ si los elementos van a ser reevaluados, un
* bucle FOR...NEXT es m s apropiado.
* $EXAMPLES$
*
* $STATUS$
* R
* $COMPLIANCE$
* Esta funci¢n es totalmente compatible con CA-Cl*pper.
* $FILES$
* El c¢digo fuente est  en source\vm\arrays.c
* La librer¡a asociada es vm
* $SEEALSO$
* EVAL(),DBEVAL()
* $END$
*/
/* $DOC$
* $FUNCNAME$
* ACOPY()
* $CATEGORY$
* ARRAY
* $ONELINER$
* Copia elementos de un array a otro
* $SYNTAX$
* ACOPY( <aOrigen>, <aDestino>, [<nInicio>], [<nContador>],
* [<nPosDestino>] )--> aDestino
* $ARGUMENTS$
* <aOrigen> es el array desde el que se copian los elementos.
*
* <aDestino> es el array al que se copian los elementos.
*
* <nInicio> es la posici¢n desde donde se inicia la copia en
* <aOrigen>. Por defecto es uno.
* <nContador> es el n£mero de elementos a copiar comenzando en la
* posici¢n <nInicio>
*
* <nPosDestino> es la posici¢n de inicio en el array <aDestino> hacia
* donde se copian los elementos. Por defecto es uno.
* $RETURNS$
* ACOPY() retorna una referencia al array <aDestino>
* $DESCRIPTION$
* ACOPY() copia elementos desde el array <aOrigen> hacia el array
* <aDestino>. Esta funci¢n copia todo tipo de datos.
*
* Si un elemento en el array <aOrigen> es un puntero de referencia a
* otro array (submatriz), esa referencia ser  copiada al array
* <aDestino> pero no todas las dimensiones ser n copiadas de un array
* al otro. Esto debe ser realizado via funci¢n ACLONE().
*
* Note
* Si el array <aOrigen> es mayor que <aDestino>, los elementos en el
* array comienzan a ser copiados en <nPosDestino> y continuan
* copiandose hasta que el final del array <aDestino> es alcanzado, los
* elementos que sobran en <aOrigen> se descartan.
* La funci¢n ACOPY() no agrega posiciones al array destino, el tama¤o
* del array <aDestino> permanece constante.
* $EXAMPLES$
* * El ejemplo siguiente copia un array sobre otro.
*
* LOCAL nContador := 2, nInicio := 1, aUltimo, aPrimero
* aUltimo := { "HARBOUR", " es el ", "Heredero" }
* aPrimero := { "CLIPPER", " fue el ", "Pionero" }
* ACOPY( aUltimo, aPrimero, nInicio, nContador)
* $STATUS$
* R
* $COMPLIANCE$
* Esta funci¢n es totalmente compatible con CA-Cl*pper.
* $FILES$
* El c¢digo fuente est  en source\vm\arrays.c
* La librer¡a asociada es vm
* $SEEALSO$
* ACLONE(),ADEL(),AEVAL(),AFILL(),AINS(),ASORT()
* $END$
*/
/* $DOC$
* $FUNCNAME$
* ACLONE()
* $CATEGORY$
* ARRAY
* $ONELINER$
* Duplica un array anidado ¢ multidimensional
* $SYNTAX$
* ACLONE( <aOrigen> ) --> aDuplicado
* $ARGUMENTS$
* <aOrigen> es el nombre del array a ser clonado.
* $RETURNS$
* ACLONE() retorna <aDuplicate> un nueva referencia a otro array
* exactamente igual al original.
* $DESCRIPTION$
* Esta funci¢n realiza una copia completa del array llamado <aOrigen>.
* Crea todas las dimensiones en el array <aDestino> que existen en el
* array original y luego llena cada dimensi¢n con los mismos valores
* de los elementos en el original.
* Ambos arrays coexisten como entidades distintas.
* $EXAMPLES$
* * El ejemplo siguiente crea un array bidimensional y lo duplica.
* Se muestra que son copiadas ambas dimensiones.
*
* LOCAL aOrigen, aDestino
* aOrigen := { {1, 2}, {3, 4}, {5, 6}, {7, 8}, {9, 10} }
* aDestino := ACLONE( aOrigen )
*
* * primera dimensi¢n
* ? "Impares son: " // Resultado: es {1, 3, 5, 7, 9}
* FOR n := 1 TO LEN( aDestino)
* ?? aDestino [n][1]
* NEXT
*
* * segunda dimensi¢n
* ? "Pares son: " // Resultado: es {2, 4, 6, 8, 10}
* FOR n := 1 TO LEN( aDestino)
* ?? aDestino [n][2]
* NEXT
*
* $STATUS$
* R
* $COMPLIANCE$
* Clipper retorna NIL si el par metro no es un array.
* $FILES$
* El c¢digo fuente est  en source\vm\arrays.c
* La librer¡a asociada es vm
* $SEEALSO$
* ACOPY(),ADEL(),AINS(),ASIZE()
* $END$
*/
/* $DOC$
* $FUNCNAME$
* ASORT()
* $CATEGORY$
* ARRAY
* $ONELINER$
* Ordena un array
* $SYNTAX$
* ASORT( <aDestino>, [<nInicio>], [<nContador>],
* [<bOrden>] ) --> aDestino
* $ARGUMENTS$
* <aDestino> es el nombre del array a ser ordenado.
*
* <nInicio> es el primer elemento para comenzar el ordenamiento.
* Por defecto es uno.
*
* <nContador> es el n£mero de elementos a ordenar comenzando en la
* posici¢n <nInicio>. Por defecto son todos los elementos
*
* <bOrden> es el bloque de c¢digo para el orden de ordenamiento,
* por defecto es en orden ascendente {| x, y | x < y }.
* El bloque de c¢digo debe recibir dos elementos del array
* como parametros y debe retornar .T. si el orden es el
* correcto, .F. en caso contrario.
* $RETURNS$
* ASORT() retorna una referencia al reciente array ordenado <aDestino>
* ¢ NIL si el par metro <aDestino> no es un array.
* $DESCRIPTION$
* Esta funcion ordena todo ¢ parte de un array dado. Si <bOrden> es
* omitido, la funci¢n espera que <aDestino> sea un array unidimensional
* conteniendo un solo tipo de datos (uno de: CHARACTER, DATE, LOGICAL,
* NUMERIC) y ordena este array en orden ascendente: los caracteres son
* ordenados por su valor ASCII, las fechas son ordenadas
* cronologicamente el valor l¢gico .F. va antes de .T. y los valores
* numricos son ordenados por su valor.
*
* Si <bOrden> es especificado este es usado para manejar la forma de
* ordenamiento. Cada vez que el bloque es evaluado, dos elementos del
* array son pasados al bloque de c¢digo, y el bloque debe retornar un
* valor l¢gico que define si esos elementos estan en orden (.T.) ¢ no
* (.F.). Usando este bloque se puede ordenar arrays multidimensionales
* hacer un ordenamiento descendente ¢ a£n (pero para que querria Ud.
* hacerlo) ordenar un array que contenga diferentes tipo de datos.
* $EXAMPLES$
* * El siguiente ejemplo ordena valores numericos en orden ascendente
*
* ASORT( { 3, 1, 4, 42, 5, 9 }) // Resultado: { 1, 3, 4, 5, 9, 42}
*
* * El siguiente ejemplo ordena cadenas en orden descendente
* LOCAL aKeys := { "Ctrl", "Alt", "Delete" }, n
* LOCAL bOrden := {| x, y | UPPER( x ) > UPPER( y ) }
* ASORT( aKeys,,, bOrden )
* FOR n = 1 TO LEN( aKeys )
* ? aKeys [n] // Resultado: { "Delete", "Ctrl", "Alt"}
* NEXT
*
* * El siguiente ejemplo ordena dos arrays bidimensionales de acuerdo
* al segundo elemento de cada par.
*
* LOCAL aPair := { {"Sun",8}, {"Mon",1}, {"Tue",57}, {"Wed",-6} }
* ASORT( aPair,,, {| x, y | x[2] < y[2] } )
*
* FOR n = 1 TO LEN( aPair )
* ? aPair [n][1], aPair [n][2]
* NEXT
* // Resultado: { {"Wed",-6}, {"Mon",1}, {"Sun",8}, {"Tue",57} }
* $STATUS$
* R
* $COMPLIANCE$
* La frecuencia de llamada al bloque de c¢digo y el orden difiere de
* Clipper debido a que Harbour usa un algoritmo distinto (m s r pido)
* de ordenamiento (quicksort).
* $FILES$
* El c¢digo fuente est  en source\vm\arrays.c
* La librer¡a asociada es vm
* $SEEALSO$
* ASCAN(),EVAL(),SORT
* $END$
*/