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

CANCEL / QUIT

Написание: CANCEL / QUIT

Прекращает работу программы, закрывает все открытые файлы и
возвращает управление в DOS. CANCEL или QUIT можно использовать
в любом месте программы для прекращения работы и возврата в DOS.
Выполнение команды RETURN в процедуре наивысшего уровня
производит те же действия.

Library: CLIPPER.LIB


См. также: QUIT,RETURN

CLEAR


Написание: CLEAR

Очищает экран, очищает ждущие обработки GETы и ставит курсор в
исходное положение (строка 0, столбец 0).

Если Вы редактируете GETы, не ставьте CLEAR в текст процедур,
вызываемых через SET KEY либо VALID, поскольку она удалит все
еще не обработанные GETы. Для очистки экрана без порчи GETов
используйте @0,0 CLEAR.


library: CLIPPER.LIB

См. также: @...CLEAR,CLEAR GETS




CLEAR ALL


Написание: CLEAR ALL

Закрывает все открытые файлы БД (и связанные с ними файлы
индексов, форматов и мемо), удаляет все переменные и переходит в
рабочую область No 1.

library: CLIPPER.LIB

- 57 -

См. также: CLEAR MEMORY,CLOSE,RELEASE

CLEAR GETS


Написание: CLEAR GETS

Удаляет все необработанные GETы.


library: CLIPPER.LIB

См. также: @...CLEAR,CLEAR



CLEAR MEMORY


Написание: CLEAR MEMORY

Удаляет все глобальные и локальные переменные. Используется,
когда Вы хотите удалить как те, так и другие переменные, в
отличие от RELEASE ALL, которая удаляет только локальные
переменные, определенные в текущей процедуре.

Пример: PUBLIC var
var=SPACE(10)
?TYPE("var") && результат: C
CLEAR MEMORY
?TYPE("var") && результат: U

library: CLIPPER.LIB

См. также: CLEAR ALL,RELEASE ALL



CLEAR TYPEAHEAD


Написание: CLEAR TYPEAHEAD

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


library: CLIPPER.LIB

См. также: KEYBOARD,SET TYPEAHEAD,ACHOICE(),DBEDIT(),
LASTKEY(),NEXTKEY()


- 58 -

CLOSE


Написание: CLOSE ALL/ALTERNATE/DATABASES/FORMAT/INDEX

Закрывает указанные классы файлов.

ALL: - закрывает все файлы БД, альтернативные и индексные во
всех рабочих областях. Кроме того, выключает все активные
фильтры, отношения и форматы.

ALTERNATE: - закрывает открытый текущий альтернативный файл, но
не удаляет имя альтернативного файла, установленное командой SET
ALTERNATE TO <имя файла>. Команда SET ALTERNATE TO без аргумента
также закрывает альтернативный файл.

DATABASES: - закрывает все открытые файлы БД и связанные с ними
индексы во всех рабочих областях и выключает все активные
фильтры. На активный формат никакого влияния не оказывает.

FORMAT: - выключает текущий формат, выполняя те же действия, что
и команда SET FORMAT TO без аргумента.

INDEX: - закрывает все индексные файлы, открытые в текущей
рабочей области.

Многие другие команды Clipperа также закрывают файлы. Среди них :


QUIT
CANCEL
RETURN (из процедуры высшего уровня)
CLEAR ALL
USE (без аргумента)

Clipper также закрывает файлы при обработке ошибок исполнения
программы. Когда Вы прекращаете работу программы в ответ на
сообщение об ошибке, то файлы закрываются при следующих ответах:

- "Q" (QUIT) в ответ на предложение (Q/A/I);

- "N" в ответ на вопрос "Continue?" (продолжить?);

При этом закрываются все файлы и происходит возврат в DOS.


library: CLIPPER.LIB

См. также: CANCEL, CLEAR ALL, CLEAR MEMORY, QUIT, RETURN, SET
ALTERNATE TO, USE

COMMIT


Написание: COMMIT


- 59 -
Выполняет запись на диск для всех рабочих областей. COMMIT
"выталкивает" все буферы Clipperа в DOS не дожидаясь их
выполнения и, затем, записывает их на диск.
Требует использования DOS 3.3 и выше.

Пример: CLEAR
USE Dbf
FOR i=1 to 10
APPEND BLANK
REPLACE Fld1 with i
COMMIT && запись буфера на диск
NEXT

library: CLIPPER.LIB

См. также: SKIP


CONTINUE

Написание: CONTINUE

Продолжает поиск, начатый по команде LOCATE, в текущей рабочей
области.

CONTINUE ищет, начиная с текущей строки, следующую запись,
удовлетворяющую условию последней выполняемой в данной рабочей
области команды LOCATE. Поиск прекращаетя, когда найдена искомая
запись или достигнут конец области поиска, определенной в
LOCATE.
Если запись найдена, то она становится текущей и функция (FUNC) FOUND()
возвращает истину (.T.). Если она не найдена, то FOUND() всегда
возвращает ложь (.F.), а положение указателя текущей строки
зависит от указания области определения в LOCATE.
Каждая рабочая область может иметь такое активное условие
поиска. В Clipperе условие для LOCATE остается в силе, пока не
будет указано новое. Никакие другие команды не снимают это
условие.

