2016-09-01 103 views
2

我在ILE RPG中頗爲新穎。今天,我開始從我的作品中編寫出書。在本章的其中一章中,有一些使用子串函數%SUBSTR的示例。下面是代碼:ILE 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:start2/2:length+1)    
C*                  
C     MOVE  *ON   *INLR 

編譯時,有一種異常執行,告訴我有在功能%SUBST錯誤的參數。確切地說:第二個參數是錯誤的。我只在最後的EVAL中得到這個錯誤。

+0

我得到了錯誤......在ILE RPG沒有'/'運算符。作者只是錯過了類型。 – Radinator

回答

8

你觸犯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       
+4

或者您可以使用%div(start2:2)來獲取整數結果。 –