Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Polyakov.doc
Скачиваний:
20
Добавлен:
02.12.2018
Размер:
5.13 Mб
Скачать
    1. Функции для работы с численными значениями

В языке @-формул Lotus/Domino присутствует довольно большой набор функций для выполнения математических операций, такие как вычисление тригонометрических функций, генерация псевдослучайных чисел, округление и т.д. В этом разделе мы рассмотрим только те из них, которые, на наш взгляд, требуют пояснений, или новые и модифицированные в версии R 6.

@Sum( список_чисел_1; … ; список_чисел_N )

Область применения: без ограничений.

Возвращает сумму всех элементов списка или нескольких списков, элементами которых являются числа. Обратите внимание, что отрицательные элементы списка должны заключаться в круглые скобки. Если значение списка_чисел берется из некоторого поля, следует проверить, чтобы поле не было пустым. В противном случае возникнет ошибка, так как Domino интерпретирует пустое числовое поле, как пустую строку.

Пример 1. Возвращает 3.

@Sum( 1 : 2 )

Пример 2. Возвращает 11.

@Sum( (-1) : 2 ; (-10) : 20 )

Пример 3. Возвращает 100, если поле numPersons содержит список чисел 5: 10: 15: 20.

@Sum( numPersons; numPersons )

@FloatEq( число1; число2 [; точность ] )

Область применения: нельзя использовать в формулах отбора.

Сравнивает два числа с заданной точностью. По умолчанию параметр точность равен 0.0001. Функция возвращает 1 (TRUE), если разность между двумя числами меньше значения точности, или 0 (FALSE) в противном случае. Если первые два параметра списки, то для выполнения операции берутся только их первые элементы.

Пример. Присвоит переменной a1 значение 1, b1 – 0.

a := 19,001;

b := 19,0009;

c := 19,01;

a1 := @FloatEq( a; b; 0,0002);

b1 := @FloatEq( a; c);

@Max( число1; число2 )

@Max( список_чисел )

Область применения: без ограничений.

В варианте с двумя параметрами возвращает максимальное из двух чисел или числовых списков. Для списков осуществляется попарное сравнение. Если один из списков короче другого, то он дополняется значением его последнего элемента. Второй вариант синтаксиса добавлен в R 6, он позволяет вернуть значение наибольшего элемента из списка_чисел.

Пример 1. Возвращает 3.

@Max( 3; -2);

Пример 2. Возвращает 3 : 9.

@Max( 3 : 7; (-2) : 9);

Пример 3. Возвращает 3 : 9 : 9 : 12.

@Max( 3 : 7 : 5 : 12; (-2) : 9);

Пример 4. Возвращает 12.

@Max( 3 : (-2) : 5 : 12);

@Min( число1; число2 )

@Min( список_чисел )

Область применения: без ограничений.

В варианте с двумя параметрами возвращает минимальное из двух чисел или числовых списков. Для списков осуществляется попарное сравнение. Если один из списков короче другого, то он дополняется значением его последнего элемента. Второй вариант синтаксиса добавлен в R 6, он позволяет вернуть значение наименьшего элемента из списка_чисел.

Пример 1. Возвращает -2.

@Min( 3; -2);

Пример 2. Возвращает -5.

@Min( 3 : 7 : (-5) : 9);

    1. Функции для работы со списками

@Elements( список )

Область применения: без ограничений.

Возвращает в формате числа количество текстовых, числовых или дата/время элементов (значений) в списке. Для пустой строки и значений типа не список функция возвратит число 0.

Пример 1. Возвращает 4, если поле SalesForce содержит список "Иванов": "Петров": "Сидоров": "Новиков".

@Elements( SalesForce )

Пример 2. Возвращает 2.

@Elements( "Новиков" : "Кузнецов" )

Пример 3. Возвращает 5.

3 + @Elements( "Суворов" : "Нахимов" )

@Count( список )

Область применения: без ограничений.

