ILE RPG程序将无法编译

Rad*_*tor 2 rpgle ibm-midrange

我是ILE RPG的新手.今天我开始从我的工作中找出书.在本章的其中一章中,有一些使用Substring函数的示例%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 
Run Code Online (Sandbox Code Playgroud)

编译时,有一个异常执行,告诉我函数中有错误的参数%SUBST.确切地说:第二个参数是错误的.我只在最后得到这个错误EVAL.

Cha*_*les 8

你正在违反RPG的精确规则 ......

/运算符不是整数除法,它是数字,结果有小数位.

您需要显式控制表达式的结果类型:

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                           
Run Code Online (Sandbox Code Playgroud)

  • 或者你可以使用%div(start2:2)来获得整数结果. (4认同)