У меня есть переменная с размером 10. Она хранит значение 10 размера, например «KUNAL12345». Как я могу проверить, являются ли последние 3 символа значения числовыми или нет. В этом случае последние 3 символа - это 345, что является числовым значением.
В RPGLE, как я могу проверить, являются ли последние 3 символа переменной размера 10 числовыми или нет
Ответы (2)
Вы можете использовать % check вот так (я не тестировал )
dcl-c digits '0123456789';
dcl-s value char(10) inz('KUNAL12345');
if %check(%subst(value:8:3):digits) = 0;
// each of the three last characters is a digit character
endif;
или как говорит @jtaylor
if %checkr(value:digits) < 8;
// each of the three last characters is a digit character
endif;
person
nfgl
schedule
03.12.2020
должно быть
%substr(value:8:3)
для последних 3 символов
- person Charles; 03.12.2020
Вы также можете% checkr () и отказаться от подстроки.
- person jtaylor___; 03.12.2020
@ Чарльз, верно! Уже устал 4 часа назад
- person nfgl; 03.12.2020
@jtaylor___ тоже верно отредактировал мой ответ, спасибо!
- person nfgl; 03.12.2020
Для случая% CHECK вместо жесткого кодирования 8 вы можете использовать% SUBST (VALUE:% LEN (VALUE) -2), чтобы начать с третьего последнего символа и перейти к концу строки (параметр длины не требуется) . Но ... это тоже не идеально, поскольку 2 не очень самодокументируется для третьего последнего символа.
- person Barbara Morris; 03.12.2020
% substr должно быть% subst. Я попытался отредактировать его, но это не позволило мне изменить 1 символ.
- person Barbara Morris; 03.12.2020
в этом случае синтаксис должен быть: if% checkr (digits: value) ‹8; // каждый из трех последних символов - это цифра endif; нет, если% checkr (значение: цифры) ‹8; // каждый из трех последних символов - это цифра endif;
- person Kunal Roy; 04.12.2020
вы можете использовать sql regexp
функции. Регулярное выражение, которое соответствует 3 цифрам в конце строки, равно \d\d\d$
d text s 80a varying
d match s 80a varying
d i5 s 5i 0
d numMatches s 10i 0
/free
text = 'steve 7335' ;
exec sql
set :numMatches = regexp_count( :text, '\d\d\d$', 1 ) ;
if numMatches > 0 ;
endif ;
text = 'steve 733z3' ;
exec sql
set :match :i5 = regexp_substr( :text, '\d\d\d$', 1, 1 ) ;
if i5 = -1 ;
// not a match
endif ;
person
RockBoro
schedule
03.12.2020