我是ILE RPG的新手。今天,我开始根据自己的工作写书。在本章的其中一章中,介绍了一些使用子字符串函数%SUBSTR
的示例。这是代码:
DMOD S 5 INZ('VWXYZ')
DCON S 5 INZ('abcde')
DLENGTH S 5 0 INZ(2)
DSTART1 S 5 0 INZ(3)
DSTART2 S 5 0 INZ(4)
D*
C mod DSPLY
C con DSPLY
C start1 DSPLY
C start2 DSPLY
C length DSPLY
C*
C EVAL %SUBST(mod:3:2) = con
C*
C EVAL %SUBST(mod : 3 : 2) = %SUBST(con : 4 : 2)
C*
C EVAL %SUBST(mod:start1:length) =
C %SUBST(con:start1:length)
C*
C EVAL %SUBST(mod:start1-1:length) =
C %SUBST(con:start2/2:length+1)
C*
C MOVE *ON *INLR
编译时,执行异常,告诉我函数
%SUBST
中的参数错误。确切地说:第二个参数是错误的。我仅在最后一个EVAL
中收到此错误。 最佳答案
您违反了RPG的precision rules ...
/运算符不是整数除法,它是数字,并且结果有小数位。
您需要显式控制表达式的结果类型:
DMOD S 5 INZ('VWXYZ')
DCON S 5 INZ('abcde')
DLENGTH S 5 0 INZ(2)
DSTART1 S 5 0 INZ(3)
DSTART2 S 5 0 INZ(4)
D*
C mod DSPLY
C con DSPLY
C start1 DSPLY
C start2 DSPLY
C length DSPLY
C*
C EVAL %SUBST(mod:3:2) = con
C*
C EVAL %SUBST(mod : 3 : 2) = %SUBST(con : 4 : 2)
C*
C EVAL %SUBST(mod:start1:length) =
C %SUBST(con:start1:length)
C*
C EVAL %SUBST(mod:start1-1:length) =
C %SUBST(con:%int(start2 / 2):length+1)
C*
C MOVE *ON *INLR
关于ibm-midrange - ILE RPG程序无法编译,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39273504/