ARRAY

Name

ARRAY -- 

Function

NIL                 A2EDIT(<nTop>, <nLeft>, <nBottom>, <nRight>, <aData>, <cUserFunc>, <aSay>, <aHeaders>, <aHeadSep>, <aColSep>, <aFootSep>, <aFooters>)
Value               AADD(<aTarget>, <expValue>[, <keyValue>])
aDuplicate          ACLONE(<aSource>)
aTarget             ACOPY(<aSource>, <aTarget>, [<nStart>], [<nCount>], [<nTargetPos>])
aTarget             ADEL(<aTarget>, <nPosition>)
aArray              AEVAL(<aArray>, <bBlock>, [<nStart>], [<nCount>])
aTarget             AFILL(<aTarget>, <expValue>,[<nStart>], [<nCount>])
aTarget             AINS(<aTarget>, <nPosition>)
aArray              ARRAY(<nElements> [, <nElements>...])
<nStoppedAt>        ASCAN(<aArr>, <Expression>, [<nStart>], [<nCount>], [lBack])
aTarget             ASIZE(<aTarget>, <nLength>)
aTarget             ASORT(<aTarget>, [<nStart>],[<nCount>], [<bOrder>])
Element             ATAIL(<aArray>)
aDirectory          DIRECTORY(<cDirSpec>, [<cAttributes>])
lEmpty              EMPTY(<exp>)
<aSelected>         __Fledit( <aSrc>, <aList>)
aNewArray           FT_AADDITION( <aList1>, <aList2> [, <lTrimmer> [, <lCaseSens> ] ] ) ;
nAverage            FT_AAVG( <aArray> [, <nStartIndex> [, <nEndIndex> ] ] )
aSorted             FT_ADESSORT( <aArray> [, <nStartIndex> [, <nEndIndex> ] ] )
nMaxlen             FT_AEMAXLEN( <aArray> [, <nDimension> [, <nStart> [, <nCount> ] ] ] ) ;
nMinlen             FT_AEMINLEN( <aArray> [, <nDimension> [, <nStart> [, <nCount> ] ] ] )
nMedian             FT_AMEDIAN( <aArray> [, <nStart> [, <nEnd> ] ] )
nNoOfMatches        FT_ANOMATCHES( <aArray>, <bCompareBlock> ; [, <nStartIndex> [, <nEndIndex> ] ] )
xElement            FT_AREDIT( <nTop>, <nLeft>, <nBottom>, <nRight>, <Array Name>, ; <nElem>, <aHeadings>, <aBlocks> [, <bGetFunc> ] )
nSum                FT_ASUM( <aArray> [, <nStartIndex> [, <nEndIndex> ] ] )
aArray              FT_RESTARR( <cFileName>, <nErrorCode> )
lRet                FT_SAVEARR( <aArray>, <cFileName>, <nErrorCode> )
nCount              LEN(<cString> | <aTarget>)
<oObject>           MAP()
<lOldMode>          MAPMODIFY(<oObj>, <lMode>)
cType               TYPE(<cExp>)
cType               VALTYPE(<exp>)

Description

Function A2EDIT()

  A2EDIT(<nTop>, <nLeft>, <nBottom>, <nRight>, <aData>, <cUserFunc>, <aSay>, <aHeaders>, <aHeadSep>, <aColSep>, <aFootSep>, <aFooters>) --> NIL
 

A2EDIT() - это функция работы с массивом, которая предназначена для просмотра 2-мерного массива.

A2EDIT() это таже DBEDIT(), но только работает с массивом, а не с БД.

Function AADD()

  AADD(<имя массива>, <выражение>[, <keyValue>]) --> значение

AADD() - это функция обработки массивов, которая увеличивает текущую длину указанного массива на единицу. Вновь созданному элементу присваивается значение, заданное аргументом <выражение>.

AADD() используется для динамического наращивания массивов. Это полезно для построения динамических списков и очередей. Примером может служить массив Getlist, используемый системой GET для хранения GET- объектов. После команд READ или CLEAR GETS, Getlist становится пустым массивом. Каждый раз, когда выполняется команда @...GET, система GET использует функцию AADD() для добавления нового элемента в конец массива Getlist и затем назначает новый GET-объект новому элементу.