Пример: USE Sales
? LASTREC() && результат : 6
LOCATE FOR Salesman = "1002"
? FOUND(), RECNO(), EOF() && .T. 3 .F.
CONTINUE
? FOUND(), RECNO(), EOF() && .T. 4 .F.
CONTINUE
? FOUND(), RECNO(), EOF() && .F. 6 .T.
library: CLIPPER.LIB

См. также: LOCATE,FOUND()


COPY


Написание: COPY TO <файл>/(<вырС1>)[<обл.опр.>]
[FIELDS<список полей>][FOR<условие>]

- 60 -
[WHILE<условие>][SDF/DELIMITED/
DELIMITED WITH<ограничитель>/(<вырС2>)]

Копирует весь или часть текущего файла БД в новый файл.

<файл> - имя нового файла. Если тип файла не указан, то, по
умолчанию, тип будет (.dbf) и добавлять расширение не нужно.
Если тип создаваемого файла указан,то расширение предполагается
(.txt), если не указано иначе.

FIELDS: - определяет список полей, подлежащих копированию в
целевой файл. По умолчанию все поля.

<обл.опр.> - часть текущего файла, из которой нужно копировать.
По умолчанию весь файл (ALL).

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

SDF: - указывает, что тип выходного файла - ASCII-файл
системного формата данных. Записи фиксированной длины, каждая
отделена парой символов возврат каретки/перевод строки. Поля -
фиксированной длины и не имеют разделителей. Символьные поля
дополняются замыкающими пробелами, поля даты записываются в
форме "ггггммдд" и логические поля в форме T/F. Признак конца
файла - Ctrl-Z (шестнадцатеричное 1A).

DELIMITED: - определяет тип выходного файла как ASCII-файл с
ограничителями. Записи изменяемой длины, каждая отделена парой
возврат каретки/перевод строки. Поля изменяемой длины и
разделены запятыми. Символьные поля охвачены ограничителями (по
умолчанию - двойными кавычками, если Вы не указали другой
символ, используя опцию WITH). Начальные и замыкающие пробелы в
числовых и символьных полях обрезаются, поля даты записываются в
форме "ггггммдд" и логические поля в форме T/F. Признак конца
файла - Ctrl-Z (шестнадцатеричное 1A).

Примечание: Опции типов DELIMITED WITH BLANK,DIF,SYLK и WKS
с ключевым словом TYPE не поддержаны (в отличие
от DBASE).
Копируются все строки, содержащиеся в активном
файле БД и соответствующие области определения
и условиям FOR и WHILE.

Пример: Демонстрация копирования в другой (.dbf) файл.
USE Sales
?LASTREC() && результат: 84
COPY TO Temp
USE Temp
?LASTREC() && результат: 84

В следующих примерах используется файл Testdata.dbf, имеющий
четыре поля, по одному на каждый тип данных. Char, Num, Date,
Logical. Файл содержит следующие данные:


- 61 -
USE Testdata
?Char,Num,Date,Logical

Результат:
Character 12.00 08/01/87 .T.

Пример копирования в SDF-файл:
COPY NEXT 1 TO Temp SDF
TYPE Temp.txt
Результат:
Character 12.0019870801T

Пример копирования в файл с ограничителями:
COPY NEXT 1 TO Temp DELIMITED
TYPE Temp.txt
Результат:
"Character",12.00,19870801,T

Пример копирования в файл с нестандартными ограничителями:
COPY NEXT 1 TO Temp DELIMITED WITH '
TYPE Temp.txt
Результат:
'Character',12.00,19870801,T

Работа в сети: Когда Вы копируете при работе в сети, Clipper
открывает файл целевой БД в монопольном режиме.

library: CLIPPER.LIB

См. также: APPEND FROM,COPY FILE,COPY STRUCTURE,SET DELETED


COPY FILE


Написание: COPY FILE <файл1>.<расш.>/(<вырС2>)
TO <файл2>.<расш.>/(<вырС2>)

<файл1> - имя файла-источника.

<файл2> - имя целевого файла.

Расширения обязательны в обоих случаях.

Команда COPY FILE копирует файлы любого типа с текущего диска и
директория Clipperа.

Пример: COPY FILE Test.prg TO Real.prg
?FILE("Real.prg") && результат .T.


library: CLIPPER.LIB

См. также: CLOSE,COPY,SET DEFAULT,USE




- 62 -
COPY STRUCTURE


Написание: COPY STRUCTURE TO <файл>/(<вырС>)
[FIELDS<список полей>]

Создает пустой файл БД, с определениями полей, взятыми из
текущего файла БД.

<файл> - имя целевого файла. Расширение по умолчанию - .dbf.

FIELDS: <список полей> - это множество полей, подлежащих
копированию в новую структуру, в перечисленном порядке. По
умолчанию, копируются все поля.

Пример: USE Sales
?LASTREC() && результат: 84
*
COPY STRUCTURE FIELDS Branch,Salesman TO Temp
USE Temp
?LASTREC() && результат: 0


library: CLIPPER.LIB

См. также: COPY STRUCTURE EXTENDED,CREATE


COPY STRUCTURE EXTENDED


