RPGLE中%CHECK()和%checkr()之间的区别?

时间:2014-09-16 12:33:35

标签: ibm-midrange difference rpgle

我访问了很多网站,但无法得到任何满意的答案。请帮我理解这个。我试图制作一个程序,但无法理解。 我试过了:

 String  = 'AABC1ABD2AB3A';                         

 Pos = %check ('ABCD' : %trim(String));             
 dsply pos;   

2 个答案:

答案 0 :(得分:2)

%check()从左向右解析,%checkr()从右向左解析。

给出示例,%check()将返回5,%checkr()将返回12。

答案 1 :(得分:1)

I tried to make a program but could not understand.

的含义尚不清楚

您没有说示例代码有什么问题,所以我们无能为力。您显示的代码看起来很好,虽然它没有显示Stringpos的定义,也没有显示程序将如何结束。

这是一个更完整的例子:

 D string          S             15

 D pos1            S             10  0 inz( 0 )
 D pos2            S             10  0 inz( 0 )

  /free

     String = 'AABC1ABD2AB3A' ;
     //            ^      ^
     // The above characters will trigger mismatches for
     // %CHECK() and %CHECKR.

     Pos1 = %check ( 'ABCD' : %trim( String )) ;
     Pos2 = %checkr( 'ABCD' : %trim( String )) ;

     // Will display the value "1 3"
     dsply ( %subst( %trim(String): pos1: 1 ) + ' ' +
             %subst( %trim(String): pos2: 1 ) );

    *inlr = *on ;
    return ;

  /end-free

String中的值首先从左侧检查%CHECK(),然后从右侧检查%CHECKR()。使用%TRIM()修剪该值以避免在任何前导或尾随空白处获得命中。然后,测试将查找与提供的测试字符ABCD不匹配的任何字符。该程序尝试确保String仅包含测试字符,并标记未通过测试的第一个字符的位置。

失败字符的索引存储在Pos1Pos2中。 (如果所有字符都通过了检查,则返回零。)

DSPLY操作码将输出不匹配的第一个字符。它使用索引值来为失败的字符提取单字符子串。它显示%CHECK()和%CHECKR()的不同字符,因为它们从String的不同端开始。