AADD() похожа на ASIZE(), но добавляет только один элемент за вызов; ASIZE() может нарастить или сжать массив до заданного размера. AADD(), однако, имеет то преимущество, что может присваивать значение новому элементу, в то время как ASIZE() этого сделать не может. AADD() так же кажется похожей на функцию AINS(), однако они различны. AINS() перемещает элементы внутри массива, но она не может изменять длину массива.

Примечание. Если аргумент <выражение> - это тоже массив, то новый элемент в указанном массиве будет содержать ссылку на массив, заданный аргументом <выражение>.

Function ACLONE()

 ACLONE(<массив>) --> дублированный массив

ACLONE() - это функция обработки массивов, создающая полный дубликат массива <массив>. Если массив <массив> содержит подмассивы, ACLONE() создает соответствующие подмассивы и заполняет их копиями значений подмассивов массива <массив>. ACLONE() подобна ACOPY(), но ACOPY() не может дублировать вложенные массивы.

Function ACOPY()

  ACOPY(<исходный массив>,<принимающий массив>,
 [<начальный элемент>],[<кол-во элементов>],
 [<нач. элемент принимающего массива>])
 --> принимающий массив
 
 

ACOPY() - это функция работы с массивами, которая копирует элементы массива <исходный массив> в массив <принимающий массив>. Массив <принимающий массив> должен быть создан до начала работы функции и иметь достаточно большой размер, чтобы принять копируемые элементы. Если массив <исходный массив> содержит избыточное количество элементов, лишние элементы не будут копироваться.

ACOPY() копирует все типы данных, включая NIL и блок кода. Если какой-либо элемент массива <исходный массив> является подмассивом, соответствующий элемент массива <принимающий массив> будет содержать ссылку на подмассив. Таким образом, ACOPY() не создает полную копию многомерного массива. Для того, чтобы сделать это, используйте функцию ACLONE().

Function ADEL()

 ADEL(<принимающий массив>, <номер элемента>) --> принимающий массив

ADEL() - функция обработки массивов удаляет один элемент массива. Значение указанного элемента пропадает и все следующие за ним элементы сдвигаются на одну позицию вверх. Последний элемент массива принимает значение NIL.

--------------------------------------------------------------------- Предупреждение

В xClipper многомерные массивы создаются путем вложения одних массивов в другие. Если массив <принимающий массив> является многомерным, ADEL() удалит весь подмассив, определенный в <номер элемента>. ---------------------------------------------------------------------

Function AEVAL()

  AEVAL(<имя массива>, <блок кода>, [<начальный элемент>],
 [<кол-во элементов>]) --> имя массива
 
 

AEVAL() - функция работы с массивами, которая выполняет блок кода для каждого элемента массива, передавая этот элемент в блок кода как параметр. Возвращаемое значение блока игнорируется. Если не определены параметры <начальный элемент> и <кол-во элементов>, обрабатываются все элементы массива. AEVAL() работает аналогично функции DBEVAL(), которая обрабатывает блоком кода каждую запись файла базы данных. Подобно DBEVAL(), AEVAL() можно использовать как примитив для построения итерационных команд при обработке массивов с простой и сложной структурами. За более подробной информацией о теории и синтаксисе блоков кода обращайтесь к разделу "Блок кода" в главе "Основные концепции"

Function AFILL()

 AFILL(<принимающий массив>, <выражение>,[<начальный элемент>],
 [<кол-во элементов>]) --> принимающий массив

AFILL() - функция обработки массивов, которая заполняет указанный массив одним значением любого допустимого типа ( включая массивы блоков кода, NIL ) путем присвоения значения <выражение> каждому его элементу в заданных границах.

Предупреждение: AFILL() нельзя использовать для заполнения многомерных массивов. Многомерные массивы в xClipper формируются путем вложения одних массивов в другие. Чтобы использовать функцию AFILL() для многомерных массивов, перепишите подмассивы, используемые для других измерений массива.

Function AINS()

 AINS(<принимающий массив>,<номер элемента>) --> принимающий массив

AINS() - функция обработки массивов, которая заносит новый элемент в указанный массив. Вносимый элемент будет иметь значение NIL, пока ему не присвоят новое значение. После занесения последний элемент массива теряет свое значение, а все элементы после нового сдвигаются на одну позицию вниз.