Написание: COPY TO <файл>/(<вырС>) STRUCTURE EXTENDED
[FIELDS <список полей>]

Создает файл БД, чьим содержимым являются определения полей
текущего файла.

<файл> - имя файла расширенной структуры.

FIELDS: <список полей> - одно или больше полей в текущем файле
БД, Чьи определения появятся, в виде записей, в новом файле БД,
в перечисленном здесь порядке.

Команда COPY STRUCTURE EXTENDED создает файл БД с четырьмя
полями: Field_name, Field_type, Field_len и Field_dec. В
результате, созданный файл содержит по одной строки на каждое
поле исходного файла (или на каждое поле, перечисленное в
списке).

При использовании в прикладных клиппер-программах это позволяет Вам
создавать или модифицировать структуру файла БД программным
путем. Чтобы создать из этого файла расширенной структуры новый
файл БД, используйте команду CREATE FROM. Если Вам нужен только
файл расширенной структуры, используйте команду CREATE.

Пример: USE Sales
COPY STRUCTURE EXTENDED TO Struc

- 63 -
USE Struc
LIST Field_name,Field_type,Field_len,Field_dec

Результат:

1 BRANCH C 3 0
2 SALESMAN C 4 0
3 CUSTOMER C 4 0
4 PRODUCT C 25 0
5 AMOUNT N 8 2

library: CLIPPER.LIB

См. также: CREATE,CREATE FROM,FIELD(),TYPE()




COUNT


Написание: COUNT [<обл.опр.>][ FOR <условие>]
[ WHILE <условие>] TO <переменная>

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

<переменная> - переменная в памяти, которой присваивается
результат COUNT. Если эта переменная не существует, или она
нечислового типа, то COUNT создает ее, как числовую.

<обл.опр.> - часть текущего файла БД, внутри которой нужно
подсчитать строки. По умолчанию во всем файле (ALL).

<условие> - опция FOR указывает условное множество записей,
подлежащих подсчету внутри данной области определения. Опция
WHILE указывает множество записей, отвечающих условию, начиная с
текущей и пока условие выполняется.

Пример: USE Sales
?LASTREC() && результат: 84
COUNT FOR Branch="100" TO Branch_cnt
?Branch_cnt && результат: 4

library: CLIPPER.LIB

См. также:AVERAGE,SUM,TOTAL,LASTREC()



CREATE

Написание: CREATE <файл>/(<вырС>)

Генерирует файл пустой расширенной структуры базы данных.
<файл>- имя файла пустой расширенной структуры. Подобно COPY
STRUCTURE EXTENDED, CREATE порождает файл с четырьмя следующими

- 64 -
полями:Field_name(имя поля), Field_type (тип поля),
Field_len(ДЛИНА ПОЛЯ), Field_dec(количество знаков после
запятой). В отличие от COPY STRUCTURE EXTENDED, CREATE порождает
пустой файл базы данных и не требует присутствия другого файла
базы данных.

library:CLIPPER.LIB

Рекомендовано смотреть : CREATE FROM, COPY CTRUCTURE EXTENDED


CREATE FROME

Написание : CREATE <файл1>/(<вырС1>) FROME <файл2>/(<вырС2>)

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

Поле Имя Тип Длина Кол-во знаков после запятой
1 Field_name Символ 10
2 Field_type Символ 1
3 Field_len Число 3 0
4 Field_dec Число 3 0

Можно иметь любое количество полей внутри структурного файла для
описания атрибутов полей. Однако, при выполнении CREATE FROME,
Clipper генерирует новый файл базы данных, используя только
требуемые (описанные выше) поля. Все другие поля в структурном
файле будут проигнорированы.

Существует способность создать символьное поле диной более 999
символов. Для этого необходимо определить Field_dec равным INT()
от желаемой длины, деленной на 256, а Field_len равным остатку
от этого деления.

Примеры:

CREATE New FROME Struc
USE New
?LASTREC( ) && Результат: 0

Следующий пример показывает возможный вид CREATE - процедуры
интерактивного создания структуры нового файла базы данных:

CREATE New_stru
USE New_stru
more_flds=.T.
* Установка атрибутов полей нового файла базы данных
DO WHILE more_flds
APPEND BLANK
@5,0 SAY "Имя поля:" GET Field_name

- 65 -
@6,0 SAY "Тип поля:" GET Field_type
@7,0 SAY "Длина поля:" GET Field_len
@8,0 SAY "Знаки после зпт:" GET Field_dec
READ
more_flds=(.NOT.EMPLY(Field_name))
ENDDO
* Удаление пустых записей
DELETE ALL FOR EMPTY (Field_name)
PACK
USE
* Генерация нового файла данных
CREATE Newfile From New_stru
ERASE New_stru.dbf

Генерация поля из 4000 символов:

Fiel_dec=INT(4000/256)=15
Field_len=4000%256=160
REPLASE, Field_name WHITH"Note";
Field_type WITH "c",;
Field_len WITH 160,;
Field_dec With 15

library: CLIPPER.LIB

Рекомендовано смотреть: COPY STRUCTURE EXTENDED, CREATE


DECLARE

Сиснтаксис: DECLARE<массив1>[<вырЧ1>][,<массив2>[<вырЧ2>]]...