Возвращает число элементов в списке, аналогично @Elements, однако, в отличие от последней, для пустой строки и для значений типа не список вернет значение 1, а не 0.

Пример 1. Возвращает 2.

@Count( "Новиков" : "Кузнецов" )

Пример 2. Возвращает 0 для @Elements, и 1 для @Count.

@Elements( "" );

@Count( "" );

@IsMember( строка; список_строк )

@IsMember( список_строк_1; список_строк_2 )

Область применения: без ограничений.

Возвращает 1 (TRUE), если строка является элементом списка_строк; возвращает 0 (FALSE) в противном случае. Если оба параметра являются списками - возвращает 1, если все элементы списка_строк_1 содержатся в списке_строк_2. Функция учитывает регистр.

Пример 1. Возвращает 1.

@IsMember( "компьютер"; "принтер" : "компьютер" : "монитор" )

Пример 2. Возвращает 0.

@IsMember( "компьютер" : "Notes"; "Notes" : "принтер" : "монитор" )

Пример 3. Возвращает 1, если "Отдел разработок" содержится в списке в поле Department, или 0, если нет.

@IsMember( "Отдел разработок"; Department )

@IsNotMember( строка; список_строк )

@IsNotMember( список_строк_1; список_строк_2 )

Область применения: без ограничений.

Возвращает 1 (TRUE), если строка не является элементом списка_строк; возвращает 0 (FALSE) в противном случае. Если оба параметра являются списками - возвращает 1, если ни один из элементов списка_строк_1 не содержится в списке_строк_2. Функция учитывает регистр. Обратите внимание, что @IsNotMember тождественно не равна отрицанию функции @IsMember в случае, если два аргумента есть списки.

Пример 1. Возвращает 0.

@IsNotMember( "компьютер"; "принтер" : "компьютер" : "монитор" )

Пример 2. Присваивает полю Dept значение "Маркетинг", если текущий пользователь не указан в списке в поле SalesDepartment; в противном случае присваивает полю Dept - "Сбыт".

FIELD Dept :=

@If( @IsNotMember( @UserName; SalesDepartment ); "Маркетинг"; "Сбыт" );

@Member( строка; список_строк )

Область применения: без ограничений.

Возвращает 0, если строка не содержится в списке_строк; возвращает величину от 1 до N, если строка содержится в списке_строк, причем величина от 1 до N определяется местоположением указанной строки в списке_строк.

Пример 1. Возвращает 0.

@Member( "Сбыт"; "Финансы" : "Сервис" : "Канцелярия" )

Пример 2. Если значение из поля ReportName содержится в списке из поля RequiredReading 12-м элементом, будет возвращено 12. Если значение из поля ReportName вообще не содержится в списке, возвращается 0.

@Member( ReportName; RequiredReading )

Пример 3. Если имя, возвращаемое функцией @Author, содержится 4-м элементом в поле-списке EditorialBoard, возвращает 4. Если имя не содержится в списке - возвращает 0.

@Member( @Author; EditorialBoard )

@Replace( список_строк; найти; заменить_на )

Область применения: без ограничений.

Ищет в списке_строк значения, указанные в списке найти. Заменяет каждое найденное значение соответствующим значением из списка заменить_на. Возвращает исходный список со всеми произведенными изменениями (если никаких значений из списка найти в списке_строк не найдено, возвращает список_строк без изменений).

Если список заменить_на короче списка найти, то элементы из списка найти, не имеющие соответствующих элементов в списке заменить_на, будут заменены в исходном списке на пустые строки. Это свойство может быть использовано для удаления элементов из списка. В этом случае список заменить_на задается пустым; сначала все элементы из списка найти заменяются на пустые, а затем функция @Trim() удаляет пустые элементы из полученного списка.