Предупреждение: При обработке многомерных массивов функцию AINS() следует применять с осторожностью. Многомерные массивы в xClipper строятся путем вложения одного массива в другой. При использовании функции AINS() с многомерными массивами уничтожается последний элемент в заданном массиве, что приводит к потере одного или более измерений. Для включения нового измерения в массив сначала добавьте новый элемент в конец массива, используя функцию AADD() или ASIZE() перед выполнением AINS().

Function ARRAY()

 ARRAY(<кол-во эл. 1> [,<кол-во эл. 2>...]) --> массив

ARRAY() - функция работы с массивами, которая возвращает неинициализированный массив с заданным количеством измерений и элементов. Если задано более одного аргумента <кол-во эл.>, создается "вложенный", или многомерный массив с количеством измерений, равным количеству заданных аргументов <кол-во эл.>.

xClipper предусматривает несколько способов создания массивов. Можно создать массив при помощи таких описательных операторов, как LOCAL или STATIC; можно создать массив, используя операторы PUBLIC или PRIVATE; можно присвоить массив литералов созданной переменной или, наконец, использовать функцию ARRAY(). Использование ARRAY() предпочтительнее, поскольку можно создавать массивы, используя выражения или блоки кода.

Function ASCAN()

 ASCAN(<aArr>, <Expression>, [<nStart>], [<nCount>], [lBack])	--> <nStoppedAt>

ASCAN() просматривает массив <aArr> до совпадения со значением <Expression> или пока кодовый блок <Expression > возвращает TRUE. ASCAN() использует для сравнения оператор (=).

Function ASIZE()

 ASIZE(<изменяемый массив>,<новый размер>) --> измененный массив

ASIZE() - функция обработки массивов, которая изменяет фактическую длину массива. Массив наращивается или уменьшается до указанного размера. Если массив уменьшается, то конечные его элементы теряются. При увеличении длины массива новые элементы добавляются в его конец и им присваивается значение NIL.

ASIZE() подобна функции AADD(), которая добавляет новый элемент в конец массива и одновременно присваивает ему новое значение. Следует отметить, что ASIZE() отличается от функций AINS() и ADEL(), которые в действительности не изменяют размер массива.

Function ASORT()

 ASORT(<имя массива>, [<начальный элемент>], [<кол-во элементов>], [<режим сортировки>]) --> имя массива

ASORT() - функция обработки массивов, которая сортирует весь массив, содержащий элементы одного типа, или его часть. Сортировка возможна для массивов, состоящих из данных типа CHARACTER, DATE, LOGICAL и NUMERIC.

Если аргумент <режим сортировки> не определен, то по умолчанию сортировка производится по возрастанию значений. Элемент с наименьшим значением перемещается в начало массива (первый элемент), в то время как элемент с наибольшим значением перемещается в конец массива (последний элемент).

Если аргумент <режим сортировки> определен как блок кода, он явно определяет тип сортировки. В процессе сортировки блоку передается очередная пара сортируемых элементов из массива. Если элементы соответствуют типу сотировки, блок возвращает значение "истина" (.T.). Это средство может быть использовано при задании сортировки по убыванию при сортировке словарей (см. примеры ниже).

При сортировке символьные строки располагаются в соответствии с кодами ASCII, для логических данных считается, что значение "ложь"(.F.) имеет наименьшее значение, данные типа дата сортируются в хронологическом порядке, а числовые данные - в соответствии с их значениями.

Примечание: Так как многомерные массивы в xClipper строятся путем вложения подмассивов в другие массивы, функция ASORT() прямо их не сортирует. Для сортировки вложенного массива следует использовать блок кода, который надлежащим образом управляет подмассивом.

Function ATAIL()

 ATAIL(<массив>) --> элемент

ATAIL() - функция обработки массивов, которая возвращает значение элемента массива с наибольшим номером. Она может быть использована как более короткая запись выражения <массив>[LEN(<массив>)], обеспечивающего доступ к последнему элементу массива.

Function EMPTY()

 EMPTY(<выражение>) --> лог. значение признака

Функция EMPTY() достаточно универсальна и поэтому имеет несколько применений. Она может быть использована для анализа, когда пользователь вводит значения в GET-объект перед совершением изменений в файле базы данных. Она также может быть использована для анализа, не содержит ли формальный параметр NIL или он не задан. И, наконец, она может быть использована для проверки массива на нулевую длину.