Создает один или более массивов переменных.
<массив> - имя создаваемого массива. Можно создать несколько
массивов, используя один DECLARE оператор.
<вырЧ> - количество элементов массива (max: до 2048). При
объявлении массива с <вырЧ> меньше 1, этот параметр
приравнивается к 1, а в случае объявления его больше 2048, он
будет равен 2048.

Внимание: квадратные скобки вокруг <вырЧ> являются необходимой
частью сиснтаксиса команды и в этом случае не обозначают
необязательный аргумент.

DECLARE позволяет создать одномерный массив. Сгенерированный
массив занимет одну единицу в списке локальных переменных. В
отличие от переменных массивы и их элементы не могут быть
обработаны при помощи SAVE или объявлены PUBLIC (глобальными).
Для назначения определенной величины элементу массива
используется оператор присвоения (=) или команда STORE. Для
присвоения определенно го значения всем элементам массива
следует использовать AFILL( ).

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

- 66 -
использовать LEN( ) с указанием имени массива в качестве
аргумента функции. Элементы внутри массива могут быть различных
типов и в этом смысле правила их использования совпадают с
правилами для обычных переменных. TYPE( ) возвращает "А"
(массив) всякий раз, когда аргументом является массив. Чтобы
определить тип определенного элемента массива, необходимо
присвоить значение этого элемента обычной изменяемой и лишь
затем использовать TYPE( ).

Массивы не имеют ограничений по использованию в
макро-переменных. Существует только одно ограничение: скобки не
могут быть использованы в макро-переменных при употреблении
DECLARE (см.пример). Массив и элементы маасива могут быть
использованы как пересылаемые параметры в Clipper-процедурах,
пользовательских функция (FUNC)х и внешних процедурах, использующих
Расширенную систему (Extend System) (см. гл.11, Система
расширения). Массивы пересылаются в качестве ссылок (by
reference), элементы массивов пересылаются как значения (by
value). Нельзя, однако, пересылать весь массив во внешнюю
процедуру, используя команду CALL. В этом случае можно переслать
элементы массива по одному и как значения (by value).

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

DECLARE array[s]
array[1]="HELLO"
array[2]=1234
?array[1] &&Результат: HELLO
?array[2] &&Результат: 1234

Следующий пример демонстрирует способность применения массивов
совместно с макро-переменными:

name = "array"
number = 5
name_len = "array[1]"
*
* это правильное использование
DECLARE &name[number] &&Создание массива из 5 элементов
&name_len = 100 &&Элементу 1 присваивается значение 100
&name[3]="abs" &&Элементу 3 присваивается значение "abs"
*
* Это неправильное использование
DECLARE &name_len &&Cкобки не м.б.внутри макро-изменяемой

library: CLIPPER.LIB

См. также: ADEL( ), ADIR( ), AFILL( ),ASCAN( ), ASORT( )



DELETE



- 67 -
Написание: DELETE[<обл.опр.>][FOR<условие>][WHILE<условие>]

Помечает строки в текущем файле данных, предназначенные для
удаления.
<обл.опр.> - обозначает часть файла данных для удаления. Если
эта часть не указана, то DELETE действует только по отношению к
текущей строки.
Если <условие> указано, то по умолчания область определения -
все строки файла . DELETE помечает строки таким образом, что они
могут быть потом отфильтрованы при помощи SET DELETED ON,
запрошены DELETED( ) или физически удалены из файла при помощи
PACK. К тому же такие команды индикации как LIST и DISPLAY
отмечают предназначенные к удалению строки символом "*". Уже
помеченные строки можно восстановить в правах с помощью RECALL.

Если необходимо удалить все строки из файла данных, следует
использовать ZAP вместо DELETE ALL и PACK.

При использовании в сетях команда DELETE требует, чтобы текущая
запись была "заперта" при помощи RLOCK( ) в случае, если
удаляется единичная запись. Если необходимо удалить несколько
записей, текущий файл данных должен быть "заперт" при помощи
FLOCK( ) или открыт (USE) в монопольном режиме - EXCLUSIVE

library: CLIPPER.LIB

См. также: PACK,RECALL,SET DELETE, ZAP, DELETED( ), EMPTY( )


DIR

Написание: DIR[<дисковод>:][<путь>\][<шаблон>]

Показывает список файлов из указанного каталога на диске.
<шаблон> - стандартный указатель совпадений (* или ?). Если он
используется , то будут выданы все совпадающие файлы, если не
используется - выдаются только файлы данных.
DIR осуществляет вывод в двух различных форматах, в зависимости
от того был ли использован <шаблон>. Если нет, то выводится
стандартный список файлов указанного директория, включающий в
себя имя файла, дату последнего применения и количество записей.
Если же <шаблон> используется, список включает в себя имя файла,
расширение, количество байт и дату внесения последнего
изменения. В ситуациях, когда необходимо выдать пользователю
информацию об имеющихся файлах, удобно воспользоваться ADIR()
вместо DIR. ADIR() позволяет поместить атрибут файлов в массивы,
что удобнее для дальнейшего их использования.

library: CLIPPER.LIB

См. также : ADIR( )


DISPLAY