Пример 1. Domino просматривает исходный список и, как только значение в исходном списке содержится в списке "найти", он заменяет это значение соответствующим значением из списка "заменить_на". В этом примере только "Оранжевый" в исходном списке будет заменен на "Черный". Результат будет выглядеть следующим образом: "Красный" : "Черный" : "Желтый" : "Зеленый".

@Replace( "Красный" : "Оранжевый" : "Желтый" : "Зеленый";

"Оранжевый" : "Синий";

"Черный" : "Коричневый" )

Пример 2. Удаляет из списка в поле Categories все элементы, входящие во второй список. Если исходно в поле Categories был список "Брянск" : "Барнаул" : "Ростов" : "Смоленск", @Replace вернет "Брянск" : "" : "" : "Смоленск", а @Trim - "Брянск" : "Смоленск". Это результат присваивается полю Categories.

FIELD Categories := @Trim( @Replace( Categories;

"Ростов" : "Барнаул"; "" ));

@Subset( список; число )

Область применения: без ограничений.

Если число положительное, возвращает указанное число значений, считая от начала списка. Для положительного числа большего, чем длина списка – возвращается исходный список. При нулевом значении числа генерируется ошибка «The second argument to @Subset must not be zero» (Второй аргумент @Subset не должен быть равен нулю). Если число отрицательное, возвращает указанное число значений, считая от конца списка. Для отрицательного числа, модуль которого большего, чем длина списка – возвращается исходный список. В любом случае результат возвращает в порядке, определенном в списке.

Пример 1. Возвращает "Краков" : "Новосибирск".

@Subset( "Краков" : "Новосибирск" : "Франкфурт" : "Токио"; 2 )

Пример 2. Возвращает "Новосибирск" : "Франкфурт" : "Токио".

@Subset( "Краков" : "Новосибирск" : "Франкфурт" : "Токио"; -3 )

Пример 3. Возвращает "Краков" : "Новосибирск" : "Франкфурт", если в поле BranchOffices находится список "Краков" : "Новосибирск" : "Франкфурт" : "Токио" : "Сингапур" : "Сидней".

@Subset( BranchOffices; 3 )

@Unique @Unique( список_строк )

Область применения: без ограничений.

При вызове функции без параметра возвращает случайным образом сгенерированную уникальную строку. При вызове с параметром список_строк, удаляет из него повторяющиеся значения. Учитывает регистр. В документации сказано, что функция не поддерживается в Web-приложениях. Однако как в первом, так и во втором варианте синтаксиса @Unique работает в Web (возможно не во всех контекстах).

Пример 1. Может возвратить строку типа "SERR-42VQRW".

@Unique

Пример 2. Возвращает "красный" : "зеленый" : "синий".

@Unique( "красный" : "зеленый" : "синий" : "зеленый" :

"красный" )

Пример 3. Возвращает "красный" : "зеленый" : "синий" : "Зеленый".

@Unique( "красный" : "зеленый" : "синий" : "Зеленый" :

"красный" )

@Keywords( список_строк_1; список_строк_2 )

@Keywords( список_строк_1; список_строк_2;

строка_разделитель )

Область применения: без ограничений. При использовании с третьим параметром может возвращать некорректный результат.

Возвращает список, состоящий из всех тех элементов списка_строк_2, которые содержатся "в качестве слов" в списке_строк_1. Если ни один из элементов второго списка не содержится "в качестве слов" в первом, то возвращается пустая строка. Функция учитывает регистр.

Строка_разделитель содержит один или более символов, используемых для разделения слов в списке_строк_1. Например, " .," означает, что слова разделяются пробелом, запятой или точкой. В варианте с двумя параметрами для разделения слов используются символы из строки «?. ,!;:[](){}"<>» (символы: знак вопроса, точка, пробел, запятая, восклицательный знак, точка с запятой, двоеточие, открывающие и закрывающие квадратные, круглые и фигурные скобки, двойные кавычки и символы больше, меньше).

