ibm-midrange - ILE RPG 程序无法编译

标签 ibm-midrange rpgle

我是 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/

相关文章:

java - 无法接收 DSPLIBL(as400.access 包)的输出

python-3.x - 如何在python中建立连接以连接as400并使用参数调用任何as400程序

ibm-midrange - 有没有办法通过选择性上次更改日期进行过滤以查看 SEU 中的源数据

ibm-midrange - 在 RPGLE 程序中,为什么 EXCEPT 优先于 UPDATE 来更新 PF 中的字段?

ibm-midrange - IBMi(AS/400、iSeries)有哪些开发工具?

使用 IFSFileInputStream 连接到 iSeries 时出现 java.netConnectException 错误

ibm-midrange - RPGLE 中整数类型的标准选择应该是什么?

ibm-midrange - 我有一个 PF,如何获取使用该特定 PF 的程序列表?

ibm-midrange - 如何在 RPGLE 中获取角色的 EBCDIC 值?

ibm-midrange - 如何在部分自由格式 RPG 中将变量/字段值转换为 IBM 签名数值