Написание: DISPLAY [OFF][<обл.опр.>] <список выражений>
[FOR<условие>] [WHILE <условие>]

- 68 -
[TO PRINT][TO FILE<файл>/(вырС)]

Показывает одно или несколько выражений для каждой обработанной
строки.
<explist> - список величин индицируемых для каждой строки.
Опции :
<обл.опр.>: обозначает часть текущего файла данных. По умолчанию
- текущая запись. Если используется <условие>, то <обл.опр.>
принимает значения ALL - все.
<условие>: FOR устанавливает условие для индикации определенных
записей внутри выбранного <обл.опр.>. WHILE предоставляет
способность производить вывод пока верно <условие> WHILE.
OFF : подавляет вывод количества записей.
PRINT : вызывает дублирование вывода на принтер.
FILE: TO FILE вызывает пересылку информации в файл <файл>.
Расширение по умолчанию .txt.

DISPLAY вызывает индикацию <списка выражений> в табулированном
формате, где каждая колонка отделена от другой пробелом.
Заголовок не печатается, пауз во время выводов не предусмотрено.
DISPLAY аналогичен LIST за исключением того, что в LIST по
умолчанию <обл.опр.> принимает значение NEXT 1, а не ALL.

Примеры:

USE Sales
DISPLAY DATE( ), TIME( ), Brauch
DISPLAY Brauch,Salesman FOR Amount>500 TO PRINT

*Для просмотра удобно включить INKEY( ) в условие FOR:
DISPLAY Brouch, Amount FOR INKEY( ) <>27


library: CLIPPER, LIB

Рекомендовано смотреть: LIST


DO


Написание: DO <процедура> [WITH<список параметров>]

Цель: выполнение процедуры.
<процедура> - имя процедуры. Это может быть процедура на
Clipperе, Си или Ассемблере.
Необязательное условие WITH <список параметров> позволяет
переслать в процедуру список (до 128) параметров. Параметрами
могут быть переменные или выражения. Переменные могут быть здесь
использованы в качестве ссылок или значений.

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

- 69 -
перемылается в качестве ссылки и любое изменение
соответствующего ему параметра в процедуре отразится на его
значении в вызывающей программе.

Следует отметить, что поля могут быть пересланы только как
значения. (См. PARAMETRS для более детального ознакомления).


library: CLIPPER.LIB

См. также: PARAMETRS, PRIVATE, PROCEDURE, PUBLIC, RETURN, SET
PROCEDURE.


DO CASE


Написание: DO CASE
CASE<условие>
<команды>...
[CASE<условие>]
<команды>...
[OTHERWISE]
<команды>...
ENDCASE

Осуществляет ветвления по условиям. В случае, если ни одно из
указанных условий не выполняется, управление передается
командам, следующим за ENDCASE. При тех же условиях, но в
присутствии OTHERWISE выполняются команды, следующие за
OTHERWISE до ENDCASE.

Любое количество команд, включая также структуры как DOWHILE,
DOCASE, IF, FOR, могут быть вложены внутрь одного DOCASE.
Количество CASE указателей внутри DOCASE неограничено.


library: CLIPPER.LIB

См. также: DO, DO WHILE, IF, IF( )/IIF( )

DO WHILE

Сиснтаксис: DO WHILE<условие>
<команды>...
[EXIT]
<команды>...
[LOOP]
<команды>...
ENDDO

Выполняет цикл DO WHILE - ENDDO пока верно условие
(<условие>=.T.)

Опции :
EXIT: выполнение этого указателя вызывает безусловный переход на
первый после ENDDO оператор.

- 70 -
LOOP : передает управление на последнюю выполненную строку DO
WHILE

DO WHILE структура повторяет выполнение заданных команд пока
выполняется условие на входе. Когда условие верно (.Т.)
управление передается на первый оператор последовательности,
которая исполняется до появления команд: EXIT, LOOP, ENDDO.
ENDDO возвращает управление на DO WHILE и процесс повторяется.
LOOP в основном используется когда необходимо предотвратить
выполнение определенной части операторов внутри цикла. Для примера:

DO WHILE <условие>
<начальное исполнение>...
IF<промежуточное условие>
LOOP
ENDIF
<продолжение выполнения>...
ENDDO

Следующие два примера иллюстрируют возможности DO WHILE при
просмотре файлов данных :

DO WHILE .NOT. EOF()
<операторы>...
SKIP
ENDDO

LOCATE FOR <условие>
DO WHILE FOUND( )
<операторы>...
CONTINUE
ENDDO

Макроопределения применяются без ограничений в любой части DO
WHILE.

library: CLIPPER.LIB

Рекомендовано смотреть: FOR, IF, LIST, RETURN

EJECT


Написание: EJECT

EJECT устанавливает печатающую головку в начало новой страницы
путем подачи на принтер управляющего символа ASCII 12. Кроме
того, EJECT устанавливает в нуль значения строки и столбца
внутреннего счетчика.
Если необходимо "сбросить на нуль" внутренний счетчик принтера,
не посылая ASKII 12, можно воспользоваться SETPRC()


library: CLIPPER.LIB

См. также: SETPRC( )


- 71 -

ERASE/DELETE FILE


