Язык @-формул в LotusDomino R 6.

Функции определения и преобразования типов данных


J @IsNull( значение )

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

Возвращает 1 (TRUE), если параметр является пустой строкой и 0 (FALSE) во всех остальных случаях, включая состояние ошибки (@Error) и список из пустых строк.

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

@IsNull( "" );

Пример 2. Возвращает 0, если в поле Dept содержится любое отличное от "" значение.

@IsNull( Dept );

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

@IsNull( "" : "" );

Пример 4. Возвращает 0, без сообщения об ошибке.

@IsNull( 4/0 );

@IsText( значение )

@IsText( список_значений



)

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

Возвращает 1 (TRUE), если параметр является строкой или списком строк, в противном случае возвращает 0 (FALSE).

@IsTime( значение )

@IsTime( список_значений

)

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

Возвращает 1 (TRUE), если параметр является величиной или списком величин "дата-время"; в противном случае возвращает 0 (FALSE).

Пример 1. Возвращает 1, если поле DueDate содержит величину "дата-время".

@IsTime( DueDate )

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

@IsTime( 123 )

@IsNumber( значение )

@IsNumber( список_значений

)

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

Возвращает 1 (TRUE), если параметр является числом или числовым списком, в противном случае возвращает 0 (FALSE).

@TextToTime( строка )

@TextToTime( список_строк

)

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

Преобразует, если возможно, текстовую строку в величину "дата-время". Только "Today", "Tomorrow" и "Yesterday" ("Сегодня", "Завтра" и "Вчера") являются допустимыми строками для указания относительных дат. При невозможности преобразования строки функция возвращает пустое значение. Если аргумент не является строкой или списком строк (дата/время или число), то возвращается состояние ошибки, которую можно обработать с помощью функции @IsError.

Если аргумент есть список строк, возвращает список, получившийся поэлементным применением функции.


Эту функцию удобно использовать для преобразования даты из текстового поля в величину, для вычислений в поле "дата-время".

Пример 1. Возвращает [8.10.90 2:40:00].

@TextToTime( "8.10.90 2:40" )

Пример 2. Возвращает текущую дату, например [04.05.95].

@TextToTime( "Today" )

Пример 3. Возвращает значение «[12.12.2003] : [] : [01.01.1901]».

@TextToTime( "12.12.2003" : "ccc" : "01.01.1901" )

Пример 4. Переменной b присвоится значение 1.

a :=  [12.12.2003];

b := @IsError(@TextToTime( a ))

J @ToTime( значение )

J @ToTime( список_значений )

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

Преобразует, если возможно, значение или список_значений

в величину "дата-время" или список величин "дата-время" соответственно. В отличие от @TextToTime в качестве аргумента может воспринимать значения или списки значений типа дата/время. В этом случае возвращается сам аргумент.

Еще одно отличие (и значительно более существенное) этой функции от @TextToTime состоит в том, что ошибки преобразования значений с помощью @ToTime могут быть обработаны функцией @IfError, в то время как ошибки, возвращаемые @TextToTime, функцией @IfError не обрабатываются.

Если специально не обрабатывать ошибки преобразования, то функция возвращает окно с сообщением об ошибке либо «The value cannot be convert to a Time/Date» (значение не может быть преобразовано к типу дата/время), либо «Unable to interpret Time or Date» (невозможно интерпретировать значение даты или времени). Это состояние ошибки можно обработать с помощью функции @IsError или @IfError.

Пример 1. Возвращает [12.02.2003 12:20:00].

@ToTime( "12.02.2003 12:20" )

Пример 2 Возвращает [29.10.2003] если формула выполнялась 29 октября 2003 года.

@ToTime( "Today" );

Пример 3. Возвращает значение [16.04.1987].

@ToTime( [16.04.1987] )

Пример 4. Присвоит полю а1 значение [01.01.1000], а полю a2 – «[01.01.1900] : [] : [31.12.1999]».



a := @ToTime( "01.01.1900" : "Date" : "31.12.1999" );

b := @TextToTime( "01.01.1900" : "Date" : "31.12.1999" );

@SetField("a1"; @If( @IsError( a ); [01.01.1000]; a));

@SetField("a2"; @If( @IsError( b ); [01.01.1000]; b));

Пример 5. Переменной b будет присвоено значение «[11.01.2222] : [26.04.1964] : [14.01.3333]», а переменной c – «[11.01.2222] : [] : [14.01.3333]».

a := "11.01.2222" : "ccc" : "14.01.3333";

b := @Transform( a; "x"; @IfError(@ToTime( x ); [26.04.1964]));

c := @Transform( a; "x"; @IfError(@TextToTime( x ); [26.04.1964]))

