nsutextbook (1037554), страница 9
Текст из файла (страница 9)
Работа с подстрокамиДля замещения части строки можно использовать функции $Extract и $Piece совместно с командой Set. Функция $Extract извлекает заданные символы и заменяет их подстрокой, вне зависимости от длины подстроки.SAMPLES>set empty=""SAMPLES>set $extract(empty, 4) = "abcde" ; вставит 3 пробела слева, т.к. с 4-ойпозиции нужно вставить строку "abcde"SAMPLES>write empty. .
. abcdeSAMPLES>set $extract(empty, 4, 5) = "12345" ; вместо 4 и 5-го символа вставитьстроку "12345"SAMPLES>write empty. . .12345cdeМожно также использовать функцию $Piece совместно с командой Set для вставкиподстроки внутри строки. Подстрока может включать участки с другими разделителями.38SAMPLES>set empty=""SAMPLES>set $piece(empty, "^", 3) = "abcde" write empty^^abcdeSAMPLES>write $length(empty, "^")3SAMPLES>set $piece(empty, "^", 2) = "9/9/1999" write empty^9/9/1999^abcdeSAMPLES>write $piece($piece(empty, "^", 2), "/", 3)1999SAMPLES>3.6. Работа со спискамиВсе данные Object Script хранятся как строки.
Списки это специальный вид строки,отдельные перечни значений. Они занимают особое место и носят характер собственноготипа данных. Например, имеем список:L1={красный, зеленый, голубой}Этот список состоит из 3-х элементов. Последовательность элементов в списке имеетзначение, в отличие от множеств.
Например, список:L2={красный, голубой, зеленый} отличен от списка L1.Список L3={красный, голубой, , зеленый} имеет 4 элемента, третий элемент не определен.Список L4={красный, голубой, “ ”, зеленый} содержит 4 элемента, при этом 3-ийэлемент это пустая строка.Список может содержать подсписок, например:L5={зеленый, красный, { светло-зеленый, темно-красный, сизо-голубой}, голубой}.В Caché обработка списков играет решающую роль. При этом отдельные элементысписка обычно понимаются как строки символов, исключая ситуацию, когда элемент списка сам является подсписком. Типичные задачи для списков:• Создать список• Определить количество элементов списка.• Выделить один или несколько элементов списка.• Поиск указанного значения в списке.• Замена отдельных значений списка новыми значениями и т.д.Списки могут создаваться и управляться с помощью списковых функций. Например,создание списка выполняется с помощью функции $ListBuild:USER> Set L2=$ListBuild(“красный”,”голубой”,”зеленый”)В табл.6 приведены функции для работы со списками.Таблица 6Функции для работы со спискамиСписковаяСокращеОписаниефункцияние$ListBuild$LBСоздать список$ListLength$LLВозвращает количество элементов списка$List$LIИзвлекает один или несколько элементов списка$ListGet$LGПредотвращает ошибку <null value>, если заданный элемент списка не определен.
По смыслу эквивалентна $Get$ListData$LDЛогическая функция, проверяющая существование элемента списка$ListFind$LFПоиск заданного элемента списка393.6.1. Функция $ListBuildПозволяет создать список. Синтаксис:$LISTBUILD(element,...)$LB(element,...)Где element это элемент списка, строка символов в кавычках. Разделитель элементовсписка – запятая. Например, создание списка X:SET X=$LISTBUILD("Red","Blue","Green")3.6.2. Функция $ListLengthВозвращает количество элементов списка. Синтаксис:$LISTLENGTH(list)$LL(list)Где list это список. Например:WRITE $LISTLENGTH($LISTBUILD("Red","Blue","Green")); вернет 3WRITE $LISTLENGTH("") ; вернет 03.6.3.
Функция $ListИзвлекает один или несколько элементов списка. Синтаксис:$LIST(list,position,end)$LI(list,position,end)Где list это список, Position – задает начальную позицию элементов в списке, End –конечную позицию.Извлекаемые элементы зависят от количества параметров:• $LIST(list) возвращает первый элемент списка.• $LIST(list,position) возвращает элемент в указанной позиции.• $LIST(list,position,end) возвращает подсписок, содержащий элементы списка, начиная с позиции position и заканчивая end.Например:WRITE $LIST($LISTBUILD("RED","BLUE","GREEN")) ; напечатает REDWRITE $LIST($LISTBUILD("RED","BLUE","GREEN"),1) ; напечатает REDSET X=$LISTBUILD("Red","Blue","Green")WRITE $LIST(X,2) ; напечатает BlueSET X=$LISTBUILD("Green ","White ","Brown ","Black ")SET LIST2=$LIST(X,3,-1)WRITE LIST2 ; напечатает BrownBlackФункция $List совместно с оператором Set позволяет заменять элементы списка, добавлять новые элементы к пустым спискам.
Элемент списка сам может быть списком.Можно вкладывать функции $List для извлечения подсписков. Например:>Set L1=$LISTBUILD("RED","BLUE","GREEN")>Set $List(L1,2)= "hhhh"; вставить hhhh на место второго элемента>Write $List(L1,2)hhhh> Set $List(L1,4)= "abcd"; добавить 4-ый элемент в список3.6.4. Функция $ListGetВозвращает элемент списка или требуемое значение по умолчанию, если элемент неопределен. Синтаксис:$LISTGET(list,position,default)$LG(list,position,default)Где list - список40Position – позиция извлекаемого элементаDefault – значение по умолчанию, если элемент не определен.Например:SET LIST=$LISTBUILD("A","B","C")WRITE $LISTGET(LIST) ; напечатает AWRITE $LISTGET(LIST,1) ; напечатает ASET LIST=$LISTBUILD("A","B","C")WRITE $LISTGET(LIST,4) ; напечатает пробел, т.к.
4-го элемента нетWRITE $LISTGET(LIST,4,"ERR"); напечатает "ERR"3.6.5. Функция $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) ; второй элемент не определен0WRITE $LISTDATA(X,3) ; третий элемент – переменная которой нет0WRITE $LISTDATA(""); пустая строка0WRITE $LISTDATA(X,0) ; элементв нулевой позиции0WRITE $LISTDATA(X,6) ; 6-ая позиция в 5-ти элементном списке03.6.6.
Функция $ListFindПоиск заданного элемента списка. Синтаксис:$LISTFIND(list,value,startafter)$LF(list,value,startafter)Где list – список, value - искомое значение.Startafter – задает позицию списка, после которой следует выполнять поиск. Необязательный элемент. Если не задан, то поиск с первой позиции.Возвращает номер найденного элемента, если элемент найден, и ноль (0), если элемент не найден. Например:SET X=$LISTBUILD("A","B","C","D")WRITE $LISTFIND(X,"B")2SET X=$LISTBUILD("A","B","C","D")WRITE $LISTFIND(X,"B",2)03.7. Работа с датамиВ ObjectScript дата представляется в двух форматах – внутреннем и внешнем.
Внутренний формат даты это целое число, начиная с 0 для даты 12/31/1840 до 2980013 для да-41ты 12/31/9999. Внешний формат это формат более привычный для нас, например:15/12/2003.Также используется системная переменная $Horolog. Системные переменные работают как функции без аргументов. $Horolog содержит текущее время в виде пары чисел,первое число задает внутренний формат даты, второе число задает количество секунд,прошедших с полуночи.
Например:USER> write $Horolog59469,475543.7.1. Функция $ZDateФункция $ZDate преобразует дату из внутреннего формата во внешний формат.Функция имеет 9 аргументов. Для нас существенными являются следующие аргументы:1 аргумент – внутренний формат даты, это число, обязателен, все остальные аргументы не обязательны.2 аргумент – формат возвращаемой даты. Некоторые значения формата: 1 – американский, 2 и 4 – европейский, 10 – порядковый номер дня недели, при этом 0 – это воскресенье, 1- понедельник и т.д.3 аргумент – список месяцев. Например: « январь февраль март апрель май июньиюль август сентябрь октябрь ноябрь декабрь».9 аргумент – подавляет вывод сообщения об ошибке.
Если значение аргумента равно–1, то в случае неправильной даты функция возвращает –1 (минус 1).Пример:SAMPLES> write !,$Zdate($Horolog, 2, " январь февраль март апрель май июнь июль август сентябрь октябрь ноябрь декабрь")27 октябрь 2003SAMPLES>write $zdate($horolog)11/24/2003SAMPLES>write $zdate($horolog, 2)24 Nov 2003SAMPLES>write $zdate($horolog, 10)1 ; понедельникUSER>write $zdate(11111111111111111111, 1,,,,,,, -1)-13.7.2. Функция $ZDateHФункция $ZDateH преобразует внешний формат даты во внутренний формат.
Функция также имеет девять входных аргументов, из которых только первый является обязательным, он задает дату во внешнем формате. Все остальные аргументы имеют тот жесмысл, что и для функции $ZDate.По умолчанию, $ZDateH генерирует ошибку для неправильной даты, но ее девятыйаргумент позволяет подавить вывод сообщения об ошибке.В выражениях для задания внешнего представления даты может использоваться T(для текущей даты) и добавление или вычитание дней, как видно из примеров ниже.SAMPLES >write $ZDateH("24/11/2003", 4)59497SAMPLES >w $ZDateH("21/05/2002", 4)58945SAMPLES>write $ ZDateH ("21/9/1999", 5,,,,,,, -1)-1SAMPLES>write $ ZDateH ("21 SEP", 5,,,,,,, -1)4259433SAMPLES>write $ ZDateH ("SEP 21 1998", 5,,,,,,, -1)57607SAMPLES>write $ ZDateH ("T+12", 5,,,,,,, -1)59509SAMPLES>write $ ZDateH ("MAT 3", 5,,,,,,, -1)-13.8.
МассивыРабота с массивами с Caché чрезвычайно проста. Caché включает поддержку массивов различной размерности. Массивы не требуют предварительного объявления. Массиввозникает только тогда, когда его элементам присваивается значение, при этом тип элемента определяется типом присваиваемого значения. В качестве индекса могут выступатьпеременные любых типов.Например, массив MyVar может иметь следующие элементы:Set MyVar=7Set MyVar(22)=-1Set MyVar(-3)=89Set MyVar(“MyString”)=”gg”Set MyVar(-123409, “MyString”)=”k”Set MyVar(“MyString”, 2398)=23Set MyVar(1.2, 3, 4, “Five”, “Six”, 7)Обратите внимание, в качестве индекса массива могут использоваться целые числакак положительные, так и отрицательные, дробные числа, а также строки.Из факта существования узла MyVar(22) вовсе не следует существование узла, скажем, MyVar(10).
Т.е. многомерные массивы являются разреженными. Это означает, что впримере выше используется только семь элементов для хранения, по количеству узлов,т.к. нет необходимости объявлять массивы или определять их размеры, это дает дополнительную выгоду в памяти: место под пустые элементы не резервируется, элемент начинаетиспользовать память по мере возникновения.43Глава 4. Объектная модель CachéОбъектная модель Caché разработана в соответствие со стандартом ODMG (ObjectData Management Group). Класс – это некий шаблон, в соответствии с которым строятсяконкретные экземпляры класса. Объект в Caché имеет определенный тип, т.е. являетсяэкземпляром какого-либо класса.