Компьютерные науки - Учебники на русском языке - Скачать бесплатно
Библиотека: 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 неограничено.
Библиотека: 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.
Библиотека: CLIPPER.LIB
См.также: FOR, IF, LIST, RETURN
EJECT
Синтаксис: EJECT
EJECT устанавливает печатающую головку в начало новой страницы
путем подачи на принтер управляющего символа ASCII 12. Кроме
того, EJECT устанавливает в нуль значения строки и столбца
внутреннего счетчика.
Если необходимо "сбросить на нуль" внутренний счетчик принтера,
не посылая ASKII 12, можно воспользоваться SETPRC()
Библиотека: CLIPPER.LIB
См. также: SETPRC( )
- 71 -
ERASE/DELETE FILE
Синтаксис: ERASE/DELETE FILE<эфайл>.<эрасш.>
Удаляет указанный файл с диска.
<эфайл>.<эрасш.> - имя файла (с расширением), предназначенного для
удаления.
Внимание: файл перед удалением должен быть закрыт.
Библиотека: CLIPPER.LIB
См. также: CLOSE, USE, FILE( )
EXTERNAL
Синтаксис: EXTERNAL<эсписок процедур>
Объявляет имена для программы - компоновщика.
- список подпрограмм, пользовательских функций
и форматных файлов.
Перечисленные структуры должны быть объявлены как EXTERNAL
(внешние) в случае, если они вызываются с применением
макрообъявлений или, если они располагаются в оверлейных
структурах.
Пример:
EXTERNAL P1, P2, P3
routine="1"
DO P&routine
Библиотека: CLIPPER.LIB
FIND
Синтаксис: FIND<эсимвольная строка>/(<эвырС>)
Просматривает индексный файл с целью обнаружения первого
совпадения указанной строки символов с содержимым ключевого
элемента в индекс-файле. Устанавливает указатель записи в
соответствующее значение на найденную запись.
<эсимвольная строка> - вся или часть значения искомого ключевого
элемента. В случае использования (<эвырС>) вместо литеральной
символьной строки, FIND работает аналогично SEEK.
FIND просматривает индекс-файл, начиная с первого ключа и
продолжает до совпадения или до превышения значения текущего
- 72 -
ключа над заданным для поиска. В случае совпадения указатель
записи устанавливается в соответствующее значение.
Если SET SOFTSEEK установлен в OFF и FIND не нашел записи, то
указатель устанавливается в значение LASTREC() + 1, EOF( )
возвращает .Т., а FOUND( ) возвращает .F.
В случае SOFTSEEK установленного ON, указатель записи
устанавливается в значение, соответствующее записи для первого
ключа, превышающего искомое значение. FOUND( ) в этом случае
возвращает .F., а EOF( ) - .T.
Начальные пробелы в символьном аргументе участвуют в определении
совпадений наряду со всеми другими символами. Поисковый аргумент
может быть и макропеременной.
Клиппер хранит числовые ключи индекс-файлов с использованием
предшествующих нулей. Это значит, что если искать числовой ключ
с помощью символьного аргумента, то необходимо дополнить
аргумент нулями слева.
Пример:
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
Библиотека : CLIPPER.LIB
Смотри также : INDEX, LOCATE, SEEK, SET INDEX, SET ORDER, SET
SOFTSEEK, EOF(), FOUND()
FOR...NEXT
Синтаксис: FOR <эпеременная> = <эвырЧ1> TO <эвырЧ2> [STEP<эвырЧ3>]
...
[EXIT]
...
NEXT
Организует циклы.
<эпеременная> - управляющая переменная цикла
<эвырЧ1>, <эвырЧ2> - начальное и конечное значения переменной
цикла.
Необязательный параметр - STEP устанавливает шаг изменения
значения управляющей переменной: <эвырЧ3>. По умолчанию шаг равен
единице.
- 73 -
EXIT передает управление следующему за NEXT оператору.
Библиотека: CLIPPER.LIB
См. также: DO CASE, DO WHILE, IF
FUNCTION
Синтаксис: FUNCTION <эпроцедура>...RETURN<эвыр.>
Объявляет функцию, определенную пользователем.
<эпроцедура> - имя функции (до 10 символов)
<эвыр.> - значение, возвращаемое функцией
Пользовательская функция - это структура, аналогичная
подпрограмме (PROCEDURE), но с двумя исключениями. Во-первых,
описание функции должно начинаться с оператора FUNCTION и,
во-вторых, оператор RETURN обязан содержать возвращаемое
функцией значение.
Пользовательская функция вызывается также, как и
предопределенные в Клиппере функции.
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 &&Результат: 10
?Changvar(@value)
?Value &&Результат: 20
RETURN
*
FUNCTION Changvar
PARAMETER var
var=var*2
RETURN(var)
- 74 -
Библиотека: CLIPPER.LIB
См.также: PROCEDURE, PARAMETERS, RETURN
GO/GOTO
Синтаксис: GO/GOTO <эвырЧ1> / BOTTOM/ TOP
Устанавливает указатель на определенную запись в текущей рабочей
области.
<эвырЧ> - номер записи. GOTO установит указатель на эту запись,
даже если DELETED-ON или, если это потребует выхода за пределы
области, определенной текущим фильтром.
Опции
BOTTOM устанавливает указатель в последнюю логическую запись,
если существует активный индекс-файл и в LASTREC(), если
индекс-файл не активен. В случае DELETED-ON или в присутствии
активного фильтра последняя запись отыскивается в определенной
фильтром области.
TOP устанавливает указатель в первую логическую запись, если
существует активный индекс-файл или запись номер 1 в случае
отсутствия последнего. Если DELETED-ON или существует активный
фильтр, то устанавливается первая запись в определенной области.
Библиотека: CLIPPER.LIB
См. также: SKIP, LASTREC( ), RECNO( )
IF
Синтаксис: IF<эусловие>
...
[ELSE]
ENDIF
Условное выполнение блока команд.
<эусловие> - выражение, управляющее ветвлением. Если в процессе
работы оно принимает значение .Т., то выполняются все следующие
команды до появления ELSE или ENDIF.
В случае <эусловие>=.F. управление передается первой команде за
оператором ELSE, если он существует. В противном случае
выполняется первая команда за ENDIF.
ELSE предваряет команды, предназначенные к выполнению в случае
<эусловие>=.F.
Структуры : IF...ENDIF могут быть вложены друг в друга и в
другие подобные структуры.
- 75 -
Библиотека: 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(). Эта функция в
состоянии инвертировать любой тип данных.
Например, следующий фрагмент создает упорядоченный список с
убывающей хронологией даты заведения счета:
USE Invoices
INDEX ON DESCEND(Inv_date) TO Inv_stack
При последующем использовании SEEK также необходимо употребление
DESCEND().
Клиппер поддерживает DBASE III PLUS-индекс-файлы, если при
линковке использовать NDX.OBJ.
В случае, если в файле данных присутствуют записи с одинаковыми
значениями ключевого выражения, порядок их обработки
регулируется оператором SET UNIQUE ON/OFF. В случае UNIQUE ON в
индексированные списки не включаются записи с одинаковыми
значениями ключа. Необходимо заметить, что UNIQUE не является
- 76 -
аттрибутом индесного файла. Из этого следует, что в случае
UNIQUE OFF совпадающие ключи могут быть добавлены в индексный
файл, даже если он создан при UNIQUE ON.
Использование функции TRIM() для части ключевого выражения,
содержащего поле, всегда возвращает нулевую строку. Это может
привести к несовпадению по размеру сравниваемых ключей. Однако
функцией можно пользоваться, если впоследствие заполнить
удаленные части поля необходимым количеством пробелов.
Библиотека: CLIPPER.LIB
См.также: CLOSE, FIND, REINDEX, SEEK, SET INDEX, SET ORDER,
SET UNIQUE, USE, DTOS(), INDEXEXT(), INDEXKEY(), INDEXORD()
INPUT
Синтаксис: INPUT [<эприглашение>] TO <эпеременная>
Вводит выражения с клавиатуры и размещает его в определенной
переменной.
<эпеременная> - имя переменной для хранения выражения.
<эприглашение> - сообщение, сопровождающее ввод.
Реализует ввод с клавиатуры выражений любого типа даных. Ввод
выражения заканчивается нажатием клавиши Return. Если введено
только Return, то переменная не будет создана.
Библиотека: CLIPPER.LIB
См.также: ACCEPT, WAIT
KEYBOARD
Синтаксис : KEYBOARD <эвырС>
Заполняет строкой символов буфер клавиатуры.
<эвырС> - строка символов.
KEYBOARD используется вместе с командами и функциями,
опрашивающими буфер клавиатуры. Это могут быть команды
"ожидания", такие как ACCEPT, INPUT, READ или "внешние" функции
ACHOICE() и DBEDIT().
Типичный пример применения KEYBOARD - использование внутри SET
KEY процедуры для переназначения клавиш в режиме ожидания.
Необходимо заметить, что каждое выполнение KEYBOARD очищает
буфер клавиатуры.
Пример:
В этом примере буфер клавиатуры заполняется последовательностью
- 77 -
символов, позволяющих вернуться с глубины трех уровней в
основное меню, нажав одну клавишу. Здесь "Q" и "Возврат каретки"
вызывают "подъем" на один уровень:
KEYBOARD "Q" + CHR(13) + "Q" + CHR(13) + "Q" + CHR(13)
Библиотека: 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
Библиотека: 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, Утилиты Клиппера).
Содержимое поля LABEL должно быть допустимым выражением.
Необходимо отметить, что Клиппер не поддерживает список
выражений в содержимом LABEL FORM. Все следующее за запятой в
LABEL FORM игнорируется.
Библиотека: 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
Библиотека: 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
Библиотека: CLIPPER.LIB
См.также: CONTINUE, FIND, FOUND(), STRTRAN().
MENU TO
Синтаксис: MENU TO <эпеременная>
Интерактивный выбор элемента списка меню с присвоением
соответствующего значения определенной переменной.
<эпеременная> - переменная для хранения порядкового номера
элемента списка меню. Если такой переменной не существует, то
она будет создана (тип N).
MENU TO организует выбор элемента списка меню. Формирование
списка осуществляется операторами SET MESSAGE и PROMPT.
Собственно выбор производится с помощью стрелочных клавиш.
Каждому элементу меню соответствует определенное сообщение (
MESSAGE ), позиция которого на экране определяется оператором
SET MESSAGE. Выход из команды MENU с выбором определенного
элемента осуществляется при вводе .
Следующий список определяет активные клавиши управления режимом
MENU TO:
Стрелка вверх - предыдущий PROMPT.
Стрелка вниз - следующий PROMPT.
Home - первый PROMPT.
End - последний PROMPT.
Enter - выбор элемента.
Esc - выход из режима без выбора.
Первая буква - выбор элемента с той же первой буквой в PROMPT.
MENU TO может быть вложено внутрь SET KEY-процедуры без очистки
текущих PROMPT ( в отличии от GET/READ ). Однако, если для
вложенных меню будут использованы одни и те же переменные, они
будут сохранять свои предыдущие значения, если не объявить их
- 81 -
PRIVATE в SET KEY-процедуре. В связи с этим рекомендуется
использовать различные переменные.
В SET KEY-процедуре есть возможность прочесть имя используемой
переменной при помощи READVAR().
Для каждого меню разрешено не более 32 элементов PROMPT.
Пример:
SET MESSAGE TO 23 CENTER
@ 6,10 PROMPT "Add" MESSAGE "New"
@ 7,10 PROMPT "Edit" MESSAGE "Change"
@ 9,10 PROMPT "Quit" MESSAGE "Return to DOS"
MENU TO Choice
Библиотека: CLIPPER.LIB
См.также: @...PROMPT, SET MESSAGE, SET WRAP, ACHOICE().
NOTE/*/&&
Cинтаксис: NOTE / * [<этекст>] / [<экоманда>] && [<этекст>]
Размещает в тексте программы комментариев. <этекст> - строка
символов, следующая за знаком комментария.
NOTE или (*) должны стоять первыми в строке, тогда как (&&)
может быть в любом месте. Все символы после знака комментария
игнорируются транслятором до первого символа "конец строки".
Следовательно комментарий не может быть продолжен ( при помощи
<;>) на другую строку.
Библиотека: CLIPPER.LIB
PACK
Синтаксис: PACK.
Физически удаляет помеченные записи из текущего файла данных.
Кроме удаления помеченных записей производится переиндексация
всех, используемых в текушей рабочей области индексных файлов.
Библиотека: CLIPPER.LIB
См.также: DELETE, RECALL, REINDEX, SET DELETED, ZAP, DELETED().
PARAMETERS
Синтаксис: PARAMETERS <эсписок переменных>.
Определяет в подпрограмме переменные, получающие пересылаемые
значения или ссылки.
- 82 -
<эсписок переменных> - одна или более переменная, разделенные
запятыми.
Параметры можно разделить на формальные и действительные.
Формальными параметрами называются переменные, перечисленные в
качестве аргументов в операторе PARAMETERS. Действительными
параметрами являются аргументы команды DO...WITH ( вызов
процедуры) или пользовательской функции.
Существуют два способа передачи параметров: "значением" и
"ссылкой". Передача значения вызывает присваивание величины
действительного параметра его формальным элементом в списке
PARAMETERS. В этом случае действия над формальным параметром в
подпрограмме не вызовут никаких изменений соответствующего ему
действительного параметра. Напротив, передача ссылки означает
фактическое присвоение одной физической единицы хранения обоим
параметрам; и формальному и действительному. Из этого следует,
что изменения формального параметра, в случае передачи ссылки,
непосредственно скажутся на величине его действительного
партнера.
Следует заметить, что Клиппер в данном случае не проверяет
взаимного соответствия списков действительных и формальных
параметров. Чтобы определить количество действительных
параметров, можно воспользоваться PCOUNT().
Для корректной передачи параметров подпрограммам и
пользовательским функциям необходимо соблюдать следующие
правила:
1. Переменные и массивы передаются в подпрограммы ссылкой.
Элементы массивов, выражения, переменные внутри скобок и поля
передаются значением ( поля должны быть заключены в скобки ).
2. Функциям параметры передаются по умолчанию как значения.
Однако, они могут быть переданы как ссылки, если переменной
будет предшествовать символ @. Массивы всегда передаются как
ссылки, элементы массивов - только как значения.
Есть возможность пересылать строки символов в качестве
параметров, находясь в DOS-окружении. Строки должны быть
разделены пробелами. Параметр, заключенный в кавычки
пересылается как одна строка. Например:
C> PROG "CLIPPER COMPILER" 5
Примеры:
В следующем примере "memvar" и "array" передаются в подпрограмму
как ссылки, тогда как "memvar2" - как значение:
DECLARE array[1]
STORE "old" TO memvar, memvar2, array[1]
DO Proc WITH memvar, (memvar2), array
*
RETURN
PROCEDURE Proc
- 83 -
PARAMETERS new_war, new_war2, new_array
STORE "new" TO new_var, new_var2, new_array[1]
RETURN
Этот пример демонстрирует передачу параметров пользовательским
функциям.
STORE 10 TO Memvar, memvar2
Modvar (@memvar, memvar2)
*
? memvar, memvar2 && Результат : 20 10
*
RETURN
FUNCTION Modvar
PARAMETER new_var, new_var2
STORE 20 TO new_var, new_var2
RETURN " "
Следующий пример демонстрирует передачу параметров из
DOS-командной строки в программу CLIPTEST:
* Cliptest.prg
PARAMETERS char, num, date, logical
?? TYPE ("char")
?? TYPE ("num")
?? TYPE ("date")
?? TYPE ("logical")
RETURN
Если выполнить CLIPTEST с помощью следующей командной строки
DOS:
C> CLIPTEST string 12 CTOD(SPACE(8)).T.
то результат будет выглядеть следующим образом:
С С С С
Т.е. все четыре пересылаемых параметра восприняты программой как
строки символов. Если же выполнить эту процедуру из тела
Клиппер-программы с помощью строки:
DO Cliptest WITH "string", 12, CTOD(SPACE(8)), .T.
то результат будет совсем другой:
C N D L
Библиотека: CLIPPER.LIB
См.также: DO, PRIVATE, PROCEDURE, PUBLIC, SET PROCEDURE, PCOUNT().
PRIVATE
- 84 -
Синтаксис: PRIVATE <эсписок переменных>
"Прячет" переменные, объявленные ранее PUBLIC.
<эсписок переменных> - список переменных. Заметим, что PRIVATE
ALL, LIKE, EXCEPT здесь не поддерживаются.
Когда в подпрограмме переменная объявляется PRIVATE, то
существующая копия этой переменной становится недоступной пока
не завершится подпрограмма с этим объявлением.
Библиотека: CLIPPER.LIB
См.также: PARAMETERS, PUBLIC.
PROCEDURE
Синтаксис: PROCEDURE <эпроцедура>... RETURN
Обозначает начало подпрограммы.
<эпроцедура> - имя подпрограммы. Может содержать до 10 символов и
должно начинаться с буквы. Каждое имя должно отличатся от имен
других подпрограмм, функций и программ.
Процедура - это блок команд, начинающийся с команды PROCEDURE.
Может располагаться в любом месте программного файла, но не
может быть вложен внутрь другой подпрограммы.
Подпрограмма должна завершаться оператором RETURN, который
передает управление вызывающей программе.
Следующий пример демонстрирует вызов двух подпрограмм Proc1,
Proc2:
* Main.prg
DO Proc1
DO Proc2
RETURN
PROCEDURE Proc1
? "Proc one" && Результат: Proc one
RETURN
PROCEDURE Proc2
? "Proc two" && Результат: Proc two
RETURN
Библиотека: CLIPPER.LIB
См.также: DO, SET PROCEDURE.
PUBLIC
Синтаксис: PUBLIC <эсписок переменных> [,clipper]
Объявляет определенные переменные действительными в любой части
программы ( на любом уровне ).
- 85 -
<эсписок переменных> - список переменных.
clipper - параметр, представляющий собой имя логической
переменной, которая при объявлении ее PUBLIC становится .T..
Этот факт может быть использован в случае, когда написанная
программа должна одинаково успешно компилироваться с помощью
Клиппер и исполнятся под управлением dBASE III PLUS. Для этого
имеющиеся в программе команды, поддерживаемые только Клиппер,
при исполнении в dBASE можно обойти, используя структуры
IF...ENDIF с переменной clipper в качестве аргумента.
Объявление несуществующей переменной как PUBLIC порождает новую
логическую переменную со значением .F.. То же для существующей
переменной делает ее доступной в любом месте программы. Нельзя
объявлять PUBLIC существующую локальную (PRIVATE) переменную. В
этом случае Клиппер просто проигнорирует это объявление. Однако
PUBLIC- переменные могут быть временно "спрятаны", будучи
объявленными PRIVATE.
Примеры:
? TYPE("var1") && Результат: U
? TYPE("var2") && Результат: U
DO Ppoc1
? TYPE("var1") && Результат: C
? TYPE("var2") && Результат: U
RETURN
PROCEDURE Proc1
PUBLIC var1
var1 = "string1"
var2 = "string2"
RETURN
Следующий пример иллюстрирует возможность присутствия в
программе, исполняемой под управлением dBASE, специфических
Клиппер-команд:
PUBLIC clipper
@ 25, 10 SAY "Press any key to continue"
IF clipper
key = INKEY(0)
ELSE
key = INKEY()
DO WHILE key = 0
key = INKEY()
ENDDO
ENDIF
Библиотека: CLIPPER.LIB
См.также: PARAMETERS, PRIVATE.
QUIT / CANCEL
Синтаксис: QUIT / CANCEL
Заканчивает выполнение программы, закрывает все открытые файлы и
- 86 -
возвращает управление операционной системе.
QUIT или CANCEL могут быть использованы в любом месте программы
для завершения работы и возврата в операционную систему.
Оператор RETURN, исполненный в подпрограмме высшего уровня,
|