@TextToNumber( строка )

@TextToNumber( список_строк

)

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

Преобразует, если возможно, текстовую строку в число. Эту функцию удобно использовать для преобразования числа в текстовом поле в число, для вычислений в числовом поле. При использовании в качестве аргумента списка строк, возвращает список, получившийся поэлементным применением функции.

Если строка, или элемент списка строк, начинается с цифры, то такой аргумент будет преобразован в число, даже если он содержит символы букв (они будут отброшены). Если аргумент начинается с буквы, то будет возвращено @Error.

Пример 1. Возвращает 123 как число.

@TextToNumber( "123" )

Пример 2. Возвращает @ERROR, если содержимого поля Cost нельзя преобразовать в число.

@TextToNumber( Cost )

Пример 3. Возвращает список 345 : @ERROR : -26.7 .

@TextToNumber( "+345ABC" : "QWE123" : "-26.7" )

J @ToNumber( значение )

J @ToNumber( список_значений )

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

Преобразует, если возможно, значение или список_значений

в число или числовой список соответственно. В отличие от @TextToNumber в качестве аргумента может воспринимать числа и числовые списки. В этом случае возвращается сам аргумент.

Еще одно отличие (и значительно более существенное) этой функции от @TextToNumber состоит в том, что ошибки преобразования значений с помощью @ToNumber могут быть обработаны функцией @IfError, в то время как ошибки, возвращаемые @TextToNumber, функцией @IfError не обрабатываются.



