21 | 08 | 2017

 ГЛАВА 6. Функции Clipperа (часть1)

Глава 6 содержит краткий перечень и подробное описание функций
Clipperа. Предметами рассмотрения в данной главе являются:

Перечень всех функций, используемых в Clipperе, включая
синтаксис, аргументы функций, возвращаемые величины, рассмотрение
использования, и примеры.


ПЕРЕЧЕНЬ ВСЕХ ФУНКЦИЙ CLIPPERА

------------------------------
Функции Clipperа содержатся в двух библиотеках ( CLIPPER.LIB и
EXTEND.LIB ). Они должны быть специфицированы на этапе линковки
(редактирования связей) Ваших приложений. При необходимости более
подробной информации относительно линковки и компиляции смотрите
главу 7 "Компиляция и линковка программ".

ABS(<вырН>)
Возвращает абсолютное значение числового выражения.

ACHOICE(<вырН1>,<вырН2>,<вырН3>,<вырН4>,<массив1>
[,<массив2>[,<выр.С>[,<N5>[,<N6>]]]])
Выполняет оконное меню, используя массив символьных строк,
как альтернативы выбора и возвращает выбор как числовую
величину.

ACOPY(<массив1>,<массив2>[,<вырН1>[,<вырН2>[,<вырН3>]]])
Копирует элементы одного массива в другой.

ADEL(<массив>,<вырН>)
Удаляет элемент массива.

ADIR(<шаблон директории>[,<массив1>[,<массив2>[,<массив3>
[,<массив4>[,<массив5>]]]]])
Заполняет ряд массивов информацией о директории на диске.

AFIELDS([<массив1[,<массив2>[,<массив3>[,<массив4>]]]])
Запoлняет ряд массивов информацией - описанием полей.

AFILL(<массив>,<выр.>[,<вырН1>[,<вырН2>]])
Заполняет массив одной величиной.

AINS(<массив>,<вырН>)
Вставляет новую позицию в массив.

ALIAS([<вырН>])
Возвращает синоним имени рабочей области.

ASC(<выр.С>)
Возвращает ASCII - код самого левого символа символьной
строки как числовую величину.

ASCAN(<массив>,<выр.>[,<вырН1>[,<вырН2>]])
Ищет указанную величину внутри массива.

ASORT(<массив>[,<вырН1>[,<вырН2>]])

- 131 -
Сортирует массив в указанном порядке.

AT(<вырС1>,<вырС2>)
Возвращает число, обозначающее начальную позицию символьной
строки внутри другой символьной строки.

BOF()
Проверяет на начадо файла.

CDOW(<вырД>)
Возвращает название дня недели из изменяемой типа "дата".

CHR(<вырН>)
Возвращает символ для указанного ASCII-кода.

CMONTH(<вырД>)
Возвращает название месяца из величины типа "дата".

COL()
Возвращает номер колонки текущей позиции курсора.

CTOD(<вырС>)
Преобразует дату, которая хранилась или была введена как
символьная строка в величину типа "дата".

DATA()
Возвращает системную дату в формате "мм/дд/гг".

DAY(<вырД>)
Возвращает числовую величину дня в месяце из величины
типа "дата".

DBEDIT([<вырН1>[,<вырН2>[,<вырН3>[,<вырН4>]]]]
[,<массив1>][,<вырС>][,<массив2>][,<массив3>][,<массив4>]
[,<массив5>][,<массив6>][,<массив7>])
Высвечивает и редактирует строки из одной или более рабочих
областей, используя редактор в стиле "browse", который
выполняется в пределах заданного окна.

DELETED()
Возвращает статус удаления текущей строки как логическую
величину.

POW(<вырД>)
Возвращает число, которое представляет собой день недели
из величины типа "дата".

DTOC(<вырН>)
Преобразует величину типа дата в символьную строку.

DTOS(<вырД>)
Возвращает символьную строку в виде "ггггммдд" для того,
чтобы выполнить (INDEX ON) индексацию по дате и
символьному выражению.

EMPTY(<выр>)
Возвращает "истину" (.T.), если выражение пусто (blank).

- 132 -

EOF()
Возвращает "истину" (.T.), если достигнут конец файла.

EXP(<вырН>)
Вычисляет exp(X), где e - основание натурального логарифма
и X - числовой аргумент.

FCLOSE(<вырН>)
Закрывает DOS-файл, который соответствует указанному
системному номеру

FOUNT()
Возвращает число полей в текущем файле базы данных.

FCREAT(<вырС>[,<вырН>])
Создает новый DOS-файл или преобразовывает существующий
в файл нулевой длины.

FERROR()
Возвращает номер DOS ошибки после окончания файловой
функции.

FIELD/FILDNAME(<вырН>)
Возвращает имя указанного поля (по номеру) в текуцей
рабочей области.

FILE(<файл>)
Возвращает "истину" (.T.), если файл с указанным
именем существует.

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

FOPEN(<вырС>[,<вырН>])
Открывает DOS-файл.

FOUND()
Возвращает "истину" (.T.), если предыдущая SEEK,FIND,LOCATE
или CONTINUE команда выполнена успешно.

FREAD(<вырН1>,@<перемС>,<вырН2>)
Читает символы из DOS-файла в символьную переменную.

FREADSTR(<вырН1>,<вырН2>)
Читает символы из DOS-файла.

FSEEK(<вырН1>,<вырН2>[,<вырН3>])
Передвигает указатель на новую позицию в DOS- файле.

FWRITE(<вырН1>,<переменС>[,<вырН2>])
Записывает переменную, исполненную как буфер, в указанный
DOS-файл.


- 133 -
HARDRC(<вырС>)
Заменяет все "мягкие" концы строк на жесткие внутри
символьного выражения.

IT/IIF(<вырЛ>,<выр1>,<выр2>)
Возвращает выражение в зависимости от истинности
логического условия.

INDEXEXT()
Возвращает "NTX" или "NDX", указывая тип индексного файла,
активного в данный момент.

INDEXKEY(<вырН>)
Возвращает ключевое выражение указанного индекса.

INDEXORD()
Возвращает управляющий индекс как числовую величину,
которая указывает на индекс в перечне индексов,
специфицированными командами SET, INDEX TO или USE...INDEX.

INKEY([<вырН>])
Возвращает числовую величину ASCII-кода для нажатой клавиши.

INT(<вырН>)
Преобразует любое числовое значение в челое, отбрасывая
все цифры справа от точки.

ISALPHA(<вырС>)
Возвращает "истину" (.T.), если первый символ в <вырС>
является алфавитным.

ISCOLOR()
Возвращает "истину" (.T.), если установлен цветной дисплей и
"ложь" (.F.), если установлен монохромный дисплей.

LASTKEY()
Возвращает числовую величину ASCII-кода для последней
нажатой клавиши.

LASTREC()/RECCOUNT()
Возвращает количество записей в текущей рабочей области.

LEN(<вырС>/<массив>)
Возвращает количество символов в указанной символьной
строке или число элементов в массиве.

LOG(<вырН>)
Возвращает натуральный логарифм данного числа.

LOWER(<вырС>)
Преобразует заглавные буквы в прописные.

LTRIM(<вырС>)
Удаляет передние пробелы из символьного выражения.

MAX(<вырН1>/<вырД1>,<вырН2>/<вырД2>)
Возвращает большее из двух числовых или типа "дата"