Написание: ERASE/DELETE FILE<файл>.<расш.>

Удаляет указанный файл с диска.
<файл>.<расш.> - имя файла (с расширением), предназначенного для
удаления.

Внимание: файл перед удалением должен быть закрыт.


library: CLIPPER.LIB

См. также: CLOSE, USE, FILE( )



EXTERNAL


Написание: EXTERNAL<список процедур>

Объявляет имена для программы - компоновщика.
<procedure list> - список подпрограмм, пользовательских функций
и форматных файлов.

Перечисленные структуры должны быть объявлены как EXTERNAL
(внешние) в случае, если они вызываются с применением
макрообъявлений или, если они располагаются в оверлейных
структурах.

Пример:
EXTERNAL P1, P2, P3
routine="1"
DO P&routine

library: CLIPPER.LIB



FIND

Написание: FIND<символьная строка>/(<вырС>)

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

<символьная строка> - вся или часть значения искомого ключевого
элемента. В случае использования (<вырС>) вместо литеральной
символьной строки, FIND работает аналогично SEEK.

FIND просматривает индекс-файл, начиная с первого ключа и
продолжает до совпадения или до превышения значения текущего

- 72 -
ключа над заданным для поиска. В случае совпадения указатель
строки устанавливается в соответствующее значение.
Если SET SOFTSEEK установлен в OFF и FIND не нашел строки, то
указатель устанавливается в значение LASTREC() + 1, EOF( )
возвращает .Т., а FOUND( ) возвращает .F.
В случае SOFTSEEK установленного ON, указатель строки
устанавливается в значение, соответствующее строки для первого
ключа, превышающего искомое значение. FOUND( ) в этом случае
возвращает .F., а EOF( ) - .T.

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

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

Пример:
USE Sabs INDEX Brouch
?LASTREC( ) &&Результат: 84
?INDEXKEY( ) &&Результат: BRANCH

FIND 200
?FOUND( ), EOF( ), RECNO( ) &&Результат: .T. .F. 5
FIND 500
?FOUND(), EOF(), RECNO() && Результат: .F. .T. 85

string = "200"
FIND &string
?FOUND(), EOF(), RECNO() && Результат: .T. .F. 5
FIND "100"
?FOUND, EOF(), RECNO() && Результат: .T. .F. 1

library : CLIPPER.LIB

Смотри также : INDEX, LOCATE, SEEK, SET INDEX, SET ORDER, SET
SOFTSEEK, EOF(), FOUND()


FOR...NEXT


Написание: FOR <переменная> = <вырЧ1> TO <вырЧ2> [STEP<вырЧ3>]
<commands>...
[EXIT]
<commands>...
NEXT

Организует циклы.
<переменная> - управляющая переменная цикла
<вырЧ1>, <вырЧ2> - начальное и конечное значения изменяемой
цикла.
Необязательный параметр - STEP устанавливает шаг изменения
значения управляющей изменяемой: <вырЧ3>. По умолчанию шаг равен
единице.

- 73 -

EXIT передает управление следующему за NEXT оператору.


library: CLIPPER.LIB

См. также: DO CASE, DO WHILE, IF



FUNCTION

Написание: FUNCTION <процедура>...RETURN<выр.>

Объявляет функцию, определенную пользователем.
<процедура> - имя функции (до 10 символов)
<выр.> - значение, возвращаемое функцией

Пользовательская функция (FUNC) - это структура, аналогичная
подпрограмме (PROCEDURE), но с двумя исключениями. Во-первых,
описание функции должно начинаться с оператора FUNCTION и,
во-вторых, оператор RETURN обязан содержать возвращаемое
функцией значение.
Пользовательская функция (FUNC) вызывается также, как и
предопределенные в Clipperе функции.

FUNCTION (<список параметров>)

Параметры пересылаются как значения (by value), за исключением
двух случаев. Во-первых, если пересылаемый параметр является
элементом массива, то весь массив пересылается как ссылка (by
reference). Во-вторых, если параметр в списке предшествует знак
@, то он (параметр) пересылается как ссылка.

Примеры:

@12, Center("Hi there") SAY "Hi there"
RETURN
*


FUNCTION Center
PARAMETRS string
RETURN INT((80-LEN(string))/2)


value=10
?Changvar<value)
?value &&Результат: 10
?Changvar(@value)
?Value &&Результат: 20
RETURN
*
FUNCTION Changvar
PARAMETER var
var=var*2
RETURN(var)

- 74 -


library: CLIPPER.LIB

Рекомендовано смотреть: PROCEDURE, PARAMETERS, RETURN



GO/GOTO


Написание: GO/GOTO <вырЧ1> / BOTTOM/ TOP

Устанавливает указатель на определенную запись в текущей рабочей
области.
<вырЧ> - номер строки. GOTO установит указатель на эту запись,
даже если DELETED-ON или, если это потребует выхода за пределы
области, определенной текущим фильтром.

Опции

BOTTOM устанавливает указатель в последнюю логическую запись,
если существует активный индекс-файл и в LASTREC(), если
индекс-файл не активен. В случае DELETED-ON или в присутствии
активного фильтра последняя запись отыскивается в определенной
фильтром области.
TOP устанавливает указатель в первую логическую запись, если
существует активный индекс-файл или запись номер 1 в случае
отсутствия последнего. Если DELETED-ON или существует активный
фильтр, то устанавливается первая запись в определенной области.


