2016-09-01 4 views
2

ILE RPG에서 새로운 점이 있습니다. 오늘 나는 내 작품에서 책을 읽었습니다. 이 장의 한 부분에는 하위 문자열 함수 %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에 잘못된 매개 변수가 나에게 알려주는 비정상적인 실행이 : 여기에 코드입니다. 정확히 말하면 두 번째 매개 변수가 잘못되었습니다. 나는이 오류가 마지막으로 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)를 사용하여 정수 결과를 얻을 수 있습니다. –