- 134 -
выражений.

MEMOEDIT(<вырC>[,<вырН1>,<вырН2>,<вырН3>,<вырН4>]
[,<вырЛ>])
Высвечивает и редактирует мемо-поля и длинные строки.

MEMOLINE(<вырС>,<вырН1>,<вырН2>)
Возвращает отформатированную строку из символьной строки
или из мемо-поля.

MEMOREAD(<вырС>)
Возвращает спейифицированный дисковый файлкак символьную
строку

MEMORY()
Возвращает свободный объем памяти.

MEMOTRAN(<вырС1>[,<вырС2>[,<вырС3>])
Возвращает символьную строку с замещенными символами
(CR) и (LF).

MEMOWRITE(<вырС1>,<вырС2>)
Записывает символьную строку в указанный дисковый файл и
возвращает "истина" (.T.), если отработала успешно.

MIN(<вырН1>/<вырД1>,<вырН2>/<вырД2>)
Возвпащает наименьшее из двух чисел или выражений типа
"дата".

MLCOUNT(<вырС>,<вырН>)
Возвращает число строк в символьном выражении или поля
типа "мемо".

MONTH(<вырД>)
Возвращает численное обозначение месяцаиз изменяемой типа
"дата".

NETERR()
Возвращает "истина" (.T.), всли USE, USE...EXCLUSIVE,
APPEND BLANK, FLOCK() или RLOCK() отработали неудачно
в сетевой среде.

NETNAME()
Возвращает текст с названием компьютера.

NEXTKEY()
Читает следующее нажатие клавиши без удаления его из
буфера клавиатуры.

PCOL()
Возвращает номер колонки текущей позиции печатающей головки
принтера.

PCOUNT()
Возвращает число фактических параметров, переданных
процедуре, определенной пользователем.


- 135 -
PROCLINE()
Возвращает номер строки исходного текста программы, которая
выполняется.

PROCNAME()
Возвращает номер текущей программы или процедуры, которая
выполняется.

PROW()
Возвращает текущую строку на принтере.

RAT(<вырС1>,<вырС2>)
Ищет последнее включение указанной подстроки в символьную
строку и возвращает начальную позицию, как числовую
величину.

READVAR()
Возвращает имя текущей GET/MENU-изменяемой или нулевую
строку, в случае, если нет ожидаемого выбора.

RECNO()
Возвращает номер текущей строки в текущей рабочей области.

REPLICATE(<вырС>,<вырN>)
Повторяет указанное символьное выражение указанное число
раз.

RLOCK()/LOCK()
Закрывает от других текущую запись.

ROUND(<вырN1>,<вырN2>)
Возвращает округленное число до указанного количества цифр
после десятичной точки.

ROW()
Возвращает номер строки текущего положения курсора на
экране.

SCROLL(<вырN1>,<вырN2>,<вырN3>,<вырN4>,<вырN5>)
Выделяет часть экрана для прокручивания содержимого вверх
или вниз.

SECONDS()
Возвращает системное время (<секунды>,<сотые>).

SELECT()
Возвращает номер текущей рабочей области.

SETPRC(<вырN1>,<вырN2>)
Приписывает внутренние функции PROW(), PCOL() указанной
изменяемой.

SPACE(<вырN>)
Создает символьную строку из указанного числа пробелов.

SQRT(<вырN>)
Возвращает квадратный корень данного положительного числа.

- 136 -

STRTRAN(<вырC1>,<вырC2>[,<вырC3>][,<вырN1>][,<вырN2>])
Ищет и делает замену внутри символьной строки.

SUBSTR(<вырC>,<вырN1>[,<вырN2>])
Выделяет указанную часть символьной строки.

TIME()
Возвращает системное время (чч:мм:сс).

TRANSFORM(<выр>,<вырC>)
Возвращает символьную строку в указанном формате.

TRIM(<вырC>)/RTRIM()
Удаляет пробелы в конце символьного выражения.

TYPE("<вырC>")
Возвращает тип данных.

UPDATED()
Возвращает .Т., если последний READ изменил какие-либо
данные в соответствующих GET.

UPPER(<вырC>)
Преобразует прописные буквы в заглавные.

VAL(<вырC>)
Преобразует символьную строку в число.

WORD()
Преобразует числовые аргументы CALL из double в int.

YEAR(<вырD>)
Возвращает полное числовое значение года из данных типа
"дата".

ABS()
Написание: ABS(<вырN>)
Цель:
Оценить числовое выражение и возвратить абсолютное значение.

Аргументы: <вырN> - оцениваемое числовое выражение.

Возвращает:
Числовое значение. ABS() возвращает положительное число или ноль
для любого числового выражения, положительного или отрицательного.
ABS() используется, когда Вам нужно узнать величину числового
выражения. Она позволяет Вам оценить разницу между двумя числами в
случаях, когда Вам не важен знак разультата.

Примеры: a = 100
b = 150
? a - b && Результат: -50
? ABS(a - b) && Результат: 50
? ABS(-12) && Результат: 12
? ABS(0) && Результат: 0


- 137 -
library: CLIPPER.LIB


ACHOICE()


Написание: ACHOICE(<вырN1>,<вырN2>,<вырN3>,<вырN4>,<массив1>
[,<массив2>[,<вырC>[,<вырN5>[,<вырN6>]]]])

Цель:
Выполнить выбор из оконного меню, используя в качестве
альтернатив выбора символьные строки из массива.

Аргументы:
<вырN1>,<вырN2>,<вырN3>,<вырN4> - координаты верхнего левого и
нижнего правого углов окна меню.
<массив1> - массив символьных строк, высвечиваемых в качестве
строк меню.
<массив2> - параллельный масспв логпческих величин, по одной на
каждую строчку меню. Если элементом является "ложь"(.F.), то
соответствующая строка меню недоступна для выбора.Вы можете, тем
не менее, задать этот аргумент как одну логическую переменную и
тогда меню выполняется так, как если бы Вы заполнили весь массив
этой величиной. Это особенно ценно, когда Вы хотите сделать все
альтернативы выбора в меню либо доступными, либо недоступными.
<вырC> - пользовательская фупкция, которая выполняется, когда
нажата "исключительная" клавиша. Обязательно указывать имя
функции без скобок и аргументов. Отметьте, что поведение
ACHOICE() зависит от наличия этого аргумента. Для получения
более подробной информации смотрпте описание ниже.
<вырN5> - начальный элемент выбора. Если не указан, то по
умолчанию принимается первый элемент из <массива1>.
<вырN6> - начальная строка в окне. Если не указана, то за
начальную строку в окне принимается первая альтернатива в окне
меню, позиция которой - ноль.

Возвращает:
Числовую величину. ACHOICE() возвращает позицию, в которой
сделан выбор. Выполняя выбор, закнчивает работу в меню и
возвращает позицию текущего элемента из <массива1>. Отказываясь
от выбора, заканчивает работу в меню и возвращает 0.

ACHOICE() имеет два вида, отличающихся друг от друга наличием
пользовательской функции в качестве аргумента <вырC>. ACHOICE()
высвечивает список альтернатив выбора внутри заданных координат
экрана. Далее она выполняет следующие действия, когда Вы
нажимаете соответствующую клавишу:

Таблица 6-1. Активные клавиши ACHOICE() без пользовательской
функции.
----------------------------------------------------------------
Клавиша Действие
----------------------------------------------------------------

Стрелка вверх Переход вверх на один элемент.
Стрелка вниз Переход вниз на один элемент.
Home Переход на первый элемент в окне.

- 138 -
End Переход на последний элемент в окне.
PgUp Переход к предыдущему окну меню, при этом
текущая строка в окне не меняется.
PgDn Переход к следующему окну меню, при этом
текущая строка в окне не меняется.
Ctrl-PgUp Переход на первый элемент в меню.
Ctrl-PgDn Переход на последний элемент в меню.
Return Выбор текущего элемента, возвращая его
позицию.
Esc Отказ от выбора, возвращая ноль.
Стрелка влево Отказ от выбора, возвращая ноль.
Стрелка вправо Отказ от выбора, возвращая ноль.
Первая буква Переход на один из следующих элементов,
начинающийся с данного символа.
----------------------------------------------------------------

Если число альтернатпв выбора в <массиве1> превышает количество
строк в окне меню, строчки меню будут скролировать всякий раз,
когда Вы попытаетесь двинуть курсор за пределы окна, находясь на
верхней или нижней строчке. Отметьте, что курсор не
перескакивает в начало или в конец меню, когда он достигает
соответственно конца или начала всего меню. Тем не менее,
нажатие "первой" буквы выполняет перескок по строчкам внутри
группы альтернатив выбора, первая буква названия которых
соответствует нажатой букве.

ПОЛЬЗОВАТЕЛЬСКАЯ ФУНКЦИЯ.

Если Вы указываете пользовательскую функцию в аргументах, то
поведение ACHOICE() до некоторой степени изменится. Во-первых,
меньшее количество клавиш теперь автоматичаски выполняется самой
функцией ACHOICE(), а управление передается пользовательской
функции. Ниже указаны клавиши, которые ACHOICE() отрабатывает,
когда в аргументах указана пользовательская функция (FUNC). Эти клавиши
генерируют "холостую" моду 0, в то время как другие генерируют
"исключительную" моду 3.

Таблица 6-2. Активные клавиши ACHOICE() с пользовательской
функцией.
----------------------------------------------------------------
Клавиша Действие
----------------------------------------------------------------
Стрелка вверх Переход вверх на один элемент.
Стрелка вниз Переход вниз на один элемент.
PgUp Переход к предыдущему окну меню, при этом
текущая строка в окне не меняется.
PgDn Переход к следующему окну меню, при этом
текущая строка в окне не меняется.
Ctrl-PgUp Переход на первый элемент в меню.
Ctrl-PgDn Переход на последний элемент в меню.
----------------------------------------------------------------

Отметьте, что клавиши <Home>,<End>,<Return> и <Esc> теперь
генерируют "исключительный" код (мода 3). Когда ACHOICE()
выполняет пользовательскую функцию, она автоматически передает
ей три параметра: моду, текущий элемент в массиве альтернатив и
положение курсора, относительно окна меню. Мода показывает

- 139 -

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

Таблица 6-3. Моды функции ACHOICE().
----------------------------------------------------------------
Мода Описание
----------------------------------------------------------------
0 Холостая
1 Курсор перемещается в начало меню.
2 Курсор перемещается в конец меню.
3 Исключительная клавиша.
4 Нет доступных для выбора элементов.
----------------------------------------------------------------

После того, как Ваша пользовательская функция (FUNC) выполнила
какиелибо операции, соответствующие моде ACHOICE() или коду
нажатой клавиши, Вы возвращаете величину, инструктируя
ACHOICE(), какую операцию выполнить следующей. Следующая ниже
таблица перечисляет возможные возвращаемые величины.

Таблица 6-4. Величины, возвращаемые пользовательской функцией
в функцию ACHOICE().
----------------------------------------------------------------
Величина Действие
----------------------------------------------------------------
0 Отказ от выбора; возвращает ноль.
1 Сделать выбор; возвращает номер элемента,
на котором установлен курсор.
2 Продолжать процесс выбора.
3 Перейти на следующий элемент, первый символ
которого соответствует последней нажатой
клавише.
----------------------------------------------------------------

ЦВЕТ.
Альтернативы выбора высвечиваются стандартным цветом (standard),
выделеный элемент, на котором установлен курсор, дополнительным
цветом (enhanced) и элемент, недоступный для выбора,
высвечивается "невыбираемым" цветом (unselected). Для примера,
формулировка цвета:

SET COLOR TO W+/N,BG+/B,,,W/N

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

ВЛОЖЕННОСТЬ. Вы можете вызывать несколько формулировок ACHOICE()
внутри каждой функции ACHOICE(), Что позволит Вам создавать
вложенные или иерархические меню.

- 140 -

Примеры:
DECLARE pad[3]
pad[1] = "one"
pad[2] = "two"
pad[3] = "three"
menuchoice = ACHOICE(10,10,12,13,pad)

library: EXTEND.LIB
Смотри
также: @...PROMPT,MENU TO,SET MESSAGE,DBEDIT().


ACOPY()
Написание:
ACOPY(<массив1>,<массив2>[,<вырN1>[,<вырN2>[,<вырN3>]]])

Цель: Скопировать элементы из одного массива в другой.

Аргументы: <массив1> - исходный массив.
<массив2> - получаемый массив.
<вырN1> - позиция начального элемента копирования в исходном
массиве.
<вырN2> - количество элементов, которые должны быть скопированы
из исходного массива, начиная с элемента <вырN1>.
<вырN3> - позиция начального элемента в принимающем массиве,
начиная с которого будут располагаться элементы, копируемые из
исходного массива.

Возвращает: Нет возвращаемых величин.

Примеры: DECLARE one[5],two[5]
ADIR ("*.*",one)
ADIR ("*.prg",two)
fun = ACOPY(one,two,1,2)
FOR i=1 TO 5
? one[i],two[i]
NEXT

library: EXTEND.LIB
Смотри
также: ACHOICE(),ADEL(),ADIR(),AFIELDS(),AFILL(),AINS(),ASCAN(),
ASORT(),LEN().


ADEL()


Написание: ADEL(<массив>,<вырN>)

Цель: Удалить элемент массива.

Аргументы: <массив> - имя массива, из которого удаляется элемент.
<вырN> - позиция элемента, который удаляется.

Возвращает: Нет возвращаемых величин.


- 141 -
Содержимое указанной позиции массива уничтожается и все элементы
массива, начиная со следующей позиции и до конца, сдвигаются
вверх на один элемент. Последняя позиция массива, т.о.
становится неопределенной до тех пор, пока для нее не назначат
новую величину.

Примеры:
DECLARE array[3]
array[1] = 1
array[2] = 2
array[3] = 3
? array[2] && Результат: 2
ADEL(array,2)
? array[2] && Результат: 3

library: EXTEND.LIB
Смотри
также:
ACHOICE(),ACOPY(),ADIR(),AFISLDS(),AFILL(),AINS(),ASCAN(),
ASORT(),LEN().


ADIR()

Написание: ADIR(<шаблон имени>[,<массив1>[,<массив2>[,<массив3>
[,<массив4>[,<массив5>]]]]])

Цель:
Заполнить набор массивов информацией о директории, включая имена
файлов и/или вернуть количество файлов, соответствующих <шаблону
имени>.

Аргументы:
<шаблон имени> - шаблон названия группы файлов. Поддерживаются
стандартные символы шаблонов (* и ?). По умолчанию "*.*".
<массив1> - имя массива, заполняемого именами файлов,
соответствующих шаблону. Все элементы символьного типа.
<массив2> - массив, заполняемый размерами соответствующих файлов
из <массива1>. Все элементы числового типа.
<массив3> - массив, заполняемый датами соответствующих файлов из
<массива1>. Все элементы типа "дата".
<массив4> - массив, заполняемый временами соответствующих файлов
из <массива1>. Все элементы числового типа.
<массив5> - массив, заполняемый атрибутами соответствующих
файлов из <массива1>. Все элементы символьного типа. Атрибуты
могут принимать следующие значения:

Таблица 6-5. Атрибуты файлов, возвращаемые функцией ADIR().
----------------------------------------------------------------
Символ Описание
----------------------------------------------------------------
R Только для чтения.
H "Невидимый" (hidden).
S Системный.
D Директорий.
A Архивный.
----------------------------------------------------------------

- 142 -

Отметьте, что если указан <массив5> в аргументах, то невидимые и
системные файлы и директории включаются в список наряду с
обычными файлами. Если <массив5> не указан, то включаются только
нормальные файлы.

Возвращает:
Целую числовую величину. ADIR() возвращает число файлов,
соответствующих указанному шаблону. Если включена дополнительных
массивов, то элементы массива заполняются именами файлов (по
одному на каждый элемент) пока все найденные файлы не будут
перечислены или пока пока каждый элемент описания файлов не
будет задействован.

ADIR() очень удобна как средство для построения процедур выбора
файлов и работы с директориями. Для того, чтобы создать массив
со списком файлов, Вы должны объявить массив и затем заполнить
его всеми найденными именами. Наилучший метод сделать это -
во-первых, использовать ADIR() для получения количества
элементов в аргументе при объявлении массива командой DECLARE.
Для примера:

DECLARE dbf_files[ADIR("*.dbf")]

Затем несколько позже, заполнить массив, используя шаблон. Для
того, чтобы заполнить массивы с одними атрибутами при
игнорировании других, укажите пустую переменную. Для примера, для
получения только имен файлов и соответствующих этим файлам дат:

dbf_count = ADIR("*.dbf")
DECLARE dbf_files[dbf_count],dbf_date[dbf_count]
dummy = ""
ADIR(dbf_files,dummy,dbf_date)

Примеры:
DECLARE array_dir[ADIR("*.txt")
ADIR("*.txt",array_dir)

library: EXTEND.LIB
Смотри
также:
ACHOICE(),ACOPY(),ADEL(),AFISLDS(),AFILL(),AINS(),ASCAN(),
ASORT(),LEN().


AFIELDS()
Написание:
AFIELDS([<массив1>[,<массив2>[,<массив3>[,<массив4>]]]])

Цель:
Заполнить набор массивов именами, типами, длинами полей и
количеством цифр после десятичной точки.

Аргументы:
< массив1> - массив, заполняемый именами полей. Все элементы
символного типа.
<массив2> - массив, заполняемый типами полей. Все элементы

- 143 -
символного типа.
<массив3> - массив, заполняемый длинами полей. Все элементы
числового типа.
<массив4> - массив, заполняемый количеством десятичных знаков
в полях. Все элементы числового типа. Если тип поля не
числовой, то заполняется нулем.

Возвращает: Целую числовую величину.
AFIELDS() возвращает количество полей или длину наиболее
короткого массива, указанного в аргументах. Если не указано ни
одного аргумента, то возвращает ноль.

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

DECLARE fname[FCOUNT()],flength[FCOUNT()]
dummy = ""
AFIELDS(fname,dummy,flength)

Примеры:
Ниже демонстрируется как использовать AFIELDS() и ACHOICE() для
создания выбора из списка файлов:

CLEAR
USE Sales
*
DECLARE fname[FCOUNT()]
AFIELDS(fname)
@ 1,0 TO 10,10 DOUBLE
fld = ACHOICE(2,1,9,9,fname)
@ 12,0 SAY IIF(fld = 0, fname[fld], "Выбор не сделан")
RETURN

library: EXTEND.LIB
Смотри
также:
ACHOICE(),ACOPY(),ADEL(),ADIR(),AFILL(),AINS(),ASCAN(),
ASORT(),FIELD(),LEN().


AFILL()


Написание: AFILL(<массив>,<выр>[,<вырN1>[,<вырN2>]])

Цель: Заполнить массив выбранной величиной.

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

- 144 -
<вырN1> - позиция элемента, начиная с которого заполняется
массив. Этот аргумент необязательный и по умолчанию принимается
равным 1.
<вырN2> - количество элементов массива, которые должны быть
заполнены, начиная с элемента с номером <вырN1>.

Возвращает: Нет возвращаемых величин.

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

Примеры: DECLARE alogic[15]
AFILL(alogic,.F.)
? alogic[6] && Результат: .F.
AFILL(alogic,.T.,5,10)
? alogic[6] && Результат: .T.

library: EXTEND.LIB
Смотри
также:
ACHOICE(),ACOPY(),ADEL(),ADIR(),AFIELDS(),AINS(),ASCAN(),
ASORT(),LEN().



AINS()

Написание: AINS(<массив>,<вырN>)

Цель: Вставить неопределенный элемент в массив.

Аргументы: <массив> - массив, в который вставляется новый элемент.
<вырN> - позиция, на которую вставляется новый элемент.

Возвращает: Нет возвращаемых величин.

Новая вставленная позиция остается неопределенной до тех пор,
пока для нее не будет назначена новая величина. После вставки
все элементы массива, начиная с позиции вставки, сдвигаются на
одну позицию вниз; последний элемент массива при этом теряется.

Примеры:
DECLARE array[3]
array[1] = 1
array[2] = 2
array[3] = 3
? array[3] && Результат: 3
AINS(array,2)
? array[3] && Результат: 2

library: EXTEND.LIB
Смотри
также:
ACHOICE(),ACOPY(),ADEL(),ADIR(),AFIELDS(),AFILL(),ASCAN(),
ASORT(),LEN().


- 145 -

ALIAS()


Написание: ALIAS([<вырN>])

Цель: Получить синоним имени указанной рабочей области.

Аргументы: <вырN> - номер рабочей области.

Возвращает: Символьную строку.
Если не указан аргумент, то возвращается синоним имени текущей
рабочей области. Если числовой аргумент указан, то возвращается
синоним имени указанной рабочей области. Если в команде USE был
указан не файл базы данных, то ALIAS() возвращает пустую строку
("").

Примеры:
USE Sales
SELECT 2
USE Client
? ALIAS(1),ALIAS() && Результат: Sales Client

library: CLIPPER.LIB
Смотри
также: SELECT,USE,SELECT().



ASC()


Написание: ASC(<вырC>)

Цель:
Возвратить ASCII-код или величину из Расширенной Таблицы
Символов IBM для самого левого символа в символьном выражении.

Аргументы: <вырC> - символьное выражение, преобразумое в число.

Возвращает: Целую числовую величину в пределах от 0 до 255.

ASC() используется в основном в выражениях, в которых Вам нужно
выполнить числовые вычисления над ASCII()-значениями символов.

Примеры:
? ASC("A") && Результат: 65
? ASC("Apple") && Результат: 65
? ASC("a") && Результат: 97
? ASC("z") - ASC("A") && Результат: 25
? ASC("") && Результат: 0

library: CLIPPER.LIB
Смотри
также: CHR(),INKEY().



- 146 -
ASCAN()


Написание: ASCAN(<массив>,<выр>[,<вырN1>[,<вырN2>]])

Цель: Найти в массиве указанную величину.

Аргументы: <массив> - массив, в котором осуществляется поиск.
<выр> - искомая величина. Это может быть выражение любого типа.
<вырN1> - начальный элемент поиска. Этот аргумент необязательный
и по умолчанию равен 1.
<вырN2> - количество элементов массива, в которых осуществляется
поиск. Этот аргумент также необязательный и по умолчанию поиск
осуществляется по всем элементам до конца массива, начиная с
<вырN1>.

Возвращает: Целую числовую величину.
ASCAN() возвращает позицию элемента, содержащего соответствующую
величину. Если данная величина в массиве не найдена ASCAN()
возвращает ноль.

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

Примеры: DECLARE dir_list[ADIR("*.TXT")]
ADIR("*.TXT",dir_list)
*
ptr = ASCAN(dir_list,"TEMP.TXT")
IF ptr > 0
dir_list[ptr] = "NEWTEMP.TXT"
ELSE
? "Соответствующей величины не найдено."
ENDIF

library: EXTEND.LIB
Смотри
также:
ACHOICE(),ACOPY(),ADEL(),ADIR(),AFIELDS(),AFILL(),AINS(),
ASORT(),LEN().



ASORT()

Написание: ASORT(<массив>[,<вырN1>[,<вырN2>]])

Цель: Отсортировать содержимое массива в возростающем порядке.

Аргументы: <массив> - сортирумый массив.
<вырN1> - начальный элемент массива, начиная с которого

- 147 -
сортируются элементы. Если Вы опустите этот аргумент, то
сортировка начинается с позиции 1.
<вырN2> - количество элементов, которые должны быть
отсортированы. Если Вы опустите этот аргумент, то сортировка
выполняется для всех элементов массива, начиная с <вырN1>.

Возвращает: Нет возвращемой величины.

Все элементы массива, которые должны быть отсортированы, должны
иметь одинаковый тип данных.

Примеры: DECLARE testarray[5]
testarray[1] = 1
testarray[2] = 2
testarray[3] = "AA"
testarray[4] = "CC"
testarray[5] = "BB"
*
ASORT(testarray,3)
*
? testarray[3] && Результат: AA
? testarray[4] && Результат: BB
? testarray[5] && Результат: CC

library: EXTEND.LIB
Смотри
также:
ACHOICE(),ACOPY(),ADEL(),ADIR(),AFIELDS(),AFILL(),AINS(),
ASCAN(),LEN().



AT()


Написание: AT(<вырC1>,<вырC2>)

Цель:
Найти в символьной строке первое вхождение указанной подстроки и
вернуть начальную позицию как числовую величину.

Аргументы:
<вырC1> - символьная строка, вхождение которой ищется.
<вырC2> - символьная строка, в которой осуществляется поиск
подстроки <вырC1>.

Возвращает: Целую числовую величину.
Если искомая подстрока содержтся внутри строки, то AT()
возвращает позицию начального символа подстроки. Если подстрока
не найдена, то AT() возвращает ноль.

AT() является основной функцией манипулирования со строками.
Обычно Вы используете AT() для определения расположения первого
вхождения подстроки внутри строки, когда Вам необходимо получить
количественную характеристику в виде числовой величины. Если Вам
нужно только знать, содержится ли одна строка внутри другой,
используйте оператор $ (конкатинации).

- 148 -

Примеры: ? AT("a","abcde") && Результат: 1
? AT("bcd","abcd") && Результат: 2
? AT("a","bcd") && Результат: 0

library: CLIPPER.LIB
Смотри
также: RAT(),STRTRAN(),SUBSTR(),$.



BOF()


Написание: BOF()

Цель:
Определить, была ли сделана попытка передвинуть указатель строки
выше начала текущего файла базы данных.

Возвращает: Логическую величину.
BOF() возвращает "истину"(.Т.) только тогда, когда Вы пытаетесь
передвинуть указатель строки за первую логическую запись в
текущем файле базы данных. Когда это происходит, указатель
устанавливается на первой строки. Если текущий файл базы данных
не содержит записей, то как BOF(), так и ЕOF() возвращают
"истину"(.Т.). Отметьте, что единственной командой,
устанавливающей значение BOF() "истина"(.Т.), является команда
SKIP.

BOF() обычно исползуется, как проверка условия достижения
верхней границы файла, когда Вам нужно перемещать указатель
строки вверх (в обратном направлении) по файлу базы данных.
Простым примером применения BOF() является способность получения
списка записей в обратном порядке без использования индексного
файла с обратным порядком записей. Более сложным приложением с
применением BOF() является процедура листания экранных страниц
вперед и назад по текущему файлу базы данных при нажатии
определенных клавиш. Вы используете BOF() здесь для проверки
достижения вершины файла.

Примеры: USE Sales
GO TOP
? RECNO() && Результат: 1
? BOF() && Результат: .F.
*
SKIP -1
? RECNO() && Результат: 1
? BOF() && Результат: .T.

library: CLIPPER.LIB
Смотри
также: SKIP,EOF().



CDOW()

- 149 -


Написание: CDOW(<вырD>)

Цель:
Преобразовать величину типа "дата" в строку, представляющую
название дня недели.

Аргументы: <вырD> - преобразуемая дата.

Возвращает: Символьную строку.
CDOW() возвращает название дня недели с первой заглавной и
остальными прописными буквами. Максимальная длина возвращаемой
величины является 9 символов для слова "Wednesday". Нулевая дата
возвращает пустую строку ("").

Примеры:
? DATE() && Результат: 09/01/87
? CDOW(DATE()) && Результат: Tuesday
? CDOW(DATE()+7) && Результат: Tuesday
? CDOW(CTOD("06/02/87")) && Результат: Friday

library: CLIPPER.LIB
Смотри
также:
DOW(),CMONTH(),MONTH(),DAY(),YEAR(),CTOD(),DTOC(),DTOS(),DATE().



CHR()


Написание: CHR(<вырN>)

Цель: Вернуть символ из Расширенной Таблицы Символов IBM.

Аргументы:
<вырN> - код символа из Расширенной IBM-таблицы, который должен
получен. Может принимать значения в пределах от 0 до 255.

Возвращает: Символьную величину.
CHR() возвращает символ, соответствующий коду в Расширенной
Таблице Символов IBM. Отметьте себе, что разные команды
используют символы по-разному. Для примера, @...SAY CHR(7)
высвечивает графический символ на экран, в то же время команда ?
CHR(7) вызывает звуковой сигнал.

Смотрите в Приложении G полный список доступных символов.

CHR() является очень многосторонней и обеспечивает выполнение
множества основных задач. Наиболее типичное использование CHR()
- пересылка управляющих кодов на принтер. Другое типичное
применение - использование CHR() для подачи звукового сигнала,
сообщающего пользователю об ошибке или окончании какого-либо
действия. Третье очень распространенное использование -
пересылка графического символа на экран или на принтер. Более
сложное примение CHR() - управление клавиатурой. Обычно

- 150 -
используют CHR() в комбинации с KEYBOARD для приписывания
клавишам соответствующих кодов. В некоторых случаях Вы, может
быть, найдете более удобным создание имен клавиш, назначая CHR()
кода клавиши какоу-либо изменяемой в памяти. Позже Вы можете
сравнить результат CHR(INKEY()) с именем клавиши из изменяемой.

????????????????????????????????????????????????????????????????
? ОТМЕТЬТЕ: CHR(0) теперь имеет длину 1 и обрабатывается ?
? также, как и другие символы. Это позволяет Вам послать ?
? этот символ (пустышка) на любое устройство или в файл, ?
? включая файл базы данных. ?
????????????????????????????????????????????????????????????????

Примеры:
? CHR(72) && Результат: H
? CHR(61) && Результат: =
? REPLICATE(CHR(61),10) && Результат: ==========
? (CHR(ASC("A")+32) && Результат: a
? CHR(7) && Результат: звуковой сигнал
*
? LEN(CHR(0)) && Результат: 1
? LEN("") && Результат: 0

library: CLIPPER.LIB
Смотри
также: KEYBOARD,ASC(),INKEY().



CMONTH()


Написание: CMONTH(<вырD>)

Цель:
Преобразовать величину типа "дата" в строку, состоящую из
названия месяца.

Аргументы: <вырD> - преобразуемая дата.

Возвращает: Символьную строку.
CMONTH() возвращает название месяца с первой заглавной и
остальными прописными буквами. Максимальная длина возвращаемой
величины является 9 символов для слова September. Нулевая дата
возвращает нулевую строку ("").

CMONTH() удобна для создания представления даты как строки,
которое Вы можете использовать в отчетах, указателях или при
выводе на экран.

Примеры: ? CMONTH(DATE()) && Результат: September
? CMONTH(DATE() + 45) && Результат: October
? SUBSTR(CMONTH(DATE(),1,3)+STR(MONTH(DATE()))
&& Результат: Sep1
library: CLIPPER.LIB
Смотри
также:

- 151 -
CDOW(),DOW(),MONTH(),DAY(),YEAR(),CTOD(),DTOC(),DTOS(),DATE().



COL()


Написание: COL()

Цель:
Возвратить номер колонки текущего положения курсора на экране.

Возвращает: Целую числовую величину.
COL() используется, когда Вы хотите переместить курсор на другую
колонку относительно колонки текущего положения. COL() обычно
используется в комбинации с ROW() и со всеми вариациями команды
@. В частности, Вы используете COL() и ROW() для создания
процедур или функций, зависящих от положения курсора на экране,
для передачи координат положения курсора, как параметров.

Примеры: charvar = "This is "
@ 1,10 SAY charvar
@ 1,COL()+1 SAY "a string."
&& Результат: This is a string.

library: CLIPPER.LIB
Смотри
также:
@...SAY...GET,@...BOX,@...CLEAR..TO,@...TO..[DOUBLE],ROW(),
PCOL(),PROW().



CTOD()


Написание: CTOD(<вырC>)

Цель: Преобразовать символьную строку в дату.

Аргумент :
<вырC> - символьная строка, состоящая из чисел представляющих
месяц, день и год, отделенных разграничивающим символом (любой
символ, отличный от числа). Когда Вы передаете строку с датой,
CTOD() оценивает подстроки месяца, дня и года, в соответствии с
форматом назначенным командой SET DATE. По умолчанию принимается
американский формат ("мм/дд/гг").

ВЕК. Если для года указано только две цифры, то по умолчанию
используется двадцатый век.

ПУСТАЯ ДАТА. Для указания пустой даты используйте SPACE(8), ""
или " / / ".

Возвращает: Величину типа "дата".

CTOD() очень удобна, когда Вы хотите использовать символьную

- 152 -
строку как дату. Существует множество примеров использования:

* Инициализацию изменяемой в памяти как изменяемой типа "дата".
* Указания символьной строки даты, как аргумента формулировки
RANGE в команде @...GET.
* Указание (специфицирование) символьной строки даты для
выполнения арифметических операций над датами.
* Сравнение результата выражения с датами с символьной строкой
даты.
* Замену поля типа "дата" датой, заданной строкой.

Примеры: charvar = "09/02/88"
? TYPE("charvar") && Результат: C
sdate = CTOD(charvar)
? TYPE("sdate") && Результат: D
SET DATE ANSI
? CTOD("12@12@12") && Результат: 12.12.12
? CTOD("12.12.12") && Результат: 12.12.12
? CTOD("12A12A12") && Результат: 12.12.12
? CTOD("12 12 12") && Результат: 12.12.12
? CTOD(SPACE(8)) && Результат: / /
? CTOD("") && Результат: / /

library: CLIPPER.LIB
Смотри
также:
SET DATE,CDOW(),DOW(),CMONTH(),MONTH(),DAY(),YEAR(),DTOC(),
DTOS(),DATE().


DATE()


Написание: DATE()

Цель: Возвратить системную дату как величину типа "дата".

Возвращает: Величину типа "дата".
DATE() возвращает системную дату в формате, установленном
комбинацией SET DATE и SET CENTURY. По умолчанию принимается
американский стандарт и CENTURY OFF ("мм/дд/гг").

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

Примеры: ? DATE() && Результат: 09/01/88
? DATE()+30 && Результат: 10/01/88
? DATE()-30 && Результат: 08/02/88
datevar = DATE()
? CMONTH(datevar) && Результат: September
*
SET CENTURY ON
SET DATE ANSI
? DATE() && Результат: 1988.09.01


- 153 -
library: CLIPPER.LIB
Смотри
также:
SET CENTURY,SET DATE,CDOW(),DOW(),CMONTH(),MONTH(),DAY(),YEAR(),
CTOD(),DTOC(),DTOS().



DAY()


Написание: DAY(<вырD>)

Цель:
Преобразовать величину типа "дата" в число, обозначающее день
месяца.

Аргументы: <вырD> - преобразовываемая дата.

Возвращает:
Целую числовую величину.
DAY() возвращает число в пределах от 0 до 31, в зависмости от
месяца в указанной дате в <вырD>. Если месяц февраль, то
проверяется високосные года и возвращается число либо 29, либо
28. В Clipperе, если в аргументе стоит дата 29 февраля и год не
високосный, то возвращается ноль. Если в аргументе стоит пустая
дата или аргумент не указан, то DAY() возвращает ноль.

DAY() удобна, когда Вы хотите использовать день месяца в
вычислениях.

Примеры:
? DATE() && Результат: 09/01/88
? DAY(DATE()) && Результат: 1
? DAY(DATE())+1 && Результат: 2
? DAY(CTOD("")) && Результат: 0

library: CLIPPER.LIB
Смотри
также:
CDOW(),DOW(),CMONTH(),MONTH(),YEAR(),CTOD(),DTOC(),DTOS(),
DATE().



DBEDIT()


Написание:
DBEDIT([<вырN1>[,<вырN2>[,<вырN3>[,<вырN4>]]]] [,<массив1>]
[,<вырC>][,<массив2>][,<массив3>][,<массив4>][,<массив5>]
[,<массив6>][,<массив7>] )

Цель:
Отобразить и отредактировать строки из одной или более рабочих
областей, используя редактор c способностью листания, который
выполняется внутри указанного окна.

- 154 -

Аргументы:
<вырN1>,<вырN2>,<вырN3>,<вырN4> - координаты верхнего левого и
правого нижнего углов окна DBEDIT(). Могут быть указаны любой
или все эти аргументы.
<массив1> - массив выражений <вырC>, содержащий названия полей
или выражения любого типа. Если этот аргумент не указан, то
DBEDIT() по умолчанию обрабатывает все поля текущей рабочей
области.
<вырC> - пользовательская функция (FUNC), которая выполняется когда
нажата "исключительная" клавиша. Указывают имя функции без
скобок и аргументов. Отметьте, что поведение DBEDIT() зависит от
наличия этого аргумента. Для получения более подробной
информации смотрите нижеследующие пояснения.
<массив2> - массив выражений <вырC>, используемый для
форматирования колонок со значениями полей посредством образов
строк. При указании <вырC> вместо массива, DBEDIT() форматирует
колонки всех полей по одинаковому образу.
<массив3> - массив выражений <вырC>, используемый для заголовков
колонок.
<массив4> - массив выражений <вырC>, используемый для
прочерчивания линий, отделяющих заголовки и значения полей. При
указании <вырC> вместо массива, DBEDIT() использует для
разделительных линий одинаковые символы.
<массив5> - массив <вырC>, используемый для прочерчивания линий,
отделяющих высвечиваемые колонки значений полей. При указании
<вырC> вместо массива, DBEDIT() использует для разделительных
линий одинаковые символы.
<массив6> - массив выражений <вырC>, используемый для
прочерчивания линий, отделяющих примечания и значения полей. При
указании <вырC> вместо массива, DBEDIT() использует для
разделительных линий одинаковые символы.
<массив7> - массив выражений <вырC>, используемых в качестве
примечаний к колонкам полей. Для увеличения примечания более чем
на одну строку вставьте точку с запятой в том месте, где Вы
хотите сделать пернос строки. При указании <вырC> вместо
массива, для примечаний будет использоватся одна и та же строка.
????????????????????????????????????????????????????????????????
? Отметьте ! Для игнорирования или получения значений по ?
? умолчанию одних параметров при задании значений другим ?
? параметрам DBEDIT(), укажите нулевую строку или переменную ?
? другого типа. Нулевые (пустые) строки убирают заголовки и ?
? примечания к полям. ?
????????????????????????????????????????????????????????????????

Возвращает: Логическую величину.

DBEDIT() дает способность полноэкранного редактирования одного
или более файлов данных. Она форматирует отображение данных на
экран в соответствии с координатами окна и массивом полей. В
DBEDIT() поддерживаются все движения курсора, включая клавиши
PgUp, PgDn, Home, End и все Ctrl-комбинации, которые
осуществляют передвижения курсора. Если указана пользовательская
функция (FUNC), DBEDIT() вызывает и передает ей теккущую моду и текущий
индекс в массиве имен полей. Пользовательская функция (FUNC) должна
обработать моду и величину LASTKEY() для того, чтобы предпринять
соответствующее действие и затем вернуть в DBEDIT() ответную

- 155 -
величину. Кроме того, в DBEDIT() возможно возвратить назначенную
клаыишу, используя KEYBOARD.

Таблица 6-6. Моды DBEDIT().
----------------------------------------------------------------
Мода Описание
----------------------------------------------------------------
0 "Холостая"; была нажата клавиша управления
курсором, а не клавиша действия.
1 Попытка вывести курсор за начало файла.
2 Попытка вывести курсор за конец файла.
3 Файл базы данных пустой.
4 Исключительная клавиша.
----------------------------------------------------------------


Таблица 6-7. Величины, возвращаемые в DBEDIT() из
пользовательской функции.
----------------------------------------------------------------
Величина Описание
----------------------------------------------------------------
0 Закончить и выйти из DBEDIT().
1 Продолжать DBEDIT().
2 Прочесть данные еще раз и продолжать DBEDIT().
----------------------------------------------------------------

Отметьте, что работа DBEDIT() не является состоянием "ожидания"
и таким образом процедура SET KEY не может работать в среде
DBEDIT() до тех пор, пока Вы не организуете свое собственное
состояние ожидания в пользовательской функции.

????????????????????????????????????????????????????????????????
? ВЛОЖЕННОСТЬ. Вы можете вызвать несколько DBEDIT() внутри ?
? каждой функции DBEDIT(), которые позволят Вам сделать ?
? несколько просмотровых окон с режимом листания на экране ?
? одновременно. ?
????????????????????????????????????????????????????????????????

Примеры:
Приведенный ниже пример высвечивает просмотровый экран, который
отображает все поля из файла Sales.dbf. Нажатие клавиши <Return>
при установке курсора на каком-либо значении любого поля
вызывает моду редактирования этого значения поля. Нажатие
клавиши <Esc> заканчивает работу DBEDIT().

USE Sales
DECLARE fields[5]
fields[1] = "Branch"
fields[2] = "Salesman"
fields[3] = "Amount"
*
* Название полей в других рабочих областях должны включать
* синонимы имен.
*
fields[4] = "FILE2 -> City"
fields[5] = "FILE2 -> State"
DBEDIT(4,0,22,79,fields,"UserFunc")

- 156 -
CLEAR ALL
QUIT
*
* Пользовательская функция (FUNC) вызываемая из DBEDIT().
*
FUNCTION UserFunc
PARAMETERS mode,fld_ptr
PRIVATE cur_field
cur_field = fields[fld_ptr]
DO CASE
CASE mode < 4
* Действие может быть выполнено для любой моды.
RETURN 1
CASE LASTKEY() = 27
* Нажата клавиша <Esc>, выполнить выход из DBEDIT().
RETURN 0
CASE LASTKEY() = 13
* Нажата клавиша <Return>, выполнить изменение
* текущего значения поля.
@ ROW(), COL() GET &cur_field
READ
* После этого возвращает клавишу "Стрелка в право" для
* продвижения курсора и продолжает отрабатывать DBEDIT().
* Отметьте, что любая команда управления курсором может
* быть возвращена, "забив" ее в какую-либо клавишу, в
* данном случае <Return>.
KEYBOARD CHR(4)
RETURN 1
OTHERWISE
* Продолжать DBEDIT().
RETURN 1
ENDCASE
RETURN 1

library: EXTEND.LIB
Смотри
также: @...SAY,READ,ACHOICE().



DELETED()


Написание: DELETED()

Цель: Определить помечена ли текушая запись на удаление.

Возвращает: Логическую величину.
DELETED() возвращает истину (.Т.) всякий раз, когда текущая
запись помечена на удаление; в других случаях возвращает ложь
(.F.).

Существует две области, где DELETED() может быть использована
очень эффективно. Первая - опрос статуса удаления строки, как
часть условия на обработку строки. Вторая - отображение статуса
удаления строки привысвечивании на экран или в отчете. Для этого
задайте величину, возврвщаемую из DELETED(), следующим образом:

- 157 -

@ 1, 65 SAY IF (DELETED(), "Inactive", "Active")

Примеры:
USE Sales
? RECNO() && Результат: 1
? DELETED() && Результат: .F.
DELETE
? DELETED() && Результат: .T.
RECALL
? DELETED() && Результат: .F.

library: CLIPPER.LIB
Смотри
также: DELETE,RECALL,SET DELETED,PACK.



DOW()


Написание: DOW(<вырD>)

Цель:
Преобразовать величину типа "дата" в число, обозначающее день
недели.

Аргументы: <вырD> - преобразовываемая дата.

Возвращает: Целую числовую величину.
DOW() возвращает число от 0 до 7. Первый день недели -
воскресенье (число 1); последний - суббота (число 7). Если
<вырD> является пустой датой, то DOW() возвращает ноль.

DOW() удобна в случае, когда Вы хотите выполнить вычисления над
датами в рамках одной недели. Для примера, Вы можете использовать
DOW() для вычисления даты последнего понедельника следующим
образом:

DATE() - DOW(DATE()) + 2

Примеры:
? DATE() && Результат: 09/01/87
? DOW(DATE()) && Результат: 3
? CDOW(DATE()) && Результат: Tuesday
? DOW(DATE() - 2) && Результат: 1
? CDOW(DATE() - 2) && Результат: Sunday

library: CLIPPER.LIB
Смотри
также:
CDOW(),CMONTH(),MONTH(),DAY(),YEAR(),CTOD(),DTOC(),DTOS(),
DATE().


DTOC()
DTOC()

- 158 -

Написание: DTOC(<вырD>)

Цель: Преобразовать дату в символьную строку.

Аргументы: <вырD> - преобразуемая дата.

Возвращает: Символную строку.
DTOC() возвращает символьную строку, представляющую дату в
формате, задаваемом SET DATE и CENTURY (см. в SET DATE
поддерживаемые форматы представления). По умолчанию возвращает
величину в формате "мм/дд/гг". Нулевая дата возвращает величину
из восьми или десяти пробелов, в зависимости от установки
CENTURY (OFF или ON).

DTOC() полезна для целей форматирования, когда Вы хотите
отобразить дату в формате установки SET DATE и необходимо ее
символьное изображение (например в LABEL FORM). Если Вам нужен
специальный формат даты, Вы можете использовать TRANSFORM() или
обычное символьное выражение.
Если Вы индексируете по дате, входящей составной частью в
выражение ключа индексации, используйте DTOS() вместо DTOC().

Примеры:
? DATE() && Результат: 09/01/88
? DTOC(DATE()) && Результат: 09/01/88
? "Сегодня " + DTOC(DATE()) + "." && Результат:
&& Сегодня 09/01/88

library: CLIPPER.LIB
Смотри
также:
SET DATE,SET CENTURY,CDOW(),DOW(),CMONTH(),MONTH(),DAY(),YEAR(),
CTOD(),DTOS(),DATE().



DTOS()


Написание: DTOS(<вырD>)

Цель:
Преобразовать дату в символьную строку, пригодную для
использования, как части сложного ключа индексации.

Аргументы: <вырD> - преобразуемая дата.

Возвращает: Символьную строку.
DTOS() возвращает символьную строку длиной в восемь символов в
формате "ггггммдд". Если дата нулевая, то возвращается строка из
восьми пробелов.

Предназначение DTOS() - предоставить легкость для создания
выражений индексирования, состоящих из дат и символьных
выражений и не зависящих от установок SET DATE и CENTURY,
сохраняя постоянный порядок представления даты (год, месяц,

- 159 -
день).

Примеры:
? DATE() && Результат: 09/01/88
? DTOS(DATE()) && Результат: 19880901
cdate = DTOS(DATE())
? TYPE("cdate") && Результат: C
? LEN(DTOS(CTOD(""))) && Результат: 8

library: CLIPPER.LIB
Смотри
также:
INDEX,CDOW(),DOW(),CMONTH(),MONTH(),DAY(),YEAR(),CTOD(),DTOC(),
DATE().



EMPTY()


Написание: EMPTY(<выр>)

Цель:
Определить является ли результат в выражении <выр> пустым.

Аргументы: <выр> - выражение любого типа.

Возвращает: Логическую величину.
EMPTY() возвращает истину (.Т.) в ссответствии со следующими
критериями, зависящими от типа выражения <выр>:

Таблица 6-8. Список пустых величин различных типов.
----------------------------------------------------------------
Тип данных Содержание
----------------------------------------------------------------
Символный Пусто или все пробелы.
Числовой 0
Логический .F.
----------------------------------------------------------------

Примеры: ? EMPTY(SPACE(0)) && Результат: .T.
? EMPTY("") && Результат: .T.
? EMPTY(0) && Результат: .T.
? EMPTY(CTOD("")) && Результат: .T.
? EMPTY(.F.) && Результат: .T.
*
USE Sales
APPEND BLANK
? EMPTY(Branch) && Результат: .T.

library: CLIPPER.LIB



EOF()



- 160 -
Написание: EOF()

Цель:
Определить, была ли сделана попытка передвинуть указатель строки
за пределы конца файла базы данных.

Возвращает:
EOF() возвращает "истину"(.Т.), когда Вы пытаетесь передвинуть
указатель строки за пределы последней логической строки. Когда
EOF() становится "истину"(.Т.), указатель располагается на
строки с номером LASTREC()+1. Это происходит в случае, когда
либо установлен неактивный фильтр в формулировке SET FILTER,
либо установлено SET DELETED ON. Следующая попытка передвинуть
указатель за LASTREC()+1 вернет такой же результат.
Необходимо отметить, что если текущая база данных не содержит
записей, EOF() возвращает "истину"(.Т.).

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

Примеры: USE Sales
GO BOTTOM
? EOF() && Результат: .F.
SKIP
? EOF() && Результат: .T.

library: CLIPPER.LIB
Смотри
также:
FIND,SEEK,LOCATE,SKIP,BOF(),RECNO(),LASTREC(),FOUND().



EXP()


Написание: EXP(<вырN>)

Цель:
Вычислить е в степени х, где е - основание натурального
логарифма и х - числовой аргумент.

Аргументы: <вырN> - числовая величина.

Возвращает: Числовую величину.
EXP() возвращает величину, которая подчиняется установкам SET
DECIMALS и FIXED.

EXP() является обратной к функции LOG().

Примеры: ? EXP(1) && Результат: 2.72
SET DECIMALS TO 10
? EXP(1) && Результат: 2.7182818285
? LOG(EXP(1)) && Результат: 1.0000000000

library: CLIPPER.LIB

- 161 -
Смотри
также: SET DECIMALS,SET FIXED,LOG().



FCLOSE()


Написание: FCLOSE(<вырN>)

Цель:
Закрыть открытый файл, записывая соответствующие DOS-буферы на
диск.

Аргументы:
<вырN> - системный номер файла (file hendle), полученный ранее
из FOPEN() и FCREATE().

Возвращает: Логическую величину.
FCLOSE() возвращает "ложь"(.F.), если произошла ошибка во время
строки, в других случаях возвращает "истину"(.Т.).

Примеры: handle = FCREATE("Testfile")
FCLOSE(handle)

library: EXTEND.LIB
Смотри
также:
FCREATE(),FERROR(),FOPEN(),FREAD(),FREADSTR(),FSEEK(),FWRITE().
????????????????????????????????????????????????????????????????
? Внимание! Эти функции дают Вам низкоуровневый доступ к ?
? DOS-файлам и устройствам и требуют при использовании особой ?
? аккуратности и достаточного знания операционной системы. ?
????????????????????????????????????????????????????????????????