library: CLIPPER.LIB

См. также: SKIP, LASTREC( ), RECNO( )



IF

Написание: IF<условие>
<commands>...
[ELSE]
<commands>
ENDIF

Условное выполнение блока команд.
<условие> - выражение, управляющее ветвлением. Если в процессе
работы оно принимает значение .Т., то выполняются все следующие
команды до появления ELSE или ENDIF.
В случае <условие>=.F. управление передается первой команде за
оператором ELSE, если он существует. В противном случае
выполняется первая команда за ENDIF.
ELSE предваряет команды, предназначенные к выполнению в случае
<условие>=.F.
Структуры : IF...ENDIF могут быть вложены друг в друга и в
другие подобные структуры.

- 75 -

library: CLIPPER.LIB

Рекомендовано смотреть: DO CASE, IF( )/IIF( )



INDEX


Написание: INDEX ON <ключевое выражение>TO<файл>/(<вырС>)

Создает файл, содержащий индекс к записям активного файла
данных.
<ключевое выражение> - выражение, которое возвращает для каждой
строки в текущем файле данных ключевое значение для последующего
использования его в качестве индекса определенной строки.
Максимальная длина ключевого выражения до 250 символов.
<файл> - имя создаваемого индекс-файла. По умолчанию расширение
файла должно быть (.ntx).
Для пользования dBASE - совместимыми файлами индексов (с
расширением (.ndx)) необходимо при линковке программы включить в
список NDX.OBJ.

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

USE Invoices
INDEX ON Customer + DTOS(Inv_date) TO Invoice

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

USE Invoices
INDEX ON DESCEND(Inv_date) TO Inv_stack

При последующем использовании SEEK также необходимо употребление
DESCEND().

Clipper поддерживает DBASE III PLUS-индекс-файлы, если при
линковке использовать NDX.OBJ.

В случае, если в файле данных присутствуют строки с одинаковыми
значениями ключевого выражения, порядок их обработки
регулируется оператором SET UNIQUE ON/OFF. В случае UNIQUE ON в
индексированные списки не включаются строки с одинаковыми
значениями ключа. Необходимо заметить, что UNIQUE не является

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

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


library: CLIPPER.LIB

Рекомендовано смотреть: CLOSE, FIND, REINDEX, SEEK, SET INDEX, SET ORDER,
SET UNIQUE, USE, DTOS(), INDEXEXT(), INDEXKEY(), INDEXORD()



INPUT


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

Вводит выражения с клавиатуры и размещает его в определенной
изменяемой.
<переменная> - имя изменяемой для хранения выражения.
<приглашение> - сообщение, сопровождающее ввод.

Реализует ввод с клавиатуры выражений любого типа даных. Ввод
выражения заканчивается нажатием клавиши Return. Если введено
только Return, то переменная не будет создана.


library: CLIPPER.LIB

Рекомендовано смотреть: ACCEPT, WAIT


KEYBOARD

Написание : KEYBOARD <вырС>

Заполняет строкой символов буфер клавиатуры.
<вырС> - строка символов.

KEYBOARD используется вместе с командами и функция (FUNC)ми,
опрашивающими буфер клавиатуры. Это могут быть команды
"ожидания", такие как ACCEPT, INPUT, READ или "внешние" функции
ACHOICE() и DBEDIT().

Типичный пример применения KEYBOARD - использование внутри SET
KEY процедуры для переназначения клавиш в режиме ожидания.
Необходимо заметить, что каждое выполнение KEYBOARD очищает
буфер клавиатуры.

Пример:
В этом примере буфер клавиатуры заполняется последовательностью

- 77 -
символов, позволяющих вернуться с глубины трех уровней в
основное меню, нажав одну клавишу. Здесь "Q" и "Возврат каретки"
вызывают "подъем" на один уровень:

KEYBOARD "Q" + CHR(13) + "Q" + CHR(13) + "Q" + CHR(13)



library: CLIPPER.LIB

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


JOIN

Cинтаксис: JOIN WITH <синоним>/(<вырС1>) TO <файл>/(<вырС2>)
FOR <условие>[FIELDS <список полей>]

Создает новый файл данных путем слияния выбранных записей и
полей из двух рабочих областей.
<синоним> - рабочая область, предназначенная для объединения с
текущей.
<файл> - имя нового файла данных.
FOR <условие> - выбор записей, соответствующих определенным
условиям.
<список полей> - список полей обеих рабочих областей для
формирования нового файла. Если FIELDS не будет использовано то
все поля текущей рабочей области будут присутствовать в новом
файле данных.

JOIN работает следующим образом: для каждой строки в текущей
рабочей области осуществляется просмотр всех записей
вспомогательной области и в каждом случае выполнения условия
(<условие>) cоздается новая запись ( с полями FIELDS ) в новом
файле данных.

Необходимо помнить, что количество записей, выдаваемых JOIN
равно произведению от количества записей, удовлетворяющих
условиям, в двух рабочих областях.