Function __FLEDIT()

 __Fledit( <aSrc>, <aList>) --> <aSelected>

__FlEdit ищет соответствие для каждого элемента массива <aList> в массиве <aSrc> по имени (<aList>[1] - DBS_NAME). Если элемент обнаружен, то соответствующий элемент <aSrc> добавляется в возвращаемый массив <aSelected>. Соответствие остальных подэлементов (DBS_TYPE, DBS_LEN, DBS_DEC) не проверяется. Категория TCP представляет собой набор функция для работы с сокетами.

Благодарим Sergio Zayas за помощь в создании функций TCPListen() и TCPAccept().

Function FT_AADDITION()

 FT_AADDITION( <aList1>, <aList2> [, <lTrimmer> [, <lCaseSens> ] ] ) ;
 --> aNewArray

This function will add the elements unique of aList2 with aList1. It returns a new array including all the elements of aList1 plus the unique elements of aList2.

Function FT_AAVG()

 FT_AAVG( <aArray> [, <nStartIndex> [, <nEndIndex> ] ] ) --> nAverage

This function is used to get a numeric average of selected or all elements of an array.

This routine requires FT_ASUM().

Function FT_ADESSORT()

 FT_ADESSORT( <aArray> [, <nStartIndex> [, <nEndIndex> ] ] ) --> aSorted

This function is used to sort an array in descending order, i.e., Z-A

Function FT_AEMAXLEN()

 FT_AEMAXLEN( <aArray> [, <nDimension> [, <nStart> [, <nCount> ] ] ] ) ;
 --> nMaxlen

This function will measure each element of an array dimension and return the longest element.

Function FT_AEMINLEN()

 FT_AEMINLEN( <aArray> [, <nDimension> [, <nStart> [, <nCount> ] ] ] )
 --> nMinlen

This function will measure each element of an array dimension and return the shortest element.

Function FT_AMEDIAN()

 FT_AMEDIAN( <aArray> [, <nStart> [, <nEnd> ] ] )
 --> nMedian

This function sorts the elements of a numeric array and then returns the value in the middle element of the sorted array. If there is no exact middle value, then it returns the average of the two middle values. Half of the elements are > median and half are < median. A median average may more reflect a more useful average when there are extreme values in the set.

Function FT_ANOMATCHES()

 FT_ANOMATCHES( <aArray>, <bCompareBlock> ;
 [, <nStartIndex> [, <nEndIndex> ] ] ) --> nNoOfMatches

This function returns the number of array elements that, when passed to the supplied code block, cause that code block to return a .T. value.

Function FT_AREDIT()

 FT_AREDIT( <nTop>, <nLeft>, <nBottom>, <nRight>, <Array Name>, ;
 <nElem>, <aHeadings>, <aBlocks> [, <bGetFunc> ] ) --> xElement

This function allows you to position yourself in an array, add and delete rows with the <F7> and <F8> keys, and pass a UDF with information to edit the individual gets.

Function FT_ASUM()

 FT_ASUM( <aArray> [, <nStartIndex> [, <nEndIndex> ] ] ) --> nSum

This function is to sum the elements of a numeric array or to sum the lengths of a character array.

Function FT_RESTARR()

 FT_RESTARR( <cFileName>, <nErrorCode> ) --> aArray

FT_RESTARR() restores an array which was saved to a disc file using FT_SAVEARR().