Если специально не обрабатывать ошибки преобразования, то функция возвращает окно с сообщением об ошибке либо «The value cannot be converted to a Number» (значение не может быть преобразовано к числу», либо «Cannot convert text to a number» (невозможно преобразовать текст к числу). Это состояние ошибки можно обработать с помощью функции @IsError или @IfError.

Пример 1. Возвращает окно с сообщением об ошибке: «Cannot convert text to a number».

@ToNumber( "2" : "45" : "e34" )

Пример 2. Возвращает список «12 : (-3) : 4».

@ToNumber( "12" : "-3" : "4" )

Пример 3. Возвращает «12 : (-3) : 4».

@ToNumber( 12 : (-3) : 4 )

Пример 4. Переменной b будет присвоено значение «2 : 45 : 0», а переменной c – «2 : 45 : @ERROR».

a := "2" : "45" : "e34";

b := @Transform( a; "x"; @IfError(@ToNumber( x ); 0));

c := @Transform( a; "x"; @IfError(@TextToNumber( x ); 0));

J @Text( значение )

@Text( список_значений

)

@Text( значение; формат

)

@Text( список_значений; формат )

Область применения: без ограничений. При использовании в качестве первого аргумента полей типа Rich Text не работает в формулах колонок.

Преобразует любое значение в текстовую строку или список текстовых строк. В R 6 в качестве значения может выступать поля типа Rich Text. При этом после применения функции в результате получим текстовое значение поля без вложенных файлов и элементов форматирования, за исключением символов табуляции и пробелов. Однако в этом случае @Text нельзя применять в формулах колонок. Так же не следует забывать перед применением @Text нужно предварительно сохранить документ, иначе функция вернет значение Rich Text-поля действительного на момент последнего сохранения. Из личного опыта, при преобразовании Rich Text к plain text с помощью функции @Text в начале строки возвращаемого значения присутствует лишние символы LF + CR.

В варианте с двумя параметрами преобразованное значение имеет формат, заданный строкой формат. Строка формат



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

Строка формат для значений дата-время. Имеются четыре отдельные категории составляющих времени и даты для строки формат: Dx, Tx, Zx, Sx. Можно включать до четырех составляющих, но только по одной из каждой категории. Когда неизвестен ожидаемый формат первого параметра (присутствуют ли в нем только даты, или только времени, или обе компоненты), то рекомендуется использовать формат типа Sx (вместо Dx или Tx).

Символ

Значение

D0

D1

D2

D3

Год, месяц и день

Месяц и день, год, если это не текущий год

Месяц и день

Год и месяц

T0

T1

Час, минута и секунда

Час и минута

Z0

Z1

Z2

Всегда переводить время в этот временной пояс

Показывать пояс только вне текущего пояса

Показывать пояс всегда

S0

S1

S2

S3

Только дата

Только время

Дата и время

Дата, время или время "Сегодня", время "Завтра"

Пример 1. Формула могла бы вернуть "11.04.95 10:43".

@Text( @Now )

Пример 2. Возвращает "28.2":"27.2", если сегодня - 28 февраля.

@Text( @Now : @Yesterday; "d1s0" )

Пример 3. Возвращает "10:50:30 ZE3", если время - 10:50:30 в поясе GMT + 3.

@Text( @Now; "d1s1z2" )

Пример 4. Возвращает "04.93 10:43".

@Text( @Now; "d3t1" )

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

Символ

Значение

G

Общий формат (только значащие цифры)

F

Фиксированный формат (стандартное количество знаков после точки)

S

Научный формат (E-запись)

C

Формат валюты (два знака после точки)

,

С разделителями тысяч (формат США)

%

Процент

( )

Отрицательные числа в скобках

Число

С точностью до знака число

<


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

@Text( 123.45 )

Пример 6. Возвращает "1 800 345.23 р.", если значение в поле Sales равно 1800345.23 .

@Text( Sales; "C,2" )

Пример 7. Возвращает "8.00e+02".

@Text( 800; "S" )

J @TimeToTextInZone( дата_время; часовой_пояс

                                          [; формат] )

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

Преобразует значение дата_время из формата дата/время в текст с учетом часового пояса.

Параметр часовой_пояс задается в каноническом формате (см. замечания к функции @GetCurrentTimeZone, стр. 92).

Необязательный текстовый параметр формат

определяет присутствующие в возвращаемом значении компоненты даты и времени. В качестве допустимых символов строке можно использовать следующие комбинации:

Символ

Значение

D0

D1

D2

D3

Год, месяц и день

Месяц и день, год, если это не текущий год

Месяц и день

Год и месяц

T0

T1

Час, минута и секунда

Час и минута

S0

S1

S2

S3

Только дата

Только время

Дата и время

Дата, время или время "Сегодня", время "Завтра"

В рамках параметра формат можно использовать до трех комбинации параметров форматирования из групп Dx, Tx и Sx, но только по одной из каждой группы.

Когда неизвестен ожидаемый формат параметра дата_время

(присутствуют ли в нем только даты, или только времени, или обе компоненты), то рекомендуется использовать формат типа Sx (вместо Dx или Tx).

Пример 1. Возвращает значение "26.04.1964 16:24:27", если в поле Tz типа Time zone находится значение, соответствующее «(GMT+07:00) Krasnoyarsk» (канонический формат «Z=-7$DO=1$DL=3 -1 1 10 -1 1$ZX=48$ZN=North Asia»), и формула выполняется на компьютере, находящемся в часовом поясе «(GMT+03:00) Moscow, St. Petersburg, Volgograd».

@TimeToTextInZone([26.04.1964 12:24:27]; Tz)

Пример 2. Модифицированный пример 1, с теми же условиями для часовых поясов возвращает "26.04 16:24".

@TimeToTextInZone([26.04.1964 12:24:27]; Tz; "D2T1")



J @TimeZoneToText( часовой_пояс [; формат] )

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

Преобразует значение часового_пояса из канонического формата к тексту. Необязательный параметр формат

может содержать следующие символы:

Символ

Значение

S

Возвращаемое значение соответствует сокращенному формату часового пояса. Например, "GMT+03:00".

A

Алиас для локального времени. Например, если формула выполняется в том же часовом поясе что и первый параметр, то возвращается значение "Local time".

Если параметр формат опущен, то возвращается полный формат часового пояса. Например, «(GMT+03:00) Moscow, St. Petersburg, Volgograd».

Пример 1. Возвращает значение "(GMT+07:00) Krasnoyarsk", если в поле Tz типа Time zone находится значение, соответствующее «(GMT+07:00) Krasnoyarsk» (канонический формат «Z=-7$DO=1$DL=3 -1 1 10 -1 1$ZX=48$ZN=North Asia»).

@TimeZoneToText( Tz )

Пример 2. Модифицированный пример 1 возвращает " GMT+07:00".

@TimeZoneToText( Tz;"S" )

@Explode( строка )

@Explode( список_строк

)

@Explode( строка; строка_разделитель

)          

@Explode( список_строк; строка_разделитель )

@Explode( строка; строка_разделитель; флаг1 )

@Explode( список_строк; строка_разделитель;

                   флаг1 )

J @Explode( строка; строка_разделитель; флаг1;

                     флаг2 )

J @Explode( список_строк; строка_разделитель;

                     флаг1; флаг2 )

@Explode( диапазон_дат

)

@Explode( список_диапазонов_дат

)

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

@Explode( строка ) возвращает список, составленный из подстрок текстовой строки. В этом варианте в качестве разделителя подстрок используются пробелы, запятая, точка с запятой.

@Explode( строка; строка_разделитель ) действует аналогично предыдущему варианту, но для определения конца подстроки используется один из указанных в строке_разделителе символов.

@Explode( строка; строка_разделитель; флаг1

)
действует аналогично предыдущему варианту, и если значение флага1



равно 0 (FALSE), то из результирующего списка исключаются элементы тождественно равные пустой строке. Если флаг1 равен 1 (TRUE), то пустые строки не исключаются. По умолчанию параметр флаг1 установлен в 0 (FALSE).

В R 6 добавлен новый флаг2. При установке его в 1 (TRUE), функция @Explode будет воспринимать символ перехода на новую строку как разделитель подстрок, даже если ее нет в строке_разделителе. Если флаг2 равен 0 (FALSE), то функция не будет воспринимать символ перехода на новую строку как разделитель подстрок, при условии, что ее нет в строке_разделителе. По умолчанию параметр флаг2

установлен в 1 (TRUE).

@Explode( диапазон_дат ) возвращает список текстовых строк, представляющих значения дат из диапазона_дат. При задании диапазона дат не забывайте о синтаксисе значений типа "дата-время". Значение [26.04.64 - 30.05.68] соответствует синтаксису, а "26.04.64 - 30.05.68" - нет.

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

Пример 1. Возвращает "Отчет" : "за" : "неделю", если в поле Topic содержится "Отчет за неделю".

@Explode( Topic )

Пример 2. Возвращает "Защита диссертаций в МВТУ" : " МФТИ" : " МГУ", если в поле Headline содержится "Защита диссертаций в МВТУ, МФТИ, МГУ".

@Explode( Headline; "," )

Пример 3. Возвращает "" : "Привет" : "" : "всем", если в поле Country "+Привет++всем".

@Explode( Country; "+"; 1 )

Пример 4. Возвращает "Привет" : "всем", если в поле Country "+Привет++всем".

@Explode( Country; "+"; 0 )

Пример 5. Возвращает "26.04.64" : "27.04.64" : "28.04.64" : "29.04.64".

@Explode( [26.04.64 - 29.04.64] )

Пример 6. Возвращает для переменной a число элементов 4, а для b – 5



Country := "+При"+@NewLine+"вет++всем";

a := @Explode( Country; "+";1;0 ) ;

@Prompt([OK];"Elements a"; @Text(@Elements(a)));

b := @Explode( Country; "+";1;1) ;

@Prompt([OK];"Elements b"; @Text(@Elements(b)));

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

@Implode( список_строк; строка_разделитель )

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

Сцепляет все элементы списка_строк в одну строку. При задании с одним параметром элементы списка_строк в возвращаемой строке разделены пробелом, при задании второго параметра, элементы разделены строкой_разделителем. Если функции передается строка, а не список, то возвращается исходная строка.

Пример 1. Возвращает "Париж Москва Берлин", если в поле Сity содержится "Париж" : "Москва" : "Берлин".

@Implode( City )

Пример 2. Возвращает "Париж+/-Москва+/-Берлин", если в поле Сity содержится "Париж" : "Москва" : "Берлин".

@Implode( City; "+/-" )

Пример 3. Возвращает "Европейские столицы/Париж : Европейские столицы/Москва : Европейские столицы/Берлин", если в поле Categories содержится "Европейские столицы", а в поле Сity содержится "Париж" : "Москва" : "Берлин".

@Implode( Categories + "/" + City ; " : " )

@Char( код_символа )

Область применения: без ограничений. Код символа должен быть числом и лежать в интервале от 0 до 255. Дробные значения автоматически усекаются до целого.

Преобразует код символа в односимвольную строку в соответствии с 850-й кодовой страницей IBM. Символы с кодами меньше 9 не работают в формулах колонок видов.

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

@Char( 65 )

@Ascii( строка

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

@Ascii( строка; [AllInRange] )

@Ascii( список_строк; [AllInRange] )

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

Преобразует строку или список строк, представленных в кодировке LMBCS (Lotus Multi-Byte Character Set), соответственно в строку или список строк в кодировке ASCII. В случае задания второго параметра [AllInRange] при условии, что в строке или списке_строк

присутствуют символы, коды ASCII которых не попадают в интервал от 32 до 127, возвращаемое значение будет пустая строка. Функция сначала преобразует первый аргумент в строку или список строк ASCII, заменяя символы с кодами меньше 32 и больше 127 на символ "?", и затем в случае задания второго аргумента рассматривает полученное значение, и если в нем встретился символ "?", возвращает пустую строку. Поэтому если в исходной строке присутствовал символ "?" и аргумент [AllInRange] указан, то возвратится значение "".

Пример 1. Возвращает "Hello - ??????".

@Ascii( "Hello - Привет" )

Пример 2. Возвращает "", если значение в поле Claim равно "one" : "два".

@Ascii( Claim; [AllInRange] )

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

@Ascii( "What is new ?"; [AllInRange] )


Содержание раздела