Пример:
Объединение текущего файла Customers с дополнительным Invoices
для создания нового Purchases.

USE Customers
SELECT 2
USE Invoices
SELECT 1
*
JOIN WITH Invoices TO Purchases;
FOR Last=Invoices->Last;
FIELDS First,Last,Invoices->Number,Invoices->Amount


library: CLIPPER.LIB

Рекомендовано смотреть: APPEND FROM, REPLACE, SET RELATION

- 78 -



LABEL FORM

Cинтаксис: LABEL FORM <файл1>/(<вырС1>)[<обл.опр.>][FOR <условие>]
[WHILE<условие>][SAMPLE][TO PRINT][TO FILE <файл2>/
(<вырС2>)]

Индикация меток, определенных в (.lbl) файле.
<файл1> - имя файла (.lbl), содержащего информацию о метках.
<обл.опр.> - определяет часть текущего файла данных для
индикации меток. По умолчанию - ALL.

FOR отбирает соответствующие заданному условию (<условие>)
строки в файле данных внутри заданной области (<обл.опр.>).

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

TO PRINT организует параллельный вывод на печать.

TO FILE вызывает параллельную загрузку информации на диск в виде
файла <файл2> (расширение по умолчанию (.txt))

SAMPLE вызывает индикацию тестовых меток в виде строк звездочек.
Каждая метка имеет то же значение столбца и строки, что и ее
определение. Далее необходимо ответить на вопрос: "Do you want
more samples ?" ( "Требуются еще примеры ?"). Ответ "Y" вызывает
повторение индикации тестовых меток. Ответ "N" позволит
индицировать реальные метки для выбранных <обл.опр.> и
<условие>.

LABEL FORM индицирует метки, используя определения хранимые в
(.lbl) файле. (.lbl) можно создать, используя RL.EXE (см. главу
12, Утилиты Clipperа).
Содержимое поля LABEL должно быть допустимым выражением.
Необходимо отметить, что Clipper не поддерживает список
выражений в содержимом LABEL FORM. Все следующее за запятой в
LABEL FORM игнорируется.


library: CLIPPER.LIB

Рекомендовано смотреть: REPORT FORM.


LIST


Написание: LIST [OFF] [<обл.опр.>] <список выражений> [FOR <условие>]
[WHILE <условие>] [TO PRINT] [TO FILE <файл>/(<вырС>)]

Вывод одного или более выражений для каждой обрабатываемой
строки.
<список выражений> - список выводимых значенийй для каждой
строки.

- 79 -
<обл.опр.> - часть текущего файла данных, обрабатываемая LIST.
По умолчанию ALL (все строки).
FOR - отбирает соответствующие заданному условию строки в файле
данных внутри заданной области (<обл.опр.>).
WHILE - позволяет просматривать строки начиная с текущей до
первого невыполнения условия.
OFF - подавляет индикацию номеров записей.
TO PRINT - вызывает параллельный вывод на печать.
TO FILE - вызывает параллельную загрузку информации на диск,
используя для этого файл <файл>(.txt).

LIST индицирует список значений в табулированном формате с
колонками, разделенными пробелом. LIST аналогичен DISPLAY, за
исключением значения принимаего <обл.опр.> по умолчанию: LIST -
ALL, DISPLAY - NEXT 1.

Пример:

USE Sales
LIST DATE(),TIME(),Branch
LIST Branch,Salesman FOR Amount > 500 TO PRINT

Для прерывания выполнения LIST можно пользоваться INKEY() в
качестве части условия, как в следующем примере, который
позволяет прервать выдачу, нажав Esc:

USE Sales
LIST Branch,Amount FOR INKEY()<>27


library: CLIPPER.LIB

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



LOCATE


Написание: LOCATE [<обл.опр.>] FOR <условие> [WHILE <условие>]

Поиск в текущей рабочей области первой строки, соответствующей
заданным условиям.
<обл.опр.> - часть текущего файла данных, в котором работает
LOCATE. По умолчанию ALL.
FOR - отбирает соответствующие заданному условию строки в файле
данных внутри заданной области (<обл.опр.>).
WHILE - позволяет просматривать строки начиная с текущей до
первого невыполнения условия.

LOCATE производит поиск начиная с строки, определяемой
<обл.опр.>. Поиск заканчивается в случае обнаружения совпадения
по условиям или по достижении последней строки из <обл.опр.>.
Если поиск закончился успешно, то найденная запись становится
текущей и FOUND() возвращает .Т.. Если же поиск окончился
безрезультатно, то FOUND() возвращает .F., а позиция указателя
записей будет зависить от значения <обл.опр.>.

- 80 -

Каждая рабочая область может иметь свою собственную область
действия LOCATE (<обл.опр.>), остающуюся активной до объявления
другого LOCATE в текущей рабочей области.

LOCATE может работать в комбинации с CONTINUE. Эта команда
позволяет возобновить поиск с текущей строки.

Пример:

USE Sales
? LASTREC() && Результат: 84
LOCATE FOR Branch = "200"
? FOUND(), EOF(), RECNO() && Резульатат: .T. .F. 5


library: CLIPPER.LIB

Рекомендовано смотреть: CONTINUE, FIND, FOUND(), STRTRAN().