[10/1/92 Librarian note:

This function does not appear to work with multi-dimensional arrays. If you'd care to modify it to support this feature, please do and send it to Glenn Scott 71620,1521.]

Function FT_SAVEARR()

 FT_SAVEARR( <aArray>, <cFileName>, <nErrorCode> ) --> lRet

FT_SAVEARR() saves any Clipper array, except those containing compiled code blocks, to a disc file. The array can be restored from the disc file using FT_RESTARR().

[10/1/92 Librarian note:

This function does not appear to work with multi-dimensional arrays. If you'd care to modify it to support this feature, please do and send it to Glenn Scott 71620,1521.]

Function LEN()

 LEN(<символьная строка> | <массив>) --> число

LEN() является функцией обработки символьных строк и массивов, которая возвращает длину символьной строки или количество элементов в массиве. В символьной строке каждый байт, включая и нулевые символы (CHR(0)), считается как один символ. Длина пустой строки ("") равна 0.

Для любого массива LEN() возвращает число элементов в нем. Если массив является многомерным, то подмассивы считаются как один элемент. Это означает, что для вложенного или многомерного массива LEN() возвращает длину первого измерения. Чтобы определить число элементов в других измерениях, надо использовать LEN() для подмассивов, как показано в примере. Следует отметить, что вложенные массивы в xClipper не обязательно должны иметь одинаковые измерения.

Example :

 Этот пример демонстрирует работу функции LEN() с различными
 параметрами:
 
 ? LEN("Строка символов")        // Результат: 15
 ? LEN("")                       // Результат: 0
 ? LEN(CHR(0))                   // Результат: 1
 //
 LOCAL aTest[10]
 ? LEN(aTest)                    // Результат: 10
 
 Этот пример создает числовой двумерный массив и возвращает число
 элементов в подмассиве, содержащемся в первом элементе исходного
 массива:
 
 LOCAL aArray:= {{1,2}, {1,2}, {1,2}}
 ? LEN(aArray)                   // Результат: 3
 ? LEN(aArray[1])                // Результат: 2
 
 Этот пример показывает, как можно перемещаться по элементам
 массива, используя LEN():
 
 LOCAL aArray := { { 1, 2}, { 1, 2}, { 1, 2} }
 LOCAL nRow, nColumn, nRowCount, nColumnCount
 //
 nRowCount = LEN(aArray)
 FOR nRow = 1 TO nRowCount
 nColumnCount = LEN(aArray[nRow])
 FOR nColumn = 1 TO nColumnCount
 ? nRow, nColumn, aArray[nRow][nColumn]
 NEXT
 NEXT
 
 В этом примере представлена функция, которая возвращает массив
 числовых величин, описывающих размеры вложенного или многомерного
 массива.  Предполагается, что массив имеет одинаковые измерения:
 
 FUNCTION Dimensions( aArray )
 LOCAL aDims := {}
 DO WHILE ( VALTYPE(aArray) == "A" )
 AADD( aDims, LEN(aArray) )
 aArray := aArray[1]
 ENDDO
 RETURN (aDims)

Function MAP()

 MAP() 	--> <oObject>

Map() создает новый пустой объект (ассоциативный массив) и возвращает его.

Function MAPMODIFY

 MAPMODIFY(<oObj>, <lMode>) 	--> <lOldMode>

MAPMODIFY() включает/отключает режим контроля изменения атрибутов.

Если <lMode> TRUE и объект <oObj> содержит метод <Modify>, то перед изменением значения атрибута будет автоматически вызван метод oObj:Modify(<nHashAttr>, <vNewValue>). Где <nHashAttr> хэш-код изменяемого атрибута, <vNewValue> новое значение атрибута. Метод <Modify> должен вернуть реальное значение, которое будет присвоено модифицируемому атрибуту.

Function TYPE()

 TYPE(<символьное выражение>) --> тип

TYPE() - системная функция, возвращающая тип заданного выражения. Она может быть использована для проверки корректности типов выражений в которые могут входить функции библиотеки xCLIPPER.LIB . Однако в выражения не должны включаться ссылки на LOCAL или STATIC переменные, функции пользователя или встроенные функции библиотеки EXTEND.LIB.

Функция TYPE() похожа на функцию VALTYPE(), но отличается использованием оператора макроподстановки (&) для определения типа предмета. Это мешает использовать TYPE() для определения типа LOCAL и STATIC переменных. VALTYPE() вычисляет выражение и определяет тип данных возвращаемых значений. Это позволяет вам определять тип функций пользователя так же, как LOCAL и STATIC переменных.

Function VALTYPE()

 VALTYPE (<выражение>) --> тип

VALTYPE() - системная функция, которая вычисляет значение аргумента и возвращает символ, определяющий тип данных возвращаемого значения.

Функция VALTYPE() похожа на функцию TYPE(), но отличается тем, что вычисляет значение заданного аргумента и определяет тип возвращаемого значения. Благодаря этому можно определить тип LOCAL или STATIC переменных, функций пользователя и функций из библиотеки EXTEND.LIB. Функция TYPE() использует оператор макроподстановки (&) для вычисления значения типа аргумента.