|
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ГЛАВА 3 - ОПИСАНИЕ ПЕРЕМЕННЫХ
BYTE (однобайтное целое без знака)
метка BYTE(initial value)[,DIM()][,OVER()][,NAME()][,EXTERNAL]
BYTE описывает однобайтное беззнаковое целое. Присвоение значения выходящего за пределы диапазона приводит к непредсказуемым результатам. Пример:
ExampleFile FILE,DRIVER('Clarion') !Declare a file
Record RECORD
CountS BYTE,NAME('Counter')!Declare with external name
. .
SHORT (двухбайтное целое со знаком)
метка SHORT(initial value)[,DIM()][,OVER()][,NAME()][,EXTERNAL]
SHORT описывает двухбайтное целое со знаком в формате целого слова Intel 8086. Старший бит в этой конфигурации - знаковый бит (0 = плюс, 1 = минус. Отрицательные значения представляются в стандартном дополнении до двух. Присвоение значения, выходящего за пределы диапазона SHORT дает к непредсказуемые результатам. Пример: Count2 SHORT,OVER(Countl) !Declare OVER the two-byte signed
! integer
Count3 SHORT,DIM(4) !Declare it an array of 4 shorts
Count4 SHORT(5) !Declare with initial value
Count5 SHORT,EXTERNAL !Declare as external
Count6 SHORT,NAME('SixCount') !Declare with external name
Examp]eFile FILE,DRIVER('Clarion') !Declare a file
Record RECORD
Count7 SHORT,NAME('Counter') !Declare with external
. . ! name
USHORT (two-byte unsigned integer)метка USHORT(initial value)[,DIM()][,OVER()][,NAME()][,EXTERNAL]
USHORT описывает двухбайтное целое без знака в формате слова Intel 8086. В этой конфигурации НЕТ знакового бита. Присвоение значения, выходящего за пределы диапазона USHORT приводит к не предсказуемым результатам. Пример: Countl USHORT !Declare two-byte unsigned integer
Count2 USHORT,OVER(Countl) !Declare OVER the two-byte unsi gned
! integer
Counts USHORT.DIM(4) !Declare it an array of 4 unsigned
! shorts
Count4 USHORT(5) !Declare with initial value
Count5 USHORT,EXTERNAL !Declare as external
Count6 USHORT,NAME('SixCount') !Declare with external name
ExampleFile FILE,DRIVER('Btrieve') !Declare a file
Record RECORD
Count7 USHORT,NAME('Counter') !Declare with external
. . ! name
LONG (четырехбайтное целое со знаком)
метка LONG(initial value)[,DIM()][,OVER()][,NAME()][,EXTERNAL]
LONG описывает четырехбайтное целое со знаком в формате длинного целого Intel 8086. Старший бит - знаковый, (0 положительное, 1 отрицательное). Отрицательные значения представляются в стандартном дполнении до двух. Присвоение значения, выходящего за пределы диапазона LONG, приводит к непредсказуемым результатам Пример: Countl LONG !Declare four-byte signed integer
Count2 LONG,OVER(Countl) !Declare OVER the four-byte signed
! integer
Count3 LONG,DIM(4) !Declare it an array of 4 longs
Count4 LONG(5) !Declare with initial value
Count5 LONG,EXTERNAL !Declare as external
Counts LONG,NAME('SixCount') !Declare with external name
ExampleFile FILE,DRIVER('Clarion') !Declare a file
Record RECORD
Count7 LONG,NAME('Counter')!Declare with external name
. .
ULONG (четырехбайтное целое без знака)
метка ULONG(initial value)[,DIM()][,OVER()][,NAME()][,EXTERNAL]
ULONG описывает четырехбайтное целое без знака в формате длинного целого Intel 8086. В этой конфигурации НЕТ знакового бита. Присвоение значения, выходящего за пределы диапазона ULONG дает непредсказуемые результаты. Пример: Countl ULONG !Declare four-byte unsigned integer
Count2 ULONG,OVER(Countl) !Declare OVER four-byte unsigned integer
Count3 ULONG,DIM(4) !Declare it an array of 4 unsigned longs
Count4 ULONG(5) !Declare with initial value
Count5 ULONG,EXTERNAL !Declare as external
Counts ULONG,NAME('SixCount') !Declare with external name
Examp]eFile FILE,DRIVER('Btrieve') !Declare a file
Record RECORD
Count7 ULONG,NAME('Counter') !Declare with external
. . ! name
SREAL (четырехбайтное вещественное со знаком)
метка SREAL(initial value)[,DIM()][,OVER()][,NAME()][,EXTERNAL]
SREAL описывает четырехбайтную числовую переменную со знаком с плавающей запятой в формате короткого целого Intel 8087 (одинарной точности). Присвоение значения, выходящего за пределы диапазона SREAL приводит к непредсказуемым результатам. Пример: Countl SREAL !Declare four-byte signed floating point
Count2 SREAL,OVER(Countl) !Declare OVER the four-byte signed floating point
Count3 SREAL,DIM(4) !Declare it an array of 4 floats
Count4 SREAL(5) !Declare with initial value
Count5 SREAL,EXTERNAL !Declare as external
Count6 SREAL,NAME('SixCount') !Declare with external name
ExampleFile FILE,DRIVER('Btrieve') !Declare a file
Record RECORD
Count7 SREAL,NAME('Counter') !Declare with external name
. .
REAL (восьмибайтное вещественное со знаком)
метка REAL(initial value)[,DIM()][,OVER()][,NAME()][,EXTERNAL]
REAL описывает восмибайтное вещественное число со знаком в формате длинного вещественного Intel 8087 (двойной точности. Присвоение числа, выходящего за пределы диапазона REAL приводит к непредсказуемым результатам. Пример: Countl REAL !Declare eight-byte signed floating point
Count2 REAL,OVER(Countl) !Declare OVER the eight-byte signed floating point
Count3 REAL,DIM(4) !Declare it an array of 4 rlelals
Count4 REAL(5) !Declare with initial value
Count5 REAL,EXTERNAL !Declare as external
Count6 REAL,NAME('SixCount') !Declare with external name
ExampleFile FILE,DRIVER('Clarion') !Declare a file
Record RECORD
Count5 REAL,NAME('Counter')!Declare with external name
. .
DECIMAL (упакованное десятичное число фиксированной длины со знаком)
метка DECIMAL(length[,places][,initial value])[,DIM()][,OVER()][,NAME()][,EXTERNAL]
DECIMAL описывает переменную переменной длины со знаком, в формате BCD (binary-coded-decimal) Intel 8087. Каждый байт в DECIMAL хранит две десятиные цифры (по 4 бита на цифру). Самый левый байт хранит знак числа в своем старшем ниббле (0 = плюс, что-нибудь другое - минус) и одну десятичную цифру. Таким образом, переменные типа DECIMAL всегда содержат нечетное число цифр (скажем, DECIMAL(10) и DECIMAL(11) оба занимают по 6 байт. Присвоение DECIMAL-переменным значений, выходящих за пределы DECIMAL приводит к непредсказуемым результатам. Пример:
Countl DECIMAL(5,O) !Declare three-byte signed packed decimal
Count2 DECIMAL(5),OVER(Countl) !Declare OVER the three-byte
signed packed decimal
Count3 DECIMAL(5.0),DIM(4) !Declare it an array of 4 decimals
Count4 DECIMAL(5,0,5) !Declare with initial value
Count5 DECIMAL(5,O),EXTERNAL !Declare as external
Count6 DECIMAL(5,O),NAME('SixCount') !Declare with external name
ExampleFile FILE,DRIVER('Clarion') !Declare a file
Record RECORD
Count7 DECIMAL(5,O),NAME('Counter 1) !Declare with
. . !external name
PDECIMAL (то же, что и DECIMAL)
метка PDECIMAL(length[,places][,iinitial value])[,DIM()][,OVER()][,NAME()][,EXTERNAL]
PDECIMAL описывает переменной длины десятичную переменную со знаком в формате Btrieve и IBM/EBCDIC. Каждый байт PDECIMAL содержит две десятичные цифры, по 4 бита на цифру. Самый правый байт содержит знак в своем младшем ниббле (OFh или OCh позитивный, ODh негативный и одну десятичную цифру. Таким образом, PDECIMAL-переменные всегда содержат строго "нечетное" число цифр (скажем, PDECIMAL(10) и PDECIMAL(ll) используют по 6 байт). Присвоение числа, выходящего за диапазон PDECIMAL приводит к непредсказуемым результатам. Пример: Countl PDECIMAL(5,O) !Declare three-byte signed packed decimal
Count2 PDECIMAL(5),OVER(Countl) !Declare OVER the three-byte
signed packed decimal
Count3 PDECIMAL(5,O),DIM(4) !Declare it an array of 4 decimals
Count4 PDECIMAL(5,0,5) !Declare with initial value
Count5 PDECIMAL(5,O),EXTERNAL !Declare as external
Count6 PDECIMAL(5,O),NAME('SixCount') !Declare with external name
ExampleFile FILE,DRIVER('Btrieve') !Declare a file
Record RECORD
Count7 PDECIMAL(5,O),NAME('Counter') !Declare with
. . ! external name
STRING (строка фиксированной длины)
STRING описывает символьную строку фиксированной длины. Пример: Name STRING(20) !Declare 20 byte name field
NameArray STRING(l),DIM(20),OVER(Name) !Declare array over name
!field
Company STRING('Clarion Software, Inc.,)!The software
! company - 22 bytes
Phone STRING(@P(###)###-####P) !Phone number field - 13
! bytes
ExampleFile FILE,DRIVER('Clarion') !Declare a file
Record RECORD
NameField STRING(20),NAME('Name') !Declare with external
. . ! name
CSTRING (строка фиксированной длины, завершающаяся нулем)
CSTRING описывает символьную строку, завершающуюся нулевым символом (ASCII NULL). Она соответствует строкам, используемым в языке C и типу данных "ZSTRING" в Btrieve Record Manager. Под CSTRING в памяти выделяется участок постоянной длины, при этом, завершающий нулевой символ помещается в конец введенных данных. CSTRING во время исполнения преобразовывается в промежуточный тип STRING. Тип CSTRING имеет смысл употреблять для совместимости с внешними файлами и/или процедурами. Пример: Name CSTRING(21) !Declare 21 byte field - 20 bytes data
OtherName CSTRING(21),OVER(Name) !Declare field over name field
Contact CSTRING(21),DIM(4) !Array 21 byte fields - 80
! bytes data Company
Company CSTRING('Clarion Software, Inc.') !23 byte string 22
! bytes data
Phone CSTRING(@P(###)###-####p) !Declare 14 bytes 13 bytes
! data
ExampleFile FILE,DRIVER('Btrieve') !Declare a file
Record RECORD
NameField CSTRING(21),NAME('ZstringField')
!Declare with external name
. .
PSTRING (строка со встроенным байтом-счетчиком длины)
PSTRING описывает символьную строку с ведущим байтом длины и длиной, заданной для этой строки.. Она соответствует типу, используемому в Паскале и типу данных "LSTRING" из Btrieve Record Manager. Место в памяти под нее выделяется постоянной длины, но байт длины содержит число символов, реально хранящихся в такой переменной. Во время исполнения, PSTRING преобразуется в STRING. Тип PSTRING имеет смысл употреблять для совместимости с внешними файлами и/или процедурами. Пример: Name PSTRING(21) !Declare 21 byte field - 20 bytes data
OtherName PSTRING(21),OVER(Name) !Declare field over name field
Contact PSTRING(21),DIM(4) !Array 21 byte fields - 80 bytes data
Company PSTRING('Clarion Software,Inc.')!23 byte string - 22
! bytes data
Phone PSTRING(@P(###)###-####P) !Declare 14 bytes - 13 bytes
! data
ExampleFile FILE,DRIVER('Btrieve') !Declare a file
Record RECORD
NameField PSTRING(21),NAME('LstringField')
. . !Declare with external name
DATE (четырехбайтная дата)
метка DATE[,DIM()][,OVER()][,NAME()][,EXTERNAL]
DATE описывает четырех байтную переменную типа даты. Этот формат соответствует типу поля "DATE" в Btrieve Record Manager. DATE, используемые в числовых выражениях, преобразовываются в число дней, прошедших с 28 декабря 1800 года (стандартная кларионовская дата, обычно хранится как LONG). Допустимый диапазон стандартной кларионовской даты - от 1 января 1801 года по 31 декабря 2099 года. Использование значений, выходящих за пределы данного диапазона, приводит к непредсказуемым результатам. Тип DATE имеет смысл употреблять для совместимости с внешними файлами и/или процедурами. Пример: DueDate DATE !Declare a date field
OtherDate DATE,OVER(DueDate) !Declare field over date field
ContactDate DATE,DIM(4) !Array of 4 date fields
ExampleFile FILE,DRIVER('Btrieve') !Declare a file
Record RECORD
DateRecd DATE,NAME('DateField')
. . !Declare with external name
TIME (четырехбайтное время)
метка TIME[,DIM()][,OVER()][,NAME()][,EXTERNAL]
TIME описывает четырехбайтную переменную типа времени. Этот формат соответствует типу поля "TIME" в Btrieve Record Manager. TIME используемые в числовых выражениях, преобразовываются в число сотых долей секунды, прошедших с полуночи (стандартное кларионовское время, обычно хранится как LONG). Тип DATE имеет смысл употреблять для совместимости с внешними файлами и/или процедурами. Пример: ChkoutTime TIME !Declare checkout time field
OtherTime TIME,OVER(CheckoutTime) !Declare field over time field
ContactTime TIME,DIM(4) !Array of 4 time fields
ExampleFile FILE,DRIVER('Btrieve') !Declare a file
Record RECORD
TimeRecd TIME,NAME('TimeField') !Declare with external name
. .
См. также: Standard Time GROUP (составная структура данных)
(SPA - Мне кажется, что они противоречат сами себе - пишут, что атрибут external не разрешен для group, а сами указывают его в списке возможных параметров...) Структура GROUP позволяет обращаться к нескольким переменным по одной метке. Это может использоваться для измерения (?) набора переменных, или для присвоения или сравнения наборов переменных одним оператором. В больших сложных программах, структуры GROUP удобны для подержки наборов связанных разнотипных данных. GROUP должна завершаться точкой или оператором END. При обращении оператора или выражения к переменной типа GROUP, GROUP рассамтривается как STRING, составленная из всех переменных этой структуры. Структура GROUP может быть вложена в другую структуру данных, как например, RECORD или другая GROUP. Из-за внутреннего представления, числовые переменные (кроме DECIMAL) описанные в группе не совсем корректно обрабатываются, при использовании их как строк. По этой причине, построение ключа, в котором используются поля типа GROUP, содержащие числовые переменные, может привест к неожиданной последовательности сравнения (collating sequence). Пример: NameGroup GROUP,PRE(Nme) !Name group First STRING(20) ! first name Middle STRING(L) ! middle initial Last STRING(20) ! last name . !End group declaration DateTimeGrp GROUP,PRE(Dtg),DIM(10) !Date/time array Date LONG Time LONG . !End group declaration LIKE (определяемые пользователем типы данных)новое_описание LIKE(выглядит_как)[,DIM()][,OVER()][,PRE()][,NAME()] новое_описание - Метка описания нового типа данных. выгдядит_как - Метка описания элемента данных, чье определение будет использовано. LIKE говорит компилятору определить новое_описание используя то же описание, что и для выглядит_как, включая все атрибуты. Новое_описание может использовать атрибуты DIM и OVER. Если выглядит_как имело атрибут DIM, то новое_описание сразу будет массивом. Если в будущем атрибут DIM добавится к новому_описанию, то размерности массива определятся в будущем (???). Атрибуты PRE и NAME могут быть использованы, если надо. Если выглядит_как уже имеет эти атрибуты, новое_описание унаследует их и может привести к ошибке компилятора. Чтобы исправить это положение, задай принудительно PRE или NAME для нового_описания, чтобы перекрыть унаследованный(е) атрибут(ы). Пример: Amount REAL !Описываем поле
QTDAmount LIKE(Amount) !Используем то же описание
YTDAmount LIKE(OTDAmount) !И еще раз
MonthlyAmts LIKE(Amount),DIM(12) !То же описание, но для массива
!из 12 элементов
AmtPrPerson LIKE(MonthlyAmts),DIM(10)
!То же описание, но уже для 120 элементов (12,10)
Construct GROUP,PRE(Con) !Описываем группу
Fieldl LIKE(Amount) ! con:field1 - real
Field2 STRING(10) ! con:field2 - string(10)
.
NewGroup LIKE(Construct),PRE(New)!Описываем новую группу с
! new:field1 - real
! new:field2 - string(10)
AmountFile FILE,DRIVER('Clarion'),PRE(Amt)
Record RECORD
Amount REAL !Define a field
OTDAmount LIKE(Amount) !Use same definition
. .
См. также: DIM, OVER, PRE, NAME НЕЯВНЫЕ ПЕРЕМЕННЫЕНеявные переменные НЕ описываются в описаниях данных. Они создаются компилятором, когда он встречает их впервые. Любая неявная переменная, использованная области описания глобальных данных (между ключевыми словами PROGRAM и CODE) это "Глобальные Статические Данные". Любая неявная переменная между ключевыми словами MEMBER и PROCEDURE (или FUNCTION) это "Локальные Статические Данные". Все остальные неявные переменные - это "Локальные Динамические данные". Неявные переменные обычно используются для: индексов массивов, флагов true/false, промежуточных переменных в сложных вычислениях; как управляющие переменные циклов, итд. Язык Clarion предлагает три типа неявных переменных:
Пример: LOOP Counter# - 1 TO 10 !Implicit LONG ArrayField[Counter#] = Counter# * 2 !Initialize an array . Address"=CLIP(City) & ','&State &' '&ZIP!Implicit STRING(32) SHOW(12,16,Address") !Used to display a temporary value Percent$ = ROUND((Quota/Sales),.1) * 100 !Implicit REAL SHOW(15,22,Percent$,@P%<<<.##P) !Used to display a temporary value См. также: Глобальные, Локальные, Статические, и Динамические данные. Назад | Содержание | Вперед |
|
CITForum © 1997–2025