Функции определения и преобразования типов данных
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 |
Только дата Только время Дата и время Дата, время или время "Сегодня", время "Завтра" |
@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 |
Только дата Только время Дата и время Дата, время или время "Сегодня", время "Завтра" |
Когда неизвестен ожидаемый формат параметра дата_время
(присутствуют ли в нем только даты, или только времени, или обе компоненты), то рекомендуется использовать формат типа 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". |
Пример 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] )