Васильковый (трехаргументная форма)
Функция $ListGet
Синтаксис:
$LISTGET(list,position,default)
$LG(list,position,default)
Следующая списковая функция – $ListGet – это расширение $LIst. $ListGet идентична одноаргументной и двухаргументной формам $LIst, за исключением того, что не порождает ошибки <null value>. С помощью функции $ListGet можно выделить определенный элемент из списка. Если этот элемент списка не определен, то в виде значения по умолчанию возвращается третий аргумент, если он не задан – пустая строка:
>Write $ListGet(L3, 3) // двухаргументная форма
(пустая строка)
>Write $ListGet(L3, 3, "васильковый")
Васильковый (трехаргументная форма)
Возвращает элемент списка или требуемое значение по умолчанию, если элемент не определен.
Где list - список
Position – позиция извлекаемого элемента
Default – значение по умолчанию, если элемент не определен.
Например:
SET LIST=$LISTBUILD("A","B","C")
WRITE $LISTGET(LIST) ; напечатает A
WRITE $LISTGET(LIST,1) ; напечатает A
SET LIST=$LISTBUILD("A","B","C")
WRITE $LISTGET(LIST,4) ; напечатает пробел, т.к. 4-го элемента нет
WRITE $LISTGET(LIST,4,"ERR"); напечатает "ERR"
Функция $ListData
Как вообще можно установить, определен элемент списка или нет? Здесь поможет функция $ListData: логическая функция, проверяющая существование элемента списка. Синтаксис:
$LISTDATA(list,position)
$LD(list,position)
Где list – список
Position – позиция элемента.
Возвращает 1 (true) – если элемент найден и имеет значение, 0 (false) – если не найден или не имеет значения.
Например:
KILL Y SET X=$LISTBUILD("Red",,Y,"","Green")
WRITE $LISTDATA(X,2) ; второй элемент не определен
WRITE $LISTDATA(X,3) ; третий элемент – переменная которой нет
WRITE $LISTDATA("") ; пустая строка
WRITE $LISTDATA(X,0) ; элемент в нулевой позиции
WRITE $LISTDATA(X,6) ; 6-ая позиция в 5-ти элементном списке
Второй параметр этой функции задает проверяемую позицию списка. Если элемент в этой позиции определен результат функции будет 1, иначе 0.
>Write $ListData(L3, 2)
>Write $ListData(L3, 3)
Функция $ListFind
Поиск заданного элемента списка.
Синтаксис:
$LISTFIND(list,value,startafter)
$LF(list,value,startafter)
Где list – список, value - искомое значение.
Startafter – задает позицию списка, после которой следует выполнять поиск. Необязательный элемент. Если не задан, то поиск с первой позиции.
Возвращает номер найденного элемента, если элемент найден, и ноль (0), если элемент не найден.
Например:
SET X=$LISTBUILD("A","B","C","D")
WRITE $LISTFIND(X,"B")
SET X=$LISTBUILD("A","B","C","D")
WRITE $LISTFIND(X,"B",2)
Оператор косвенности @
Оператор косвенности позволяет преобразовать строку символов в программный код в четырех четко описанных случаях:
• Косвенное имя: преобразование в имя (например, переменной).
• Косвенный аргумент: преобразование в полный аргумент команды.
•Индексная косвенность: преобразование в индексированную переменную.
• Косвенный шаблон: преобразование в шаблон при проверке по шаблону.
Косвенное имя
Предположим, переменная v1 содержит в качестве значения имя локальной переменной, например, «v1 = "locvar"». Тип данных значения v1 очевидно представляет собой строку.
Разумеется, присваивание «Set "locvar" = 4» приведет к сообщению об ошибке, так как команда Set ожидает имя переменной, а не строку символов. Однако имея оператор косвенности "@", программист может преобразовать тип данных в имя: «Set @v1 = 4» присваивает переменной locvar значение 4. Эта форма косвенности называется косвенным именем.
Косвенное имя может применяться всюду, где в Cache ожидается имя переменной (локальной или глобальной, неиндексированной или индексированной) или точка входа в программу (метка или метка плюс имя программы).
Set pname = "^Prog1" Do @pname |
Здесь вызывается программа ^Prog1.
Пример:
Set pname=”Prog1”
do @pname // будет вызвана программа с именем Prog1
Set var=”locvar”
Set @var=4 // переменной с именем locvar будет присвоено число 4
Косвенный аргумент
В отличие от косвенного имени, в случае косвенного аргумента осуществляется преобразование строк в аргументы команд. За исключением команды For, в которой косвенность аргумента не допускается, в остальных командах можно косвенно ссылаться на полный аргумент или на список аргументов.
Set isetarg = "x = 1", @isetarg |
Переменная isetarg содержит синтаксически корректный аргумент команды Set в виде строки, которая обрабатывается оператором косвенности.
Отчетливо видно отличие от косвенного имени, ведь «"х = 1"» — не разрешенное имя. Разумеется, во многих командах (Read, Write, Kill, New — их далеко не полный перечень) одиночный аргумент также может быть именем. В этом случае обе формы косвенности неотличимы друг от друга.
А вот несколько примеров, в которых обе эти формы косвенности имеют различия:
Set ikill = "(e, f, g)" Kill @ikill Set inew = "(a, b, c)" New @inew |
Set isetarg=”x=1”, @isetarg // set x=1 |
Дата добавления: 2016-01-20; просмотров: 538;