Ibm midrange 在RPGLE中,如何检查10大小变量的最后3个字符是否为数字

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(值:位数)

我有一个10号的变量。它存储10个大小的值,如“KUNAL12345”。如何检查值的最后3个字符是否为数字。在本例中,最后3个字符是345,这是一个数值。

您可以这样使用(我没有测试)

或者像@jtaylor说的那样

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 ;