Ibm midrange RPGLE中的%CHECK()和%checkr()之间的差异?

Ibm midrange RPGLE中的%CHECK()和%checkr()之间的差异?,ibm-midrange,difference,rpgle,Ibm Midrange,Difference,Rpgle,我访问了许多网站,但没有得到任何满意的答案。请帮我理解这个。我试着编一个程序,但听不懂。 我试过: String = 'AABC1ABD2AB3A'; Pos = %check ('ABCD' : %trim(String)); dsply pos; %check()从左到右解析,%checkr()从右到左解析 在这个示例中,%check()将返回5,%checkr()将返回12。%check()从左到

我访问了许多网站,但没有得到任何满意的答案。请帮我理解这个。我试着编一个程序,但听不懂。 我试过:

 String  = 'AABC1ABD2AB3A';                         

 Pos = %check ('ABCD' : %trim(String));             
 dsply pos;   
%check()从左到右解析,%checkr()从右到左解析

在这个示例中,%check()将返回5,%checkr()将返回12。

%check()从左到右解析,%checkr()从右到左解析

在这个示例中,%check()将返回5,%checkr()将返回12。

%check()从左到右解析,%checkr()从右到左解析

在这个示例中,%check()将返回5,%checkr()将返回12。

%check()从左到右解析,%checkr()从右到左解析


在这个例子中,%check()将返回5,%checkr()将返回12。

不清楚您所说的
是什么意思,我试图制作一个程序,但无法理解。

您没有说示例代码有什么问题,所以我们帮不了什么忙。您显示的代码看起来不错,尽管它没有显示
String
pos
的定义,也没有显示程序将如何结束

下面是一个更完整的示例:

 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
字符串中的值首先用%CHECK()从左边检查,然后用%CHECKR()从右边检查。使用%TRIM()修剪该值,以避免在任何前导空格或尾随空格上获得命中。然后,测试将查找与提供的测试字符不匹配的任何字符。该程序尝试确保
字符串
仅包含测试字符,并标记测试失败的第一个字符的位置

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


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

不清楚您所说的
是什么意思我试图制作一个程序,但无法理解。

您没有说示例代码有什么问题,所以我们帮不了什么忙。您显示的代码看起来不错,尽管它没有显示
String
pos
的定义,也没有显示程序将如何结束

下面是一个更完整的示例:

 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
字符串中的值首先用%CHECK()从左边检查,然后用%CHECKR()从右边检查。使用%TRIM()修剪该值,以避免在任何前导空格或尾随空格上获得命中。然后,测试将查找与提供的测试字符不匹配的任何字符。该程序尝试确保
字符串
仅包含测试字符,并标记测试失败的第一个字符的位置

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


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

不清楚您所说的
是什么意思我试图制作一个程序,但无法理解。

您没有说示例代码有什么问题,所以我们帮不了什么忙。您显示的代码看起来不错,尽管它没有显示
String
pos
的定义,也没有显示程序将如何结束

下面是一个更完整的示例:

 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
字符串中的值首先用%CHECK()从左边检查,然后用%CHECKR()从右边检查。使用%TRIM()修剪该值,以避免在任何前导空格或尾随空格上获得命中。然后,测试将查找与提供的测试字符不匹配的任何字符。该程序尝试确保
字符串
仅包含测试字符,并标记测试失败的第一个字符的位置

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


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

不清楚您所说的
是什么意思我试图制作一个程序,但无法理解。

您没有说示例代码有什么问题,所以我们帮不了什么忙。您显示的代码看起来不错,尽管它没有显示
String
pos
的定义,也没有显示程序将如何结束

下面是一个更完整的示例:

 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
字符串中的值首先用%CHECK()从左边检查,然后用%CHECKR()从右边检查。使用%TRIM()修剪该值,以避免在任何前导空格或尾随空格上获得命中。然后,测试将查找与提供的测试字符不匹配的任何字符。该程序尝试确保
字符串
仅包含测试字符,并标记测试失败的第一个字符的位置

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

DSPLY op代码将输出不匹配的第一个字符。它使用索引值为失败的字符提取单字符子字符串。