Ibm midrange 在RPGLE中,如何检查10大小变量的最后3个字符是否为数字
我有一个10号的变量。它存储10个大小的值,如“KUNAL12345”。如何检查值的最后3个字符是否为数字。在本例中,最后3个字符是345,这是一个数值。您可以这样使用(我没有测试) 或者像@jtaylor说的那样Ibm midrange 在RPGLE中,如何检查10大小变量的最后3个字符是否为数字,ibm-midrange,rpgle,Ibm Midrange,Rpgle,我有一个10号的变量。它存储10个大小的值,如“KUNAL12345”。如何检查值的最后3个字符是否为数字。在本例中,最后3个字符是345,这是一个数值。您可以这样使用(我没有测试) 或者像@jtaylor说的那样 if %checkr(value:digits) < 8; // each of the three last characters is a digit character endif; 如果%checkr(值:位数)
if %checkr(value:digits) < 8;
// each of the three last characters is a digit character
endif;
如果%checkr(值:位数)<8;
//最后三个字符中的每一个都是数字字符
endif;
您可以使用sql regexp
函数。与字符串末尾的3位数字匹配的正则表达式是\d\d$
对于最后3个字符,应该是
%substr(值:8:3)
,您也可以%checkr()并省去子字符串。@Charles right!对于%CHECK case,您在4小时前就已经厌倦了,可以使用%SUBST(值:%LEN(值)-2)从最后第三个字符开始,转到字符串的结尾(不需要“length”参数),而不是硬编码8。但是这也不是很理想,因为“2”对于“最后三个字符”不是很自我记录的。%substr应该是%subst。我试图编辑它,但它不允许我更改1个字符。
if %checkr(value:digits) < 8;
// each of the three last characters is a digit character
endif;
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 ;