ЭЛЕМЕНТЫ ШАБЛОНОВ
Элементы шаблонов предлагают формат масок для просмотра и/или редактирования переменных. Элементы шаблонов можно использовать как параметры для описания переменных типа STRING, ENTRY, или STRING OPTION в SCREEN-структурах; как параметры операторов STRING в REPORT-структурах; как параметры некоторых процедур и функций Клариона; или, как параметры описаний STRING, CSTRING и PSTRING. Есть семь типов элементов шаблонов: числовые и валюта, научная нотация, дата, время, образец, key-in template и строки.
Шаблоны
чисел и валюты
@N[валюта][знак][заполнение]размер[группирование][места][валюта][знак][B]
@N |
Все
шаблоны чисел и валюты
начинаются с @N. |
валюта |
Либо знак доллара ($) либо строковая константа, заключенная в тильды (~). Если есть признак знака и нет признака заполнения, то символ валюты будет "плавать" возле старшей левой цифры. Если же есть признак заполнения, то символ валюты остается в крайней левой позиции. Если символ валюты стоит после размера и группирования, то он будет располагаться в конце показываемого числа.
|
знак |
Задает формат вывода отрицательных чисел. Если тире стоит перед ЗАПОЛНЕНИЕМ и РАЗМЕРом, то отрицательные числа будут выводиться с ведущим знаком "минус". Если же тире идет после РАЗМЕРа, ГРУППИРОВАНИя, places, и ВАЛЮТы, то числа будут выводиться с хвостовым минусом. Если в обоих позициях, предназначенных для ЗНАКа стоят скобки, то отрицательные числа будут выводиться без минуса, но заключенными в скобки.
|
заполнение |
Указывает вид ведущих нулей нули, пробелы или звездочки (*). Если ЗАПОЛНЕНИЕ опущено, то ведущие пробелы подавляются. 0 Ведущие нули выводятся, ГРУППИРОВАНИЕ подавлено Вместо нулей пробелы, ГРУППИРОВАНИЕ подавлено * Вместо ведущих нулей выводятся звездочки
|
размер |
РАЗМЕР требуется, чтобы указать общее число значащих цифр для вывода, включая количество цифр в признаке МЕСТА и всех символов форматирования.
|
группирование |
Признак ГРУППИРОВАНИЯ (кроме запятой, которая принимается по умолчанию) может быть помещен справа от РАЗМЕРА, для указания разделитель групп из трех цифр.
|
. | Порождает точки
|
- | Порождает
тире
|
_ | Порождает
пробелы (НЕ подчеркивания!)
|
места
|
Задает символ десятичного разделителя и число цифр в дробной части. Число цифр в дробной части должно быть меньше, чем РАЗМЕР. Десятичным разделителем может быть точка (.), слабое ударение ('), или буква "v" (только для описания формата хранения STRING-полей, а не для вывода). . Точка порождает точку как десятичный разделитель ` Слабое ударение порождает запятую как десятичный разделитель. v НЕ порождает десятичный разделитель (только для хранения STRING-полей)
|
B |
Если значение нулевое, то число выводится в виде пробелов.
|
Элементы шаблонов чисел и валюты форматируют числа для вывода на экран или в отчет. Если значение больше, чем можно вывести в текущем шаблоне, такое значение выводится в виде строки из звездочек.
Пример:
Число |
Результат |
Формат |
@N9 |
4,550,000 |
Девять
цифр, группирование
запятыми (по умолчанию) |
@N_9B |
4550000 |
Девять
цифр, без группирования,
ведущие нули выводятся как
пробелы |
@N09 |
004550000 |
Девять
цифр, ведущие нули
выводятся |
@N*9 |
***45,000 |
Девять цифр, заполнение звездочками, группирование запятыми |
@N9_ |
4 550 000 |
Девять цифр, группирование пробелами |
@N9. |
4.550.000 |
Девять цифр, группирование точками |
Десятич.
дробь |
Результат |
Формат |
@N9.2 |
4,550.75 |
Две цифры в
дробной части, десятичный
разделитель - точка |
@N_9.2B |
4550.75 |
То же, без группирования, если ноль, то выводится строка пробелов. |
@N_9'2 |
4550,75 |
Две цифры в дробной части, десятичный разделитель запятая |
@N9.'2 |
4.550,75 |
Десятичный разделитель запятая, группирование точками |
@N9_'2 |
4 550,75 |
Десятичный разделитель запятая, группирование пробелами |
Со знаком |
Результат |
Формат |
@N-9.2B |
2,347.25 |
Ведущий минус, если ноль, то вывести пустую строку |
@N9.2- |
2,347.25- |
Хвостовой
минус |
@N(10.2) |
(2,347.25) |
Вывести в скобках, если отрицательное |
Знак
доллара |
Результат |
Формат |
@N$9.2B |
$2,347.25 |
Ведущий знак доллара, вывести пустую строку, если ноль |
@N$10.2- |
$2,347.25- |
Ведущий знак доллара, хвостовой минус, если отрицательное |
@N$(11.2) |
$(2,347.25) |
Ведущий знак доллара, вывести в скобках, если отрицательное |
Национальные
валюты |
Результат |
Формат |
@N12_'2~ F~ |
1 5430,50 F |
Франция |
@N~L. ~12' |
L.1.430.050 |
Италия |
@N~L~12.2 |
L1,240.50 |
Великобритания |
@N~kr~12'2 |
kr1.430,50 |
Норвегия |
@N~DM~12'2 |
DM1.430,50 |
Германия |
@N12_'2~ mk~ |
1 430,50 mk |
Финляндия |
@N12'2~ kr~ |
1,430.50 kr |
Швеция |
Только хранение
Шаблоны:
Variablel STRING(@N_6v2) !Шесть байт хранятся БЕЗ десятич-
!ного разделителя
CODE
Variablel="1234.56" !Храним в виде '123456'
SHOW(1,1,Variablel,@N_7.2)
!Выводим с десятичн. точкой: '1234.56'
Шаблоны научной нотации
@Em.n[B]
@E |
Все шаблоны научной нотации начинаются с @E. |
m |
Общее число символов в формате, предлагаемом данным шаблоном. |
n |
Число цифр
после десятичной точки. |
B |
Если число равно нулю, то вывести пустую строку |
Шаблоны научной нотации форматируют очень большие или же очень маленькие числа. Вывод в виде десятичного числа в степени десяти.
Пример:
Шаблон |
Значение |
Результат |
@E9.0 |
1,967,865 |
.20e+007 |
@E12.1 |
1,967,865 |
1.9679e+006 |
@E12.1B |
0 |
|
@E12.1 |
1,967,865 |
1.9679 e+006 |
@E12.1 |
.000000032 |
3.2000e-008 |
Шаблоны даты
@Dn[s][B]
@D |
Все шаблоны даты начинаются с @D. |
n |
Номер шаблоны даты. Допустимые номера от 1 до 16. |
s |
Разделитель. Слэш (/) ставится между днем, месяцем и годом в большинстве шаблонов даты. Можно использовать альтернативные разделители, как то:
. Порождает точки
` (слабое ударение)порождает запятые
- Порождает тире
_
(подчеркивание) порождает пробелы |
B |
Вывести пустую строку, если число равно нулю. |
Даты можно хранить в числовых переменных (обычно LONG), DATE-полях (для совместимости с Btrieve), или в STRINGах описанных в виде дат. Дата, хранящаяся в числовой переменной называется Стандартной Кларионовской датой. Ее значение представляет собой количество дней, прошедших с 28 декабря 1800 года. Шаблон даты преобразует это число в один из форматов даты.
Для ввода данных нельзя использовать шаблоны @D3, @D4, @D7 и @D8 поскольку в них требуется вводить не только цифры, но и буквы.
Пример:
Шаблон |
Формат |
Результат |
@Dl |
mm/dd/yy |
10/31/59 |
@D2 |
mm/dd/yyyy |
10/31/1959 |
@D3 |
mmm dd, yyyy |
OCT 31,1959 |
@D4 |
mmmmmmmmm dd, yyyy |
October 31, 1959 |
@D5 |
dd/mm/yy |
31/10/59 |
@D6 |
dd/mm/yyyy |
31/10/1959 |
@D7 |
dd mmm yy |
31 OCT 59 |
@D8 |
dd mmm yyyy |
31 OCT 1959 |
@D9 |
yy/mm/dd |
59/10/31 |
@D10 |
yyyy/mm/dd |
1959/10/31 |
@D11 |
yymmdd |
591031 |
@D12 |
yyyymmdd |
19591031 |
@D13 |
mm/yy |
10/59 |
@D14 |
mm/yyyy |
10/1959 |
@D15 |
yy/mm |
59/10 |
@D16 |
yyyy/mm |
1959/10 |
Альтернативные разделители
@Dl. |
mm.dd.yy |
Разделитель точка |
@D2- |
mm-dd-yyyy |
Разделитель
тире |
@D5_ |
dd mm yy |
Подчеркивание
порождает разделитель
пробел |
@D6` |
dd,mm,yyyy |
Слабое ударение порождает разделитель запятую |
Шаблоны времени
@Tn[s][B]
@T |
Все шаблоны времени начинаются с @T. |
n |
Номер формата времени. Допустимые номера форматов от 1 до 6. |
s |
Разделитель. Двоеточие (:) ставится по умолчанию между часами, минутами и секундами в большинстве форматов времени. Можно использовать альтернативные разделители, как то:
. Порождает
точки
' (слабое ударение) порождает запятые
- Порождает тире
_
(подчеркивание) порождает пробелы |
B |
Если значение равно нулю, то вывести пустую строку. |
Время можно хранить в числовой переменной (обычно LONG), в TIME- полях (для совместимости сBtrieve), или в STRINGах, описанных в формате времени. Время, хранящееся в числовой переменной называется стандартным кларионовским временем. Оно представляет из себя количество сотых долей секунды, прошедших с полуночи. Шаблон времени переводит это число в один из 6 форматов времени.
Нельзя
использовать для ввода шаблоны
(@T3 и @T6), в которых требуется
вводить не только цифры, но и
буквы.
Пример:
Шаблон |
Формат |
Результат |
@T1 |
hh:mm |
17:30 |
@T2 |
hhmm |
1730 |
@T3 |
hh:mmXM |
5:30PM |
@T4 |
hh:mm:ss |
17:30:00 |
@T5 |
hhmmss |
173000 |
@T6 |
hh:mm:ssXM |
5:30:00PM |
Альтернативные
разделители
@T1. |
hh.mm |
Разделитель
точка |
@T1- |
hh-mm |
Разделитель
тире |
@T3_ |
hh mmXM |
Подчеркивание
порождает пробелы |
@T4' |
hh,mm,ss |
Слабое
ударение порождает
запятые |
Шаблоны
"по образцу"
@p[<][#][x]P[B]
@P |
Все
шаблоны "по образцу"
начинаются с разделителя @P
и заканчиваются
разделителем P. Регистр
обоих разделетелей должен
быть один и тот же. |
< |
Целочисленная
позиция. Если в этой
позиции ноль, то вывести
пробел. |
# |
Целочисленная
позиция. В этой позиции
вывести цифру, независимо
от ее значения. |
x |
Необязательный
символ для вывода. Эти
символы будут
присутствовать в выводной
строке. |
p |
Все
шаблоны "по образцу"
должны заканчиваться на P.
Если разделитель @p введен
на нижнем регистре, то и
конечный разделитель P
тоже должен быть в нижнем
регистре. |
B |
Если ВСЕ
число равно нулю, то
вывести пустую строку. |
Шаблоны "по
образцу" содержат
необязательные целочисленные
пози- ции и необязательные
символы редактирования. Любой
символ кроме < или # считается
символом редактирования,
который появится в
форматированной
строке-результате. Разделители
@P и P чувствительны к регистру,
на котором они введены. Это
сделано для того, чтобы, если
скажем, надо ввести символ
"Р", то можно использовать
разделители "р" и
наоборот.
Пример:
Шаблон |
Значение |
Результат |
@P###-##-####P |
215846377 |
215-84-6377 |
@P<#/##/##P |
103159 |
10/31/59 |
@P(###)###-####P |
3057854555 |
(305)785-4555 |
@P###/###-####P |
7854555 |
000/785-4555 |
@p<#:##PMp |
530 |
5:30PM |
@P<#'<#"P |
506 |
5' 6" |
@P<#Ib. <#oz.P |
902 |
91b. 2oz. |
@P4##A-#P |
112 |
411A-2 |
Key-in
Template Pictures
@K[@][#][<][x][\][?][^][_][Ѓ]K[B]
@K |
Все key-in
template шаблоны начинаются
разделителем @K и
завершаюися разделителем
K. Регистр обоих "К"
должен быть одним и тем же. |
@ |
Разрешены
только буквы на верхнем и
нижнем регистрах. |
# |
Разрешены
целые числа от 0 до 9. |
< |
У целых
чисел выводить лидирующие
нули пробелами. |
x |
Представляет
необязательные постоянные
символы для показа (любые
символы, пригодные для
вывода на экран). Эти
символы попадают без
изменений в
результирующую строку. |
\ |
Следующий
за \ символ выводить на
экран как печатаемый. Так
можно включить в
результирующую строку
любые символы
форматирования
(@,#,<,\,?,^,_,Ѓ) как обычные
печатаемые символы. |
? |
В этой
позиции может быть любой
символ. |
^ |
В этой
позиции разрешены только
буквы на верхнем регистре.
В этой позиции разрешены
только буквы на нижнем
регистре |
| |
Ограничитель.
Только данные введенные до
| и печатаемые символы,
введенные до | будут
помещены в результирующую
строку. |
K |
Все key-in
template шаблоны завершаются
символом "K". Если
разделитель @k был введен
на нижнем регистре, то и
завершающий k должен быть
введен на нижнем регистре. |
B |
Если ВСЕ
число рано нулю, то вывести
пустую строку. |
Key-in шаблоны
могут содержать целочисленные
позиции ( # < ), символьные
позиции ( @ ^ _ ), места для любых
символов ( ? ), и печатаемые
символы. Любой символ, кроме
символов форматирования,
рассматривается как
печатаемый, который попадает в
форматированную
строку-результат. Разделители
@K иd K чувствительны к регистру
по той же причине, что и @P и P в
шаблонах "по образцу".
Key-in Шаблоны
специфичны для полей типа STRING,
PSTRING, и CSTRING для возможности
произвольного редактирования
и проверки допустимости поля.
Использование key-in шаблонов,
содержащих любые алфавитные
индикаторы ( @ ^ _ ) с полями для
ввода чисел дает
непредсказуемые результаты.
Поскольку
использование режима вставки
для key-in шаблонов, может также
привести к непредсказуемым
результатам, то key-in шаблоны
всегда принимают данные в
режиме надпечатки, даже если
есть атрибут INS.
Пример:
Шаблон |
Введено
значение |
Строка-результат |
@K###-##-###K |
215846377 |
215-84-6377 |
@K####Ѓ-####K |
33064 |
33064 |
@K####Ѓ-####K |
330643597 |
33064-3597 |
@K<# ^^^ ##K |
10AUG59 |
10 AUG 59 |
@K(###)@@@-##\@##K |
305abc4555 |
(305)abc-45@55 |
@K###/?##-####K |
7854555 |
000/785-4555 |
@k<#:##^Mk |
530P |
5:30PM |
@K<#'
<#"K |
506 |
5' 6" |
@K4#_#A-#K |
1g12 |
41glA-2 |
Строковые
шаблоны
@Slength
@S |
Все
строковые шаблоны
начинаются с @S. |
length |
Определяет
количество символов в
шаблоне формата. |
Строковый
шаблон описывает
НЕформатированную строку
заданной длины.
Пример:
Name STRING(@S20) !20-символьное поле-строка
АТРИБУТЫ ПЕРЕМЕННЫХ
PRE (префикс метки)
PRE(prefix)
prefix |
Допустимые
символы буквы, цифры от 0 до
9 и символ подчеркивания.
Префикс должен ничинаться
с буквы и не должен быть
зарезервированм словом. |
Атрибут PRE
предусматривает префикс метки
для сложных структур данных. Он
используется для того, чтобы
различать переменные с
одинаковыми именами в разных
структурах. При обращении к
переменной исполняемымы
операторами, при присвоениях и
передаче в списках параметров,
префикс присоединяется к метке
двоеточием (Pre:Метка). PRE можно
использовать со следующими
структурами данных:
DETAIL |
FILE |
FOOTER |
GROUP |
HEADER |
OPTION |
QUEUE |
RECORD |
REPEAT |
REPORT |
SCREEN |
|
Пример:
MasterFile FILE,DRIVER('Clarion'),PRE(Mst) !Declare master
Record RECORD ! file layout
AcctNumber LONG
. .
Detail FILE,DRIVER('Clarion'),PRE(Dtl) !Declare detail
! file layout
Record RECORD
AcctNumber LONG
. .
GROUP,PRE(Mem) !Declare some memory variables
Message STRING(30)
Page LONG
Line LONG
Device STRING(30)
.
CODE
IF Dtl:AcctNumber <> Mst:AcctNumber !Is it a new account
Mem:Message - 'New Account' ! display message
DO MatchMaster ! get new record
.
См. также: Зарезервированные
слова
DIM (размерность массива)
DIM(измерение,....,измерение)
измерение |
Числовая константа,
которая задает количество
элементов в данном измерении массива. |
Атрибут DIM объявляет
перемнную-массив. Такая
переменная повторяется
столько раз, сколько указано в
параметрах ИЗМЕРЕНИЕ.
Многомерные массивы можно
рассматривать как вложенные
одномерные. Каждое измерение
массива имеет соответствующий
индекс. Таким образом,
обращаясь к переменной -
элементу трехмерного массива,
надо указать три индекса. Хотя
на число измерений не
накладывается ограничений, но
размер массива не должен
превышать 65,520б.С атрибутом DIM
можно использовать следующие
типы данных:
SHORT |
REAL |
STRING |
CSTRING |
PSTRING |
ULONG |
USHORT |
SREAL |
DATE |
TIME |
Индексы однозначно
определяют конкретный элемент
массива. Список индексов
содержит индексы для каждого
ИЗМЕРЕНИЯ массива. В списке,
индексы отделяются друг от
друга запятыми, а весь список
заключается в квадратные
скобки ([ ]). Индекс может быть
числовой константой,
выражением или функцией. Если
надо обратиться ко всему
массиву целиком, то надо
использовать метку этого
массива без списка индексов.
Структура GROUP - особый случай.
Каждый уровень вложенности
добавляет индексы и GROUP и ее
переменным. Данные, описанные в
GROUP можно использовать точно
так же, как и собственно GROUP.
Пример:
Screen GROUP !Текст на экране
Row GROUP,DIM(25) !25 строк
Pos GROUP,DIM(80) !Две тысячи знакомест
Attr BYTE !Байт атрибута
Char BYTE !Собственно символ
. . . !Завершаем все три группы
В предыдущей группе:
Screen это 4,000байтная GROUP
Row[1] это 160байтная GROUP
Pos[1,1] это 2хбайтная GROUP
Attr[1,1] это BYTE
Char[1,1] это BYTE
Month STRING(10),DIM(12) !Размерность для месяца - 12
CODE
CLEAR(Month) !Весь массив заполнить пробелами
Month[1] = 'January' !Заполнить массив названиями
Month[2] = 'February'
MonthE3] = 'March'
См. также: MAXIMUM
Массивы как
параметры процедур и функций
Массив можно передать в PROCEDURE
или FUNCTION. Прототип, описанный в
MAP-структуре должен описывать
тип данных "массив" как
параметр-переменную
("передается по адресу") с
пустым списком индексов.
Вызывающий оператор может
передать массив в ROCEDURE или
FUNCTION.
Пример:
PROGRAM
MAP
MainProc
AddCount(*LONG[,],*LONG[,]) !Передаем 2 двумерных
. !масива типа LONG
CODE
MainProc
MainProc PROCEDURE
TotalCount LONG,DIM(10,10)
CurrentCnt LONG,DIM(10,10)
CODE
AddCount(TotalCount,CurrentCnt) !Вызывая процедуру, переда-
!ем ей массивы
AddCount PROCEDURE(Tot,Cur) !Процедуре нужны два массива
CODE
LOOP I# = 1 TO MAXIMUM(Tot,1) !Цикл по первому индексу
LOOP J# = 1 TO MAXIMUM(Tot,2) !Цикл по второму индексу
Tot[I#,J#l += Cur[I#,J#] ! увеличить TotalCount на
. . ! CurrentCnt
CLEAR(Cur) !Очистить массив CurrentCnt
RETURN
См. также: DIM, Прототипы процедур и функций, MAXIMUM
EXTERNAL (переменная описана извне)
EXTERNAL
Атрибут EXTERNAL указывает на то, что переменная, которой он присвоен, описана во внешней библиотеке. Таким образом, переменная с атрибутом EXTERNAL определена и может использоваться кларионовским кодом, но под нее не будет выделена память. Память для такой переменной выделяется самой внешней библиотекой. Этот атрибут позволяет Clarion-программам иметь доступ к полям, описанным как PUBLIC во внешних библиотеках.
EXTERNAL допустим только для
переменных, описанных ВНЕ
структур FILE, QUEUE или GROUP.
Пример:
PROGRAM
MAP
MODULE('External.Obj')
AddCount,PASCAL !External library with PASCAL
. . ! calling convention
TotalCount LONG,EXTERNAL !Variable declared in external library
См. также: NAME
NAME (указать внешнее имя)
NAME([ |
constant
variable |
] |
constant |
Строковая константа. |
variable |
Метка STRING-переменной,
описанной в области
описания глобальных
данных или в области
описания данных
модуля-члена. |
Атрибут NAME задает
"внешнее" имя. Он
полностью независим от
атрибута EXTERNAL - между ними не
требуется никакой связи, хотя
оба этих атрибута могут быть у
одной и той же переменной.
Атрибут NAME можно
использовать в прототипах
процедур и функций, применять к
FILE, KEY, INDEX, MEMO, любому полю,
описанному в FILE или QUEUE
структурах, или к любому полю
вне структуры. Атрибут NAME имеет
различные свойства, в
зависимости от того, где он
использован.
NAME(константа) можно задать в
прототипах процедур или
функций. Константа - это
внешнее имя, используемое
компоновщиком для
идентификации процедуры или
функции из внешней библиотеки.
Атрибуты NAME(константа) или
NAME(переменная) в описании FILE
задает ДОСовскую спецификацию
полного имени файла. Если
константа или переменная не
содержит диск и путь, то
подразумеваются текущие диск и
каталог. Если опущено
расширение файла, то
подразумевается расширение,
стандартное для данного
файлового драйвера. Некоторые
файловые драйверы требуют,
чтобы KEYи, INDEXы, или MEMO-поля были
в отдельных файлах. Таким
образом, NAME можно применить к
описаниям KEY, INDEX или MEMO. Атрибут
NAME без константы или
переменной, ссылается на метку
того описательного оператора,
к которому он был применен
(включая префикс, если таковой
указан).
NAME(константа) может
применятся к любому полю,
описанному в структуре RECORD. Это
позволяет использовать имена
полей, не нарушающих
ограничений на имена,
накладываемые отдельными
файловыми драйверами.
NAME(константа) можно применять
к любому полю в структуре QUEUE.
Так достигается возможность
динамических сортировок во
время исполнения.
NAME(константа) можно также
применять к любой переменной,
описанной вне какой-либо
структуры. Это дает
возможность компоновщику по
внешнему имени
идентифицировать переменную,
описанную во внешней
библиотеке. Если переменная
имеет еще атрибут EXTERNAL, то она
описана, и память под нее
выделяется самой внешней
библиотекой. Без атрибута EXTERNAL,
такая переменная описывается,
и память под нее выделяется в
кларионовской программе, и она
является внешней по отношению
ко внешней библиотеке.
Пример:
PROGRAM
MAP
MODULE('External.Obj')
AddCount(LONG),LONG,C,NAME('_AddCount')
!C function named ' AddCount,
. .
Cust FILE,PRE(Cus),NAME(CustName) !Filename in CustName variable
CustKey KEY('Name'),NAME('c:\data\cust.idx')
!Declare key,cust.idx
Record RECORD
Name STRING(20),NAME !Default NAME to 'Cus:Name'
. !End file declaration
SortOue QUEUE,PRE(Que)
Fieldl STRING(10),NAME('FirstField') !QUEUE SORT NAME
Field2 LONG,NAME('SecondField') !QUEUE SORT NAME
.
CurrentCnt LONG,EXTERNAL,NAME('Cur') !Field declared public in
! external library as 'Cur'
TotalCnt LONG,NAME('Tot') !Field declared external
!in external library as 'Tot'
См. также: прототипы процедур
и функций, FILE, KEY, INDEX, QUEUE, EXTERNAL
OVER (разделяет место в памяти)
OVER(переменная)
переменная Метка переменной,
которая уже занимает память,
подлежащую разделу.
Атрибут OVER позволяет
ссылаться на один и тот же
участок памяти двумя разными
путями. Поле, описанное с
атрибутом OVER, должно быть НЕ
больше, чем переменная, поверх
которой она накладывается (хотя,
конечно, она может быть меньше).
(SPA. Для тех кому это трудно
понять сразу, как мне было в
свое время, скажу что этот
механизм аналогичен
паскалевским записям с
вариантами)
Поле в структуре GROUP НЕ может
быть описано поверх
переменной, которая находится
ВНЕ этой структуры GROUP. Также,
нельзя описать поле поверх
переменной, которая является
частью списка параметров
процедуры или функции.
Пример:
CustNote FILE,PRE(Csn) !Declare CustNote file
Notes MEMO(2000) !The memo field
Record RECORD
CustID LONG
. .
CsnMemoRow STRING(IO),DIM(200),OVER(Csn:Notes) !Csn:Notes
!можно рассматривать как одно
!целое или блоками по 10 байт
См. также: DIM
ДИРЕКТИВЫ КОМПИЛЯТОРА
EQUATE (назначить метку)
метка |
EQUATE( |
label
constant
picture |
) |
метка |
Метка исполняемого
оператора. Используется
для присвоения оператору
еще одной метки. |
constant |
Числовая или символьная
константа. Используется
для описания сокращенного
названия содержимого
константы, и позволяет
легко изменять и находить
эту константу. |
picture |
Элемент шаблона. Дает
сокращенное имя шаблону.
Тем не менее, форматтеры
экранов и отчетов в
кларионовском редакторе
не распознают назначенные
метки как разрешенные
шаблоны. |
Директива EQUATE не занимает
память во время исполнения. Она
используется для присвоения
метки другой метке или
константе. Метка директивы EQUATE
не может быть такой же, как ее
параметр.
Пример:
Init EQUATE(SetUpProg) !Обзовем процедуру по другому
Off EQUATE(0) !Off означает нуль
On EQUATE(1) !On означает один
Pi EQUATE(3.1415927) !Значение числа ПИ
EnterMsg EQUATE('Press Ctrl-Enter to SAVE')
SocSecPic EQUATE(@P###-##-##IfltP)!Формат номера карточки
!социального страхован.
См. также: Зарезервированные
слова
SIZE (размер памяти в байтах)
SIZE( |
label
constant
picture |
) |
метка |
Метка ранее описанной
переменной. |
constant |
Числовая или символьная
константа. |
picture |
Элемент шаблона. |
SIZE заставляет компилятор
сообщить количество памяти (в
байтах) выделенной для
хранения параметра.
Пример:
SavRec STRING(1),DIM(SIZE(Cus:Record)
!Строк столько же, каков размер записи
StringVar STRING(SIZE('Clarion Software, Inc.'))
!Строка должна быть достаточной для этой
!константы длины
LOOP I# = 1 TO SIZE(ParseString)
!Цикл по все символам строки
PicLen = SIZE(@P(###)###-####P) !Сохраняем размер шаблона
Назад | Содержание | Вперед