Files
harbour-core/doc/en/array.txt
Viktor Szakats ec87fbc449 2013-03-24 20:22 UTC+0100 Viktor Szakats (harbour syenar.net)
* contrib/hbct/doc/en/*.txt
  * contrib/hbgt/doc/en/hbgt.txt
  * contrib/hbmisc/doc/en/*.txt
  * contrib/hbziparc/doc/en/hbziparc.txt
  * contrib/rddads/doc/en/adsfuncs.txt
  * doc/en/*.txt
    ! space after comma
    ! unicode fix
    ! minor corrections

  * extras/template/tests/hbmk.hbm
    * cleaned recently added comment
2013-03-24 20:22:55 +01:00

603 lines
18 KiB
Plaintext

/*
* The following parts are Copyright of the individual authors.
* www - http://harbour-project.org
*
* Copyright 1999 Chen Kedem <niki@actcom.co.il>
* Documentation for: ASort()
*
* Copyright 1999 Luiz Rafael Culik <culik@sl.conex.net>
* Documentation for: Array(), AAdd(), AClone(), ACopy(), ASize(),
* ATail(), AIns(), ADel(), AFill(), AScan(), AEval()
*
* See COPYING.txt for licensing terms.
*
*/
/* $DOC$
$TEMPLATE$
Function
$NAME$
Array()
$CATEGORY$
API
$SUBCATEGORY$
Array
$ONELINER$
Create an uninitialized array of specified length
$SYNTAX$
Array( <nElements> [, <nElements>...] ) --> aArray
$ARGUMENTS$
<nElements> is the number of elements in the specified dimension.
$RETURNS$
<aArray> an array of specified dimensions.
$DESCRIPTION$
This function returns an uninitialized array with the length of
<nElements>.
Nested arrays are uninitialized within the same array
pointer reference if additional parameters are specified.
Establishing a memory variable with the same name as the array may
destroy the original array and release the entire contents of the
array. This depends, of course, on the data storage type of either
the array or the variable with the same name as the array.
$EXAMPLES$
PROCEDURE Main()
LOCAL aArray := Array( 10 )
LOCAL x
FOR x := 1 TO Len( aArray )
aArray[ x ] := Array( x )
NEXT
// Result is: { { NIL }, { NIL, NIL }, ... }
RETURN
$STATUS$
R
$COMPLIANCE$
C(array)
$FILES$
Library is core
$SEEALSO$
AAdd(), ADel(), AFill(), AIns()
$END$
*/
/* $DOC$
$TEMPLATE$
Function
$NAME$
AAdd()
$CATEGORY$
API
$SUBCATEGORY$
Array
$ONELINER$
Dynamically add an element to an array
$SYNTAX$
AAdd( <aArray>[, <xValue>] ) --> Value
$ARGUMENTS$
<aArray> The name of an array
<xValue> Element to add to array <aArray>
$RETURNS$
<Value> if specified <xValue>, <xValue> will return , otherwise this
function returns a NIL value.
$DESCRIPTION$
This function dynamically increases the length of the array named
<aArray> by one element and stores the value of <xValue> to that
newly created element.
<xValue> may be an array reference pointer, which in turn may be
stored to an array's subscript position.
$EXAMPLES$
LOCAL aArray := {}
LOCAL x
AAdd( aArray, 10 )
FOR x := 1 TO 10
AAdd( aArray, x )
NEXT
// Result is: { 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }
$STATUS$
R
$COMPLIANCE$
C
$FILES$
Library is core
$SEEALSO$
AIns(), ASize()
$END$
*/
/* $DOC$
$TEMPLATE$
Function
$NAME$
ASize()
$CATEGORY$
API
$SUBCATEGORY$
Array
$ONELINER$
Adjust the size of an array
$SYNTAX$
ASize( <aArray>, <nLen> ) --> aTarget
$ARGUMENTS$
<aArray> Name of array to be dynamically altered
<nLen> Numeric value representing the new size of <aArray>
$RETURNS$
<aTarget> an array pointer reference to <aTarget>.
$DESCRIPTION$
This function will dynamically increase or decrease the size of
<aArray> by adjusting the length of the array to <nLen> subscript
positions.
If the length of the array <aArray> is shortened, those former
subscript positions are lost. If the length of the array is
lengthened a NIL value is assigned to the new subscript position.
$EXAMPLES$
LOCAL aArray := { 1 } // Result: aArray is { 1 }
ASize( aArray, 3 ) // Result: aArray is { 1, NIL, NIL }
ASize( aArray, 1 ) // Result: aArray is { 1 }
$STATUS$
R
$COMPLIANCE$
If HB_COMPAT_C53 is defined, the function generates an Error,
else it will return the array itself.
$FILES$
Library is core
$SEEALSO$
AAdd(), ADel(), AFill(), AIns()
$END$
*/
/* $DOC$
$TEMPLATE$
Function
$NAME$
ATail()
$CATEGORY$
API
$SUBCATEGORY$
Array
$ONELINER$
Returns the rightmost element of an array
$SYNTAX$
ATail( <aArray> ) --> Element
$ARGUMENTS$
<aArray> is the array.
$RETURNS$
<Element> the expression of the last element in the array.
$DESCRIPTION$
This function return the value of the last element in the array
named <aArray>. This function does not alter the size of the
array or any of the subscript values.
$EXAMPLES$
LOCAL aArray := { "Harbour", "is", "Supreme", "Power" }
? ATail( aArray ) // Result is "Power"
$STATUS$
R
$COMPLIANCE$
C
$FILES$
Library is core
$SEEALSO$
Len(), Array(), ASize(), AAdd()
$END$
*/
/* $DOC$
$TEMPLATE$
Function
$NAME$
AIns()
$CATEGORY$
API
$SUBCATEGORY$
Array
$ONELINER$
Insert a NIL value at an array subscript position.
$SYNTAX$
AIns( <aArray>, <nPos> ) --> aTarget
$ARGUMENTS$
<aArray> Array name.
<nPos> Subscript position in <aArray>
$RETURNS$
<aTarget> an array pointer reference.
$DESCRIPTION$
This function inserts a NIL value in the array named <aArray>
at the <nPos>th position.
All array elements starting with the <nPos>th position will be
shifted down one subscript position in the array list and the
last item in the array will be removed completely. In other words,
if an array element were to be inserted at the fifth subscript
position, the element previously in the fifth position would now
be located at the sixth position. The length of the array <aArray>
will remain unchanged.
$EXAMPLES$
LOCAL aArray := { "Harbour", "is", "Power!", "!!!" }
AIns( aArray, 4 )
$STATUS$
R
$COMPLIANCE$
C
$FILES$
Library is core
$SEEALSO$
AAdd(), ACopy(), ADel(), AEval(), AFill(), ASize()
$END$
*/
/* $DOC$
$TEMPLATE$
Function
$NAME$
ADel()
$CATEGORY$
API
$SUBCATEGORY$
Array
$ONELINER$
Delete an element form an array.
$SYNTAX$
ADel( <aArray>, <nPos> ) --> aTarget
$ARGUMENTS$
<aArray> Name of array from which an element is to be removed.
<nPos> Subscript of the element to be removed.
$RETURNS$
<aTarget> an array pointer reference.
$DESCRIPTION$
This function deletes the element found at <nPos> subscript position
in the array <aArray>. All elements in the array <aArray> below the
given subscript position <nPos> will move up one position in the
array. In other words, what was formerly the sixth subscript position
will become the fifth subscript position. The length of the array
<aArray> will remain unchanged, as the last element in the array will
become a NIL data type.
$EXAMPLES$
LOCAL aArray := { "Harbour", "is", "Power" }
ADel( aArray, 2 ) // Result: aArray is { "Harbour", "Power" }
$STATUS$
R
$COMPLIANCE$
C
$FILES$
Library is core
$SEEALSO$
ACopy(), AIns(), AFill()
$END$
*/
/* $DOC$
$TEMPLATE$
Function
$NAME$
AFill()
$CATEGORY$
API
$SUBCATEGORY$
Array
$ONELINER$
Fill an array with a specified value
$SYNTAX$
AFill( <aArray>, <xValue>, [<nStart>], [<nCount>] ) --> aTarget
$ARGUMENTS$
<aArray> Name of array to be filled.
<xValue> Expression to be globally filled in <aArray>
<nStart> Subscript starting position
<nCount> Number of subscript to be filled
$RETURNS$
<aTarget> an array pointer.
$DESCRIPTION$
This function will fill each element of an array named <aArray> with
the value <xValue>. If specified, <nStart> denotes the beginning
element to be filled and the array elements will continue to be
filled for <nCount> positions. If Not specified, the value of
<nStart> will be 1, and the value of <nCount> will be the value
of Len( <aArray> ); thus, all subscript positions in the array
<aArray> will be filled with the value of <xValue>.
This function will work on only a single dimension of <aArray>.
If there are array pointer references within a subscript <aArray>,
those values will be lost, since this function will overwrite those
values with new values.
$EXAMPLES$
LOCAL aTest := { NIL, 0, 1, 2 }
AFill( aTest, 5 )
$STATUS$
R
$COMPLIANCE$
C
$FILES$
Library is core
$SEEALSO$
AAdd(), AEval(), dbStruct(), Directory()
$END$
*/
/* $DOC$
$TEMPLATE$
Function
$NAME$
AScan()
$CATEGORY$
API
$SUBCATEGORY$
Array
$ONELINER$
Scan array elements for a specified condition
$SYNTAX$
AScan( <aTarget>, <xSearch>, [<nStart>], [<nCount>] ) --> nStoppedAt
$ARGUMENTS$
<aTarget> Array to be scanned.
<xSearch> Expression to search for in <aTarget>
<nStart> Beginning subscript position at which to start the search.
<nCount> Number of elements to scan with <aTarget>.
$RETURNS$
<nStoppedAt> A numeric value of subscript position where <xSearch>
was found, or 0 if <xSearch> is not found.
$DESCRIPTION$
This function scan the content of array named <aTarget> for the
value of <xSearch>. The return value is the position in the array
<aTarget> in which <xSearch> was found. If it was not found, the
return value will be 0.
If specified, the beginning subscript position at which to start
scanning may be set with the value passed as <nStart>. The default
is 1.
If specified, the number of array elements to scan may be set with
the value passed as <nCount>. The default is the number of elements
in the array <aTarget>.
If <xSearch> is a code block, the operation of the function is
slightly different. Each array subscript pointer reference is
passed to the code block to be evaluated. The scanning routine
will continue until the value obtained from the code block is a
logical true (.T.) or until the end of the array has been reached.
$EXAMPLES$
LOCAL aDir := Directory( "*.prg" )
AScan( aDir,,, {| x, y | x[ 1 ] := "test.prg" } )
$STATUS$
R
$COMPLIANCE$
This function is not CA-Cl*pper compatible. CA-Cl*pper AScan() is affected by the SET EXACT ON/OFF Condition
$FILES$
Library is core
$SEEALSO$
AEval()
$END$
*/
/* $DOC$
$TEMPLATE$
Function
$NAME$
AEval()
$CATEGORY$
API
$SUBCATEGORY$
Array
$ONELINER$
Evaluates the subscript element of an array
$SYNTAX$
AEval( <aArray>, <bBlock>, [<nStart>], [<nCount>] ) --> aArray
$ARGUMENTS$
<aArray> Is the array to be evaluated.
<bBlock> Is a code block to evaluate for each element processed.
<nStart> The beginning array element index to evaluate.
<nCount> The number of elements to process.
$RETURNS$
<aArray> an array pointer reference.
$DESCRIPTION$
This function will evaluate and process the subscript elements
in <aArray>. A code block passed as <bBlock> defines the operation
to be executed on each element of the array. All elements in <aArray>
will be evaluated unless specified by a beginning subscript position
in <nStart> for <nCount> elements.
Two parameters are passed to the code block <bBlock>. The individual
elements in an array are the first parameter and the subscript position
is the second.
AEval() does not replace a FOR...NEXT loop for processing arrays. If
an array is an autonomous unit, AEval() is appropriate. If the array
is to be altered or if elements are to be reevaluated, a FOR...NEXT
loop is more appropriate.
$STATUS$
R
$COMPLIANCE$
C
$FILES$
Library is core
$SEEALSO$
Eval(), dbEval()
$END$
*/
/* $DOC$
$TEMPLATE$
Function
$NAME$
ACopy()
$CATEGORY$
API
$SUBCATEGORY$
Array
$ONELINER$
Copy elements from one array to another
$SYNTAX$
ACopy( <aSource>, <aTarget>, [<nStart>], [<nCount>], [<nTargetPos>] ) --> aTarget
$ARGUMENTS$
<aSource> is the array to copy elements from.
<aTarget> is the array to copy elements to.
<nStart> is the beginning subscript position to copy from <aSource>
<nCount> the number of subscript elements to copy from <aSource>.
<nTargetPos> the starting subscript position in <aTarget> to copy
elements to.
$RETURNS$
<aTarget> an array pointer reference
$DESCRIPTION$
This function copies array elements from <aSource> to <aTarget>.
<nStart> is the beginning element to be copied from <aSource>;
the default is 1.
<nCount> is the number of elements to be copied from <aSource>;
the default is the entire array.
<nTargetPos> is the subscript number in the target array, <aTarget>,
to which array elements are to be copied; the default is 1
This function will copy all data types in <aSource> to <aTarget>.
If an array element in <aSource> is a pointer reference to another
array, that array pointer will be copied to <aTarget>; not all
subdimensions will be copied from one array to the next. This must
be accomplished via the AClone() function.
Note:
If array <aSource> is larger then <aTarget>, array elements will
start copying at <nTargetPos> and continue copying until the end
of array <aTarget> is reached. The ACopy() function doesn't append
subscript positions to the target array, the size of the target
array <aTarget> remains constant.
$EXAMPLES$
LOCAL nCount := 2, nStart := 1, aOne, aTwo
aOne := { "HARBOUR", " is ", "POWER" }
aTwo := { "CLIPPER", " was ", "POWER" }
ACopy( aOne, aTwo, nStart, nCount )
$STATUS$
R
$COMPLIANCE$
C
$FILES$
Library is core
$SEEALSO$
AClone(), ADel(), AEval(), AFill(), AIns(), ASort()
$END$
*/
/* $DOC$
$TEMPLATE$
Function
$NAME$
AClone()
$CATEGORY$
API
$SUBCATEGORY$
Array
$ONELINER$
Duplicate a multidimensional array
$SYNTAX$
AClone( <aSource> ) --> aDuplicate
$ARGUMENTS$
<aSource> Name of the array to be cloned.
$RETURNS$
<aDuplicate> A new array pointer reference complete with nested
array values.
$DESCRIPTION$
This function makes a complete copy of the array expressed as
<aSource> and return a cloned set of array values. This provides
a complete set of arrays values for all dimensions within the
original array <aSource>
$EXAMPLES$
LOCAL aOne, aTwo
aOne := { "Harbour", " is ", "POWER" }
aTwo := AClone( aOne ) // Result: aTwo is { "Harbour", " is ", "POWER" }
aOne[ 1 ] := "The Harbour Compiler"
// Result:
// aOne is { "The Harbour Compiler", " is ", "POWER" }
// aTwo is { "Harbour", " is ", "POWER" }
$STATUS$
R
$COMPLIANCE$
CA-Cl*pper will return NIL if the parameter is not an array.
$FILES$
Library is core
$SEEALSO$
ACopy(), ADel(), AIns(), ASize()
$END$
*/
/* $DOC$
$TEMPLATE$
Function
$NAME$
ASort()
$CATEGORY$
API
$SUBCATEGORY$
Array
$ONELINER$
Sort an array
$SYNTAX$
ASort( <aArray>, [<nStart>], [<nCount>], [<bSort>] ) --> aArray
$ARGUMENTS$
<aArray> Array to be sorted.
<nStart> The first element to start the sort from, default is 1.
<nCount> Number of elements starting from <nStart> to sort, default
is all elements.
<bSort> Code block for sorting order, default is ascending order
{| x, y | x < y }. The code block should accept two parameters and
must return .T. if the sort is in order, .F. if not.
$RETURNS$
<aArray> reference to the now sorted <aArray> or NIL if the
passed <aArray> is not an array.
$DESCRIPTION$
ASort() sort all or part of a given array. If <bSort> is omitted,
the function expect <aArray> to be one dimensional array containing
single data type (one of: Character, Date, Logical, Numeric) and sort
this array in ascending order: Character are sorted by their ASCII
value, Dates are sorted chronologically, Logical put .F. values before
.T., Numeric are sorted by their value.
If <bSort> is specified, it is used to handle the sorting order. With
each time the block is evaluate, two array elements are passed to the
code block, and <bSort> must return a logical value that state if
those elements are in order (.T.) or not (.F.). Using this block you
can sort multidimensional array, descending orders or even (but why
would you want to do that) sort array that contain different data
type.
$EXAMPLES$
// sort numeric values in ascending order
ASort( { 3, 1, 4, 42, 5, 9 } ) // result: { 1, 3, 4, 5, 9, 42 }
// sort character strings in descending lexical order
aKeys := { "Ctrl", "Alt", "Delete" }
bSort := {| x, y | Upper( x ) > Upper( y ) }
ASort( aKeys,,, bSort ) // result: { "Delete", "Ctrl", "Alt" }
// sort two-dimensional array according to 2nd element of each pair
aPair := { { "Sun", 8 }, { "Mon", 1 }, { "Tue", 57 }, { "Wed", -6 } }
ASort( aPair,,, {| x, y | x[ 2 ] < y[ 2 ] } )
// result: { { "Wed", -6 }, { "Mon", 1 }, { "Sun", 8 }, { "Tue", 57 } }
$STATUS$
R
$COMPLIANCE$
C(arrayblock)
$FILES$
Library is core
$SEEALSO$
AScan(), Eval(), SORT
$END$
*/