23 | 06 | 2017

ГЛАВА 5. Команды Clipperа (часть 4)

SET FORMAT

Написание: SET FORMAT TO <procedure>

Использование: Активирование процедуры форматирования экрана, что
позволяет выполнять ее автоматически при каждом исполнении READ.

<procedure> - (.fmt), (.prg)-файлы или имя подпрограммы.

SET FORMAT без аргументов дезактивирует текущий формат.

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

В случае компиляции (.CLP)-файлов с программой, содержащей
форматные ссылки, соответствующие форматные файлы должны иметь
расширение (.prg).

Количество активных форматов не может быть более одного.
Объявления форматов не могут быть вложенными. Clipper игнорирует
SET FORMAT внутри формат-подпрограммы.

Перед выполнением прцедуры экран не очищается. Clipper не
поддерживает многостраничное форматирование.
Пример:
USE Sales
SET FORMAT TO Sales_scr
DO WHILE LASTKEY() <> 27
APPEND BLANK
READ
ENDDO
RETURN

PROCEDURE Sales_scr
CLEAR
@ 12,12 SAY "Branch : " GET Branch
@ 13,14 SAY "Salesman : " GET Salesman
RETURN

library: CLIPPER.LIB

Рекомендовано смотреть: @...SAY...GET, READ.



SET FUNCTION


- 108 -
Написание: SET FUNCTION <expN> TO <expC>

Использование: Ставит в соответствие функциональной клавише строку
символов, которая пересылается в буфер клавиатуры при нажатии
этой клавиши.

<expN> - номер функциональной клавиши.
<expC> - строка символов (до 2000 элементов).

Использование: Пересылаемая в буфер клавиатуры строка может
содержать и контрольные символы (например Ctrl-C для завершения
READ). Следует помнить, что назначения, сделанные SET KEY имеют
более высокий приоритет чем SET FUNCTION.

Команда может использовать функциональные ключи 2-40 (клавиша F1
резервируется для исполнения Help.prg и не может быть
использован командой).

Таблица соответствия между функциональными ключами и реальными
ключами клавиатуры:

Функ. ключ Реальный ключ
----------------------------------------------------------------
1-10 F1-F10
11-20 Shift-F1 - Shift-F10
21-30 Ctrl-F1 - Ctrl-F10
31-40 Alt-F1 - Alt-F10
----------------------------------------------------------------

library: CLIPPER.LIB

Рекомендовано смотреть: SET KEY.



SET INDEX

Написание: SET INDEX TO [<file list>/(<expC1>)...]

Использование: Открывает указанный индекс-файл в текущей рабочей
области.

<file list> - имена одного или более (до 15) индекс-файлов,
открываемых в текущей рабочей области. Элементы списка
разделяются запятыми.

Использование: Расширения файлов по умолчанию назначаются (.ntx)
или (.ndx). Можно указать дисковод и путь доступа. CLOSE INDEX
или SET INDEX TO без аргументов закрывают все индексные файлы,
открытые в текущей рабочей области. В случае, когда в рабочей
области открываются несколько индекс-файлов, то основным,
"контрольным становится первый. Для замены контрольного индекса
необходимо воспользоваться SET ORDER.

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

- 109 -

Пример недопустимого использования макро-изменяемой:

ntx_list = "Name, Account"
SET INDEX TO &ntx_list

Та же ситуация в правильном оформлении:

ntx_1 = "Name"
ntx_2 = "Account"
SET INDEX TO &ntx_1, &ntx_2

Макроподстановки нулевой строки или пробелов игнорируются.

library: CLIPPER.LIB

Рекомендовано смотреть: CLOSE, INDEX, REINDEX, SET ORDER, USE.


SET INTENSITY

Написание: SET INTENSITY ON/off/(<expL>)

Использование: Переключатель цвета GET.
Использование: Если SET INTENSITY OFF - цвет выводимого GET тот
же, что и для SAY. В случае же SET INTENSITY ON (по умолчанию),
для GET используется цвет, определенный во второй паре
аргументов SET COLOR. Необходимо отметить, что SET INTENSITY не
оказывает влияния на другие команды и функции, выводящие
информацию на экран.

library: CLIPPER.LIB

Рекомендовано смотреть: @...SAY...GET, SET COLOR.



SET KEY

Написание: SET KEY <expN> TO [<procedure>]

Использование: Позволяет инициализировать выполнение указанной
процедуры нажатием определенной клавиши.

<expN> - значение, возвращаемое INKEY() для указанного ключа.
(См. в приложении G список значений ключей).
<procedure> - имя процедуры, выполняемой при нажатии
клавиши.Если процедура не указана, то указанный ключ
освобождается от своего назначения.