В случае, если искомое слово из списка_строк_2 стоит самым первым словом в любом элементе списка_строк_1, и задана строка_разделитель, то возвращается пустая строка. Для коррекции поведения функции в данном случае необходимо предварить ключевое слово в списке_строк_1 одним из символов из строки_разделителя (см. примеры 4 и 5). Аналогичное поведение будет и если не указать третий параметр или использовать в качестве его пустую строку.

Пример 1. Возвращается "Harvard" : "Yale" : "UCLA".

@Keywords(

"EPA Head speaks at Harvard,Yale" :

"UCLA Chancellor Retires" :

"Ohio State wins big game" :

"Reed and University of Oregon share research facilities" ;

"Harvard" : "Brown" : "Stanford" : "Yale" : "Vassar" : "UCLA" )

Пример 2. Возвращается пустая строка.

@Keywords(

"EPA Head speaks at Harvard,Yale" :

"UCLA Chancellor Retires" :

"Ohio State wins big game" :

"Reed and University of Oregon share research facilities" ;

"harvard" : "brown" : "stanford" : "vassar" : "ucla2" )

Пример 3. Возвращается "Yale".

@Keywords(

"EPA Head speaks at Harvard,Yale" :

"UCLA Chancellor Retires" :

"Ohio State wins big game" :

"Reed and University of Oregon share research facilities";

"Harvard" : "Brown" : "Stanford" : "Yale" : "UCLA"; "," )

Пример 4. Возвращается пустая строка.

@Keywords(

"Mary Halen, Director of Sales" :

"Sally Hall, VP of Marketing":

"Joe Halzy, Order entry";

"Joe":"Sally";" ,")

Пример 5. Исправленный пример 4, возвращается "Joe".

@Keywords(

"Mary Halen, Director of Sales" :

"Sally Hall, VP of Marketing":

",Joe Halzy, Order entry";

"Joe":"Sally";" ,")

@Compare( список_строк1; список_строк2

[; флаги] )

Область применения: нельзя использовать в формулах навигатора.

Осуществляет попарное сравнение двух текстовых списков в соответствии с флагами. Если один из списков короче другого, то он дополняется значением его последнего элемента. Возвращаемое значение есть числовой список, каждый элемент которого определяется по следующему алгоритму:

  • 0 - если соответствующие элементы списков эквивалентны с точки зрения флагов;

  • 1 – если элемент первого списка больше второго;

  • (–1) – если второй список больше первого.

Флаги также представляют собой список, элементы которого могут принимать следующие значения:

  • [CASESENSITIVE] (значение по умолчанию) и [CASEINSENSITIVE] - сравнение идет, соответственно, в режиме "чувствительном" или безразличном к регистру. Не допускается совместное использование обеих флагов;

  • [ACCENTSENSITIVE] (значение по умолчанию) и [ACCENTINSENSITIVE] - сравнение идет, соответственно, в режиме "чувствительном" или безразличном к диакритическим знакам (accent, диакритический знак - знак, который в ряде языков ставится над буквой, ниже буквы или “пересекает” букву для того, чтобы обозначить ее особое звучание). Не допускается совместное использование обеих флагов;

  • [PITCHSENSITIVE] (значение по умолчанию) и [PITCHINSENSITIVE] - сравнение идет, соответственно, в режиме "чувствительном" или безразличном к системе сортировки символов языка. Имеет смысл только для двухбайтовых кодировок восточных языков (таких как японский, корейский, упрощенный и классический китайский). Не допускается совместное использование обеих флагов.

Не совсем ясно, почему нельзя использовать эту функцию в контексте формул навигатора. Из опыта – она в них работает (правде, возможно не во всех случаях).

Пример 1. Возвращается 0 : 0.

@Compare("One":"Two";"onE":"tWo";[CaseInsensitive])

Пример 2. Возвращается так же 0 : (-1), т. к. "One" < " Two ".

@Compare("One";"One":"Two"))

@Sort( список; флаги; формула )

Область применения: нельзя использовать в формулах навигатора.

