2016-09-01 6 views
2

ILE RPGではかなり新しいです。今日は仕事から本を作り始めました。この章の1つでは、サブリング関数%SUBSTRの使い方のサンプルがいくつかあります。ILE RPG programmはコンパイルされません

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で間違ったパラメータがある私に指示、異常の実行がある:ここではコードです。正確には、第2パラメータは間違っています。私は最後に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)を使用して整数結果を取得することもできます。 –

関連する問題