Использование: SET KEY действует во время пауз, создаваемых
такими командами как: WAIT, READ, ACCEPT, INPUT, MENU TO.
INKEY() к ним не относится. Максимальное количество одновременно
назначенных ключей равно 32. Ключ F1 резервируется системой для
вызова подсказок. В процедуре, вызванной с помощью SET KEY
нельзя использовать CLEAR, READ (для очистки экрана можно
пользоваться @ 0,0 CLEAR. SET KEY имеет перед SET FUNCTION

- 110 -
приоритет в смысле назначения ключей.
library:CLIPPER.LIB

Рекомендовано смотреть: KEYBOARD, SET FUNCTION, LASTKEY().



SET MARGIN

Написание: SET MARGIN TO<expN>

Использование: установка левого поля для всех выводов на принтер.
<expN> - позиция столбца ограничителя.

Использование: SET MARGIN не действует на экранные выводы, но
имеет влияние на все выводы на печать, включая REPORT, LABEL
FORM. По умолчанию левая позиция равна нулю.

Пример:
USE Sales
SET MARGIN TO 5
LIST Branch, Salesman TO PRINT

library: CLIPPER.LIB

Рекомендовано смотреть: @...SAY...GET,SET DEVICE, SET PRINT



SET MESSAGE

Написание: SET MESSAGE TO[<expN>[CENTER]]

Использование: Определение номера строки, в которой будут
индицироваться все сообщения, объявленные для очередного меню
(@...PROMPT...MESSAGE).

<expN> - номер строки. В случае CENTER сообщение будет
отцентрированов в строке, по умолчанию же будет выведено с
нулевой позиции.

Пример:
SET MESSAGE TO 23 CENTER
@ 5, 5 PROMPT "One" MESSAGE "Choice one"
@ 6, 5 PROMPT "Two" MESSAGE "Choice two"
MENU TO choice

library: CLIPPER.LIB

См. также: @...PROMPT,MENU, SET WRAP



SET ORDER

Сиснтаксис: SET ORDER TO [<expN>]


- 111 -
Использование: активировать один из открытых индексных файлов.
<expN> - позиция активируемого индекса в списке открытых
индекс-файлов. Этот номер может иметь значения от 0 до 15.
Исполнение SET ORDER TO 0 вызывает установку изначального
порядка в файле данных (по записям) при открытых индекс-файлах.

Использование: при активации нового индекса все другие
переписываются в случае добавления новых или редактирования
существующих записей.
Пример:

USE Customers
INDEX ON Lastname TO Names
INDEX ON City + State TO Region
SET INDEX TO Names, Region
*
SET ORDER TO 2
? INDEXKEY(INDEXORD()) && Result: City + State
SET ORDER TO 0
? INDEXKEY(INDEXORD()) && Result: null value
SET ORDER TO 1
? INDEXKEY(INDEXORD()) && Result: Lastname

library: CLIPPER.LIB

См. также: INDEX, REINDEX, SET INDEX, USE, INDEXEXT(),
INDEXKEY(), INDEXORD().



SET PATH

Сиснтаксис: SET PATH[<path list>]

Использование: указание транслятору пути доступа к используемым
файлам.

<path list> - определяет путь доступа, которым транслятор будет
пользоваться, если какой-то файл не будет найден в текущей
директории. В случае, если необходимо указать несколько путей
доступа, то их располагают в виде списка, разделяя <,> или <;>.
Команда SET PATH должна полностью умещаться в одной строке.
Использование SET PATH без аргументов разрешает поиск файла
только в текущей директории.

Использование: SET PATH позволяет транслятору иметь доступ к
файлам другой директории или на другом диске. Поиск файла
транслятор начинает с текущего диска и директории, которые
определены ситуацией в момент запуска программы или SET DEFAULT.
В случае неудачи поиск продолжается с использование указанных
путей доступа.
Все это, однако, относится только к поиску уже существующих
файлов. Если же необходимо создать новый файл на другом диске и
директории, необходимо воспользоваться SET DEFAULT TO
<directory> или полностью указывать путь доступа к создаваемому
файлу.
Чтобы настроить скомпилированную программу на определенный путь

- 112 -
доступа во время исполнения необходимо переслать из DOS в
программу путь доступа в виде изменяемой. Для примера, в DOS:

c>SET CLIP_PATH=C:\APPS\DATA,C:\APPS\PROGS

Позднее в исполняемой программе:

path_set = GETE("CLIP_PATH")
SET PATH TO &path_set

library: CLIPPER.LIB

См. также: DIR, SET DEFAULT, FILE()



SET PRINT

Написание: SET PRINT on/OFF(<вырL>)

Переключает режим отображения выхода на принтер для команд,
отличных от @...SAY.

Когда SET PRINT установлен в ON, выход, пересылаемый на принтер,
пересылается также на экран, до тех пор, пока не появится
команда SET CONSOL OFF. Выходы команд @..SAY, тем не менее, не
подчиняется установке SET PRINT ON. Для того, чтобы переслать их
на принтер, используйте команду SET DEVICE TO PRINT.

Отметьте, что такие команды, как REPORT и LABEL FORM, могут
направлять выход на принтер из соответствующей командной строки.
Для того, чтобы подавить тем не менее выход на экран, Вы должны
использовать установку SET CONSOL OFF.

Примеры:
USE Customers
SET PRINT ON
SET CONSOLE OFF
DO WHILE .NOT.EOF()
? Customer
SKIP
ENDDO
EJECT
SET PRINT OFF
SET CONSOLE ON
CLOSE DATABASES
RETURN

library: CLIPPER.LIB
Смотри
также: EJECT,SET CONSOLE,SET DEVICE,SET PRINTER.


SET PRINTER


Написание: SET PRINTER TO [<устройство>/<файл>/(<вырC>)]

- 113 -

Цель: Переопределить направление вывода печати.

<устройство> пересылает вывод печати на сетевое или локальное
устройство. Для некоторых сетей принтером рабочей станции должен
быть предварительно назначен принтер сетевой машины. <файл>
пересылает все выходы печати, включая @...SAY, в файл с
указанным именем. Если Вы не укажете расширения файла, то
Clipper автоматически добавит расширение .prn.

SET PRINTER TO без аргументов закрывает файл вывода печати и
восстанавливает направление вывода печати на устройство,
принимаемое по умолчанию.

Направление вывода печати SET PRINTER TO на несуществующее
устройство создает файл с таким именем.

Устройство по умолчанию - PRN.

Использование:
SET PRINTER направляет вывод печати из любой свянной с печатью
команды на указанное устройство. Именами устройств могут быть
следующие: LPT1, LPT2, LPT3 (все параллельные порты), COM1 и
COM2 (последовательные порты).

????????????????????????????????????????????????????????????????
? ОТМЕТЬТЕ ! При указывании имен устройств необязательно ?
? указывать последний символ имени. ?
????????????????????????????????????????????????????????????????

Эта способность имеет ряд использований:

* Вы можете переходить с одного порта на другой, управляя
несколькими принтерами.

* Вы можете направить вывод печати в файл для дальнейшей
распечатки или передачи удаленному компьютеру посредством
телекоммуникации.

* Вы можете обнулить очередь на печать и восстановить
устройство вывода, принимаемое по умолчанию.

Примеры:
Этот пример направляет вывод печати на LPT1 и обнулить очередь
на печать после выполнения печати:

SET PRINTER TO LPT1
<Печатающие формулировки>
SET PRINTER TO && Обнуление очереди на печать.

Следующий пример пересылает вывод печати в текстовый файл,
переписывая существующий файл:

SET DEVICE TO PRINT
SET PRINT ON
SET PRINTER TO Prnfile.txt
@ 0,0 SAY "Это идет в файл Prnfile.txt"

- 114 -
? "Это будет так!"
SET PRINTER TO && Закрывает файл.
SET DEVICE TO SCREEN
SET PRINT OFF

library: CLIPPER.LIB
Смотри
также: @..SAY,SET DEVICE,SET PRINTER.



SET PROCEDURE


Написание: SET PROCEDURE TO [<файл>]

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

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

Использование:
Файл процедуры может содержать любое количество процедур или
пользовательских функций. Когда Clipper встречает SET PROCEDURE,
он компилирует процедуры и пользовательские функции, находящиеся
в файле.
Команды CLOSE PROCEDURE и SET PROCEDURE TO без аргументов
компилятором игнорируются.

Примеры: SET PROCEDURE TO Strlib
SET PROCEDURE TO Winlib
SET PROCEDURE TO Scrlib
SET PROCEDURE TO Appslib
DO Main
RETURN

library: CLIPPER.LIB
Смотри
также: DO,FUNCTION,PROCEDURE,RETURN.



SET RELATION


Написание:
SET RELATION TO [<ключ.выр>/<RECNO()>/<вырN1> INTO <синоним1>]
[,TO <ключ.выр>/<RECNO()>/<вырN2> INTO <синоним2>]...

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

Аргументы:

- 115 -
<ключ.выр> - выражение, используемое для осуществления поиска в
дочерней рабочей области всякий раз, когда указатель строки
перемещается по родительской рабочей области. Для того, чтобы
это работало, дочерняя рабочая область должна содержать указание
индекса в команде USE.
RECNO() связывает родительскую и дочернюю рабочие области,
используя родительский номер строки для того, чтобы выполнить
переход по команде GOTO на такую же запись в дочерней рабочей
области всякий раз когда указатель строки перемещается в
родительской рабочей области. Для того, чтобы этот тип связи
выполнялся корректно, рекоменуется чтобы дочерняя рабочая
область не содержала указание индекса в команде USE. <вырN> -
выражение, используемое для выполнения команды перехода GOTO на
соответствующую запись в дочерней рабочей области всякий раз
когда указатель строки перемещается в родительской рабочей
 области. Для того, не можете связать файл базы данных ни прямо, ни
косвенно с самим собою.

Использование:
Связь, определенная командой SET RELATION TO заставляет
перемещаться указатель строки в дочерней рабочей области в
соответствии с перемещением указателя строки в родительской
рабочей области. Если в дочерней рабочей области соответствие не
найдено, то ее указатель строки устанавливается в положение
LASTREC()+1, при этом функция (FUNC) EOF() возвращает "истину"(.T.), а
FOUND() возвращает "ложь"(.F.).
????????????????????????????????????????????????????????????????
? ОТМЕТЬТЕ, что SET RELATION не подчиняется установке SOFTSEEK ?
? и ведет себя так, как будто SOFTSEEK установлен OFF. Если в ?
? дочерней рабочей области не найдено соответствия, то ?
? указатель строки устанавливается в позицию LASTREC()+1. ?
????????????????????????????????????????????????????????????????

Примеры:
В следующем ниже примере связываются три рабочих области в
единую конфигурацию, состоящую Customers, связанной с Invoices
и Zip.

SELECT 0
area = SELECT()
SELECT (area + 1)
USE Invoices INDEX Invoices
SELECT (area + 2)
USE Zip INDEX Zipcode
SELECT (area)
USE Customers
SET RELATION TO Customers INTO Invoices, TO Zipcode INTO Zip

- 116 -
*
LIST Customer,Street,Zip->City,Invoices->Number,;
Invoices->Amount

library: CLIPPER.LIB
Смотри
также: INDEX,REPLACE,SET INDEX,SER ORDER,UPDATE,USE.



SET SCOREBOARD


Написание: SET SCOREBOARD ON/off/(<вырL>)

Цель:
Переключить режим отображения сообщений во время выполнения
команд READ и MEMOEDIT() в состояния ON или off.

Использование:
Когда указатель SCOREBOARD установлен в ON, сообщения
высвечиваются на строке 0. Они появляются при ошибках в
формулировке RANGE, при сообщении о прекращении выполнения
запроса в MEMOEDIT() и при сообщении, указывающем о включении
режима вставки как внутри MEMOEDIT(), так и для READ.

library: CLIPPER.LIB



SET SOFTSEEK


Написание: SET SOFTSEEK on/OFF/(<вырL>)

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

Использование:
Если SOFTSEEK установлен в ON и аргументу, указанному в команде
SEEK, не найдено соответствия, указатель строки устанавливается
на следующей строки индексного файла, в которой значение
ключевой величины больше указанного в аргументе на поиск. Если
нет ни одной строки с большим значением ключевой величины, то
указатель строки устанавливается в положение LASTREC()+1, при
этом EOF() возвращает "истсну"(.T.), а FOUND() возвращает "ложь"
(.F.).

Если SOFTSEEK установлен в OFF и SEEK отработала неудачно, то
указатель устанавливается в положение LASTREC()+1, EOF()
возвращает "истину"(.T.), а FOUND() - "ложь"(.F.).

Отметьте, что переключение SET EXACT не действует на выполнение
команды SEEK, если SOFTSEEK установлен в ON. Отметьте также, что
SET RELATION игнорирует установку SOFTSEEK и таким образом
обновляет положение указателя строки в дочерней рабочей области,

- 117 -
как если бы SOFTSEEK была установлена в OFF.

Примеры: SET SOFTSEEK ON
SEEK "Findit"
IF FOUND()
? "Найдена запись ",RECNO()
ELSE
? "Запись не найдена."
? EOF()
? RECNO()
ENDIF

library: CLIPPER.LIB
Смотри
также: INDEX,SEEK,SET EXACT,SET RELATION.



SET TYPEAHEAD


Написание: SET TYPEAHEAD TO <вырN>

Цель: Установить размер буфера клавиатуры.

Аргументы:
<вырN> - определяет количество символов, которое может содержать
буфер клавиатуры. Это может быть число от 0 до 32768.

Отметьте, что устанавка размера буфера клавиатуры 0 может лишить
Вас возможности работы с комбинациями Alt-C и Alt-D, которые
бывают полезны при выполнении больших циклов обработки.

library: CLIPPER.LIB
Смотри
также: ACCEPT,INPUT,KEYBOARD,READ,SET KEY,LASTKEY().



SET UNIQUE


Написание: SET UNIQUE on/OFF/(<вырL>)

Цель:
Переключить режим включения записей с неуникальными ключами в
индексные файлы при добавлении записей или при создании новых
индексных файлов.

Использование:
Когда Вы создаете или обновляете индексный файл с установкой SET
UNIQUE ON и две или более записей содержат одну и ту же ключевую
величину, Clipper включает в индекс только первую запись.

Отметьте, что SET UNIQUE в Clipperе является глобальной
установкой и не связана ни с каким индексным файлом. Поэтому
переиндексация посредством REINDEX при установке UNIQUE ON

- 118 -
удаляет неуникальные ключи во всех индексных файлах в текущей
рабочей области. По этой причине использование данной установки
требует большой аккуратности.

Примеры:
Следующий пример перечисляет всех покупателей штата:
SET UNIQUE OFF
USE Customers
INDEX ON State + Customer TO State
LIST State, Customer

Этот пример перечисляет все штаты, в которых зарегистрированы
покупатели:

SET UNIQUE OFF
USE Customers INDEX ON State TO State
LIST State

library: CLIPPER.LIB
Смотри
также: FIND,INDEX,REINDEX,SEEK,SET INDEX,USE.



SET WRAP


Написание: SET WRAP on/OFF/(<вырL>)

Цель: Включить режим кругового перемещения по меню.

Использование:
Когда WRAP установлен в ON и высвечивается последняя строка
меню, клавиши Стрелка-вверх/Стрелка-вниз перемещает курсор на
первую строку. Если высвечивается первая строка меню, клавиши
Стрелка-вверх/Стрелка-вниз перемещает курсор на последнюю
строку.

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



SKIP


Написание: SKIP <вырN1> [ALIAS <раб.обл.>/<синоним>/(<вырN2>)]

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

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

- 119 -
число перемещает указатель вниз по файлу, отрицательная - вверх
по файлу. Нулевой аргумент записывает буфер текущей рабочей
области в DOS-буфер.

Опция: ALIAS.
Формулировка ALIAS перемещает указатель строки в указанной
рабочей области вместо текущей.

Использование:
SKIP без числового аргумента перемещает указатель на следующую
запись. Перемещение указателя вверх за пределы начала файла,
устанавливает указатель на первую запись, при этом функция (FUNC) BOF()
возвращает "истину"(.T.). Перемещение указателя вниз за пределы
последней строки устанавливает указатель в позицию LASTREC()+1,
а EOF() возвращает "истину"(.T.).

Если используется индексный файл, SKIP перемещает указатель на
указанное количество записей по определенному индексу.

Запись внутренних буферов Clipperа на диск

Любая команда, требующая прочтения строки во внутрение буферы
Clipperа, выполняет запись текущего содержимого буфера файла
базы данных в DOS-буфер, если в содержимом буфера были сделаны
какие-либо изменения, начиная с момента прочтения строки с
диска. SKIP 0 может быть использован для строки текущего
содержимого буфера файла базы данных без считывания новой
строки. Отметьте, что конкретное время строки информации на диск
зависит от версии DOS, если Вы не использовали команду COMMIT
для того, чтобы инициировать фактическую запись на диск. SKIP 0
сам по себе не необязательно вызывает запись на диск. Отметьте,
что команда не записывает буферы индексов.

Примеры:
USE Customers
? RECNO() && Результат: 1
SKIP
? RECNO() && Результат: 2
SKIP 10
? RECNO() && Результат: 12
SKIP -5
? RECNO() && Результат: 7
SKIP -10
? RECNO() && Результат: 1

Следующий пример перемещает указатель строки в другой рабочей
области:

SKIP ALIAS 4

Это то же самое, что и

SELECT 4
SKIP
SELECT 1

library: CLIPPER.LIB

- 120 -
Смотри
также: COMMIT,CONTINUE,GOTO,FIND,LOCATE,SEEK,BOF(),EOF(),RECNO()



SORT

Написание:
SORT [<обл.опр.>] ON <поле1> [/A][/C][/D] [,<поле2>[/A][/C]
[/D]]... TO <файл>/(<вырC>) [FOR <условие>] [WHILE
<условие>]

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

Аргументы:
<поле1>...<полеN> - поля, используемые как ключи сортировки.
Отметьте, что SORT не работает с ключами, состоящими из подстрок
и выражений.
<файл> - имя получаемого файла с отсортированными записями. По
умолчанию новому файлу назначается расширение .dbf, если не
указано другого.

Опции: ПОРЯДОК СОРТИРОВКИ
SORT поддерживает три опции сортировки:
* /A сортирует в возростающем порядке.
* /C сортирует в убывающем порядке.
* /D сортирует, игнорируя строки с указанным символьным полем.
Если ничего не указано, то по умолчанию принимается /А.

ОБЛАСТЬ ОПРЕДЕЛЕНИЯ.
<обл.опр.> - порция записей текущего файла базы данных,
предназначенная для сортировки SORT. По умолчанию принимается
значение ALL.

УСЛОВИЕ.
Формулировка FOR назначает условие, которому должен
удовлетворять набор записей из области определения,
предназначенный для сортировки SORT. Условие WHILE определяет
набор записей из области определения, отвечающих указанному
условию, начиная с текущей строки и кончая записью, в которой
указанное условие не выполняется.

Использование:
Clipper сортирует символьные поля по величинам ASCII-кодов
каждого символа в строке. Числовые поля сортируются в числовом
порядке, а поля типа "дата" в хронологическом. Логические и
мемо-поля не могут быть отсортированны.

SORT выполняет максимальное количество операций, на сколько это
возможно, в оперативной памяти и затем он сбрасывает
промежуточный результат во временный файл Clipsort.tmp. Этот
временный файл может быть по размеру таким же как и исходный
файл базы данных. Отметьте, что SORT использует до трех
системных номеров (file handle) одновременно: исходного файла
базы данных, получаемого файла базы данных и временного файла.

- 121 -

УДАЛЯЕМЫЕ ИСХОДНЫЕ ЗАПИСИ.
SORT копирует удаляемые строки в получаемый файл базы данных и
сохраняет для них статус удаления.

Сети:
В сетевой среде сортируемый файл базы данных должен быть
залокирован, что может быть выполнено посредством команд FLOCK()
или USE EXCLUSIVE.

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



STORE


Написание: STORE <выр> TO <перечень перем.>/<перем>=<выр>

Цель:
Инициализировать и/или назначить одной или более переменным
указанную величину.

Аргументы:
<выр> - величина любого типа, которая назначается получаемым
переменным.
<перечень перем> - переменные, которые инициализируются и/или
которым назначается указанная величина. Имена переменных могут
быть длиной до 10 символов и содержать буквы, числа и
подчеркивания (_). Первым символом, тем не менее, должна быть
буква.

Использование:
STORE и содает и назначает величину изменяемой. В отличии от
других языков программирования, описание типа необязательно.
Clipper автоматически назначает тип данных, в зависимости от
величины, которая назначается изменяемой. Если переменная до
инициализации не была объявлена глобальной посредством PUBLIC,
она автоматически подразумевается частной. Частная переменная
становится неопределенной после того, как процедура ее
инициализировавшая закончена командой RETURN. Команды RELEASE,
CLEAR MEMORY и CLEAR ALL также делают неопределенными
переменные.
Поля и переменные могут иметь одинаковые имена. Когда возникает
конфликтная ситуация с именами, преимущество имеют имена полей,
если переменная определена без синонима изменяемой M-><перем>
или если Вы скомпилировали Вашу программу без опции (-v). Опция
(-v) изменяет это таким образом, что преимущество дается
переменным перед полями.
В Clipperе одновременно может быть максимум 2048 переменных.
Массивы считаются как одна переменная, которая может содержать
до 2048 элементов.
Использование мемо-поля какой-либо несуществующей изменяемой
создает переменную символьного типа.


- 122 -
Примеры:
STORE "строка" TO var1,var2,var3
var1 = "строка2"
var2 = M->var1

library: CLIPPER.LIB
Смотри
также: CLEAR MEMORY,PRIVATE,RUBLIC,RELEASE,RESTORE,SAVE.



SUM

Написание: SUM [<обл.опр.>] <перечень вырН> TO <перечень перем.>
[FOR <условие>][WHILE <условие>]

Цель:
Суммировать ряд числовых выражений в переменные для совкупности
записей из текущей рабочей области.

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

Опции: ОБЛАСТЬ ОПРЕДЕЛЕНИЯ.
<обл.опр.> - порция записей текущего файла базы данных, для
которых осуществляется суммирование. По умолчанию принимается
ALL и обрабатываются все строки.

УСЛОВИЕ.
Формулировка FOR назначает условие, которому должен
удовлетворять набор записей из области определения,
предназначенный для суммирования. Условие WHILE определяет набор
записей из области определения, отвечающих указанному условию,
начиная с текущей строки и кончая записью, в которой указанное
условие не выполняется.

Примеры: USE Sales
SUM Amount+10, Amount TO sum1,sum2
? sum1 && Результат: 250
? sum2 && Результат: 150

library: CLIPPER.LIB
Смотри
также: AVERAGE,TOTAL.



TEXT


Написание: TEXT [TO PRINT] [TO FILE <файл>]
<текст>

- 123 -
ENDTEXT

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

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

Опции: PRINT.
Опция ТO PRINT вызывает еще отображение на принтер.

FILE.
Опция TO FILE вызывает еще отображение вывода в
указанный файл. Если не указанно расширение файла, то
принимается расширение .txt.

Использование:
Макропеременные, найденные внутри TEXT...ENDTEXT, раскрываются.
Отметьте, что TEXT...ENDTEXT, тем не менее, не имеет возможности
переноса слов. Текст отображается точно так, как был введен.

Примеры: name = "Агнесса"
*
TEXT
Дорогая &name !
Рад буду видеть тебя в понедельник в 3:15.

Преданный тебе Эдгар.
ENDTEXT

Результат:

Дорогая Агнесса !
Рад буду видеть тебя в понедельник в 3:15.

Преданный тебе Эдгар.

library: CLIPPER.LIB
Смотри
также: ?/??,@...SAY,MLCOUNT(),MEMOLINE().



TOTAL


Написание:
TOTAL ON <ключ.выр> [<обл.опр.>] [FIELDS <перечень полей>]
TO <файл>/(<вырC>) [FOR <условие>] [WHILE <условие>]

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


- 124 -
Аргументы:
<ключ.выр> - определяет группу записей, которые производят новую
запись в принимающем файле базы данных. Для безошибочного
выполнения операции суммирования, исхолный файл базы данных
должен быть проиндексирован INDEX или отсортирован SORT по
ключевым выражениям TOTAL.
<файл> - имя принимающего файла, в который копируются суммарные
строки. Если расширение файла не указано, то TOTAL добавляет
.dbf.

Опции:
????????????????????????????????????????????????????????????????
? FIELDS. Опция FIELDS указывает перечень числовых полей для ?
? команды TOTAL. Если опция FIELDS не указана, то ?
? обрабатываются не числовые поля. В каждом числовом поле ?
? принимающего файла содержится величина из первой строки, ?
? соответствующей ключевому выражению. ?
????????????????????????????????????????????????????????????????

ОБЛАСТЬ ОПРЕДЕЛЕНИЯ.
<обл.опр.> - порция записей текущего файла базы данных, для
которых осуществляется суммирование. По умолчанию принимается
ALL и обрабатываются все строки.

УСЛОВИЕ.
Формулировка FOR назначает условие, которому должен
удовлетворять набор записей из области определения,
предназначенный для суммирования. Условие WHILE определяет набор
записей из области определения, отвечающих указанному условию,
начиная с текущей строки и кончая записью, в которой указанное
условие не выполняется.

Использование:
В Clipperе ТOTAL имеет две разновидности, в зависимости от
наличия опции FIELDS. Если опция FIELDS указана, то TOTAL
суммирует указанные числовые поля в конечный файл, выделяя
строки по ключевому выражению. Если тем не менее, опция FIELDS
не указана, то TOTAL копирует в конечный файл только строки,
содержащие уникальные ключи. В такой формулировке Вы можете
пропустить строки с повторяющимися ключевыми выражениями.

Структура конечного файла базы данных, который создает Clipper,
идентична исходному файлу за исключением того, что не копируются
мемо-поля. Отметьте, что для того, чтобы TOTAL выполнилась
успешно с числовыми полями, длина исходных числовых полей должна
быть достаточной для размещения наибольшей возможной суммы.

Примеры: USE Sales
? LASTREC() && Результат: 84
TOTAL ON Branch + Salesman FIELDS Amount TO Summary

USE Summary
? LASTREC() && Результат: 5

library: CLIPPER.LIB
Смотри
также: AVERAGE,SUM.

- 125 -



TYPE


Написание: TYPE <файл1>.<расширение> [TO PRINT] [TO FILE <файл2>]

Цель:
Высветить содержимое текстового файла на экран, еще
отображая экран на принтере и/или в другой текстовый файл.

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

Опции: PRINT.
Опция TO PRINT отображает экран на принтер.

FILE.
Опция TO FILE отображает экран в указанный <файл2>. Если не
указано расширение, то по умолчанию принимается .txt.

Использование:
Для приостановки выдачи на экран используйте комбинацию Ctrl-S.
Отметьте, что Вы не можете прервать выдачу клавишей Esc.

Примеры: TYPE Main.prg TO PRINT

library: CLIPPER.LIB
Смотри
также: COPY FILE.



UNLOCK


Написание: UNLOCK [ALL]

Цель: Снять локирование файла или строки.

Опции: ALL.
Опция АLL разлокирует все залокированные на текущий момент
файлы/строки во всех рабочих областях. Если не указана, то
разлокируется только текущая рабочая область.

Примеры:
Смотрите главу 10 "Использование Clipperа в Локальной Сети" для
получения более подробной информации.

library: CLIPPER.LIB
Смотри
также: SET EXCLUSIVE,USE...EXCLUSIVE,FLOCK(),RLOCK().



UPDATE


- 126 -

Написание:
UPDATE ON <ключ.выр> FROM <синоним> REPLACE <поле1> WITH <выр1>
[,<поле2> WITH <выр2>]...[RANDOM]

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

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

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

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

СВЯЗИ МЕЖДУ РАБОЧИМИ ПОЛЯМИ.
UPDATE поддерживает как "один-с-одним" так и "один-со-многими"
связи между принимающей и исходными рабочими областями. Она, тем
не менее, не поддерживает связи типа "многие-со-многими" и
"многие-с-одним". Все исходные строки, соответсвующие <ключевому
выражению>, обновляют только первую встреченую из
соответствующих принимающих записей.

ТИПЫ ЗАМЕЩЕНИЙ.
Когда Вы обновляете, выражение REPLACE определяет тип
обновления, выполняемого в принимающем поле. Если UPDATE
выполняет суммирование к принимающему полю, формулмровка будет:

REPLACE <поле> WITH <поле>+<вырЧ>

Точно так же, если UPDATE выполняет вычитание из принимающего
поля, формулмровка будет:

REPLACE <поле> WITH <поле>+<вырЧ>

УДАЛЯЕМЫЕ ЗАПИСИ.
Когда SET DELETED установлен в ON, обновляются все принимающие

- 127 -
строки, включая удаляемые. Тем не менее, удаляемые исходные
строки игнорируются.

Сети:
Для того, чтобы выполнить UPDATE в сетевой среде, принимающий
файл базы данных должен быть локирован посредством FLOCK() или
USE EXCLUSIVE. Исходный файл может быть как открытым в
исключительном режиме USE EXCLUSIVE, так и общедоступным.

Примеры: USE Customers INDEX Customers
SELECT B
USE Invoices
SELECT Customers
*
UPDATE FROM Invoices RANDOM ON Last REPLACE Owed;
WITH Owed+Invoices->Amount

library: CLIPPER.LIB
Смотри
также: APPEND,REPLACE,SET UNIQUE.



USE

Написание: USE [<файл>/(<вырС>)] [INDEX <список файлов>/(<вырС>)
[,(<вырС>)]...] [EXCLUSIVE] [ALIAS <синоним>/(<вырС>)]

Цель:
Открыть существующий файл базы данных (.dbf), связанный с ним
мемо-файл (.dbt) и, если необходимо, индексные файлы в текущей
рабочей области.

Аргументы: <файл> - имя открываемого файла базы данных.

Опции: INDEX.
Опция INDEX <список файлов> указывает имена максимум 15
индексных файлов, которые могут быть одновременно открыты в
текущей рабочей области.

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

EXCLUSIVE.
Опция EXCLUSIVE открывает файл базы данных в исключительном
режиме, т.е. файл становится не доступным для других
пользователей в сетевой среде. Файл является недоступным до тех
пор, пока файл базы данных не будет закрыт посредством CLOSE.

Использование:
Когда файл базы данных открыт, указатель строки установлен на
первой логической строки файла (первая запись, если при открытии
не указан индексный файл).
USE без аргументов закрывает активный файл базы данных, связнный
с ним индексный файл и мемо-файл в текущей рабочей области.

- 128 -

Примеры: USE Accounts EXCLUSIVE
IF NETERR() && USE не удачна
? "Файл Accounts не доступен."
ELSE
SET INDEX TO Acct_ID
ENDIF

Для получения более подробной информации обращайтесь к главе 10
"Использование Clipperа в Локальной Сети".

library: CLIPPER.LIB
Смотри
также: CLOSE,INDEX,SELECT,SET INDEX.



WAIT


Написание: WAIT [<приглашение>] [TO <перемС>]

Цель:
Приостановить выполнение программы после высвечивания
приглашения и ожидать нажатия клавиши.

Опции: PROMPT.
<приглашение> - символьная строка, которую может высветить WAIT.
Если не указано, то приглашение по умолчанию - "Press any key to
continue...".

ПЕРМЕННАЯ.
Опция TO создает указанную переменную <перемC>, которая после
отработки WAIT содержит введенный символ.

Использование:
WAIT возвращает введенный символ, содержащийся в указанной
изменяемой. Если введен непечатный символ, WAIT возвращает ноль
в символьной величине. Если не указаны SET FUNCTION и SET KEY,
то нажатие функциональных клавиш игнорируется.

Примеры: WAIT "Нажмите клавишу .." TO key

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



ZAP


Написание: ZAP

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

Использование:

- 129 -
ZAP выполняет то же самое, что и комбинация команд DELETE ALL и
PACK, но работает гораздо быстрее. Индексные и мемо-файлы также
удаляются.

Примеры: USE Sales
? LASTREC() && Результат: 84
COPY TO Archive
ZAP
? LASTREC() && Результат: 0

Сети:
Для удаления в сетевой среде, текущий файл базы данных должен
быть открыт в исключительном режиме USE EXCLUSIVE.

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

 - 130 -