Функция осуществляет сортировку списка и возвращает отсортированный список. Функция может быть применена текстовым, дата/время и числовым спискам. Возвращаемое значение зависит от типа первого параметра функции.

Флаги необязательный параметр, который задает порядок сортировки. Данный параметр может быть списком, элементы которого могут принимать одно из следующих значений:

  • [Ascending] (значение по умолчанию) и [Descending] - для сортировки, соответственно, по возрастанию и убыванию. Не допускается совместное использование обеих флагов;

  • [CaseSensitive] (значение по умолчанию) и [CaseInsensitive] для сортировки, соответственно, с учетом или без учета регистра. Не допускается совместное использование обеих флагов;

  • [AccentSensitive] (значение по умолчанию) и [AccentInsensitive] для сортировки, соответственно, с учетом или без учета к диакритическим знакам. Не допускается совместное использование обеих флагов;

  • [PitchSensitive] (значение по умолчанию) и [PitchInsensitive] для сортировки, соответственно, с учетом или без учета к системе сортировки символов языка. По поводу назначения предыдущих четырех флагов см. пояснения к функции @Compare стр. 107. Не допускается совместное использование обеих флагов;

  • [CustomSort] в этом случае порядок сортировки определяется третьим параметром. Перекрывает действие любого другого флага.

При конфликте флагов, для определения действующего порядка сортировки будет использоваться последнее значение для взаимоисключающих значений. Например, если второй параметр функции определен как [Descending] : [PitchInsensitive] : [Ascending], то это реально соответствует флагу [PitchInsensitive] : [Ascending].

Параметр формула необязателен для всех случаев, за исключением использования флага [CustomSort]. В этом случае формула задает собственный порядок сортировки. В рамках формулы для генерации ссылок на сравниваемые элементы значений списка используются временные переменные $A и $B. Если по условиям сортировки необходимо чтобы элемент $A стоял в результирующем списке перед элементом $B, то формула должна вернуть 1 (True), для того чтобы $B стоял раньше $A формула должна вернуть 0 (False). Если формула вернет значение отличное от числового типа – генерируется сообщение об ошибке: «Incorrect data type for operator or @Function: Number expected» (Некорректный тип данных для оператора или @функции: ожидается число).

При сортировке значений элементов из списка типа дата-время, если элемент не содержит временную компоненту, то данный элемент эквивалентен любому элементу с той же датой и любым временным значением. Например, значения [12.12.2001], [12.12.2001 12:20:32] и [10.12.2001 – 01.01.2002] с точки зрения @Sort эквивалентны.

Если используется сортировка Unicode, то в рамках функции @Sort нельзя использовать следующие флаги и их комбинации:

  • [PITCHINSENSITIVE];

  • [CASESENSITIVE] : [ACCENTINSENSITIVE].

Подробнее о сортировка Unicode можно прочитать по адресу: http://oss.software.ibm.com/icu/

Пример 1. Возвращает -15 : 4 : 6 : 12 : 21.

@Sort(21 : 6 : (-15) : 12 : 4);

Пример 2. Возвращает 21 : 12 : 6 : 4 : -15.

@Sort(21 : 6 : (-15) : 12 : 4; [Descending]);

Пример 3. Сортирует список следующим образом: сначала все нечетные числа в порядке возрастания, затем все четные числа в порядке возрастания. Возвращает окно с текстом «-15~7~7~21~4~6~6~12».

a := 21 : 7 : 6 : (-15) : 12 : 6 : 4 : 7;

b := @Sort(a; [CustomSort];

@If( @Modulo($A; 2) = 0;

@If( @Modulo($B; 2) = 0;

@If( $A >= $B ; 1; 0)

;1);

@If( @Modulo($B; 2) = 0; 0;

@if($A >= $B; 1; 0))

));

@Prompt([Ok]; "Sort list"; @Implode(@Text(b) ; "~"))

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]