我访问了很多网站,但无法得到任何满意的答案。请帮我理解这个。我试图制作一个程序,但无法理解。 我试过了:
String = 'AABC1ABD2AB3A';
Pos = %check ('ABCD' : %trim(String));
dsply pos;
答案 0 :(得分:2)
%check()从左向右解析,%checkr()从右向左解析。
给出示例,%check()将返回5,%checkr()将返回12。
答案 1 :(得分:1)
I tried to make a program but could not understand.
您没有说示例代码有什么问题,所以我们无能为力。您显示的代码看起来很好,虽然它没有显示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
String
中的值首先从左侧检查%CHECK(),然后从右侧检查%CHECKR()。使用%TRIM()修剪该值以避免在任何前导或尾随空白处获得命中。然后,测试将查找与提供的测试字符ABCD
不匹配的任何字符。该程序尝试确保String
仅包含测试字符,并标记未通过测试的第一个字符的位置。
失败字符的索引存储在Pos1
和Pos2
中。 (如果所有字符都通过了检查,则返回零。)
DSPLY操作码将输出不匹配的第一个字符。它使用索引值来为失败的字符提取单字符子串。它显示%CHECK()和%CHECKR()的不同字符,因为它们从String
的不同端开始。