2013-07-15 5 views
1

현재로서는 이러한 임시 작업 파일의 출력을 제한해야합니다. 이유는 이것들이 거대한 마스터 파일이고, 영원히 달릴 수 있다는 것입니다. 그리고 * NOMAX 파일을 만들지 않으면 더 많은 확장을 위해 메시지에 응답 할 사람이 있어야하며 작업 대기열을 보유합니다. 지금은 데이터가 올바르게 선택되었음을 보여주고 싶습니다. 하지만이 카운트 필드를 추가했지만 프로그램을 중지하지는 않습니다.AS400 RPG에서 출력 작업 파일 제한

FARCMASAC IF E    DISK         
* Order Header file - Keyed by Company and entity number   
FOEORH4 IF E   K DISK         
* Output file - Customers who hav no orders - TRCMASAC PF   
FTRCMA1 UF A E   K DISK         
* Customer Keycode BI file           
FZRCST1 IF E   K DISK         
* Output file - Customers who have no Keycode - VRCSTKBI PF  
FVRCST1 UF A E   K DISK         
* Address Master file - ADRESSAD PF        
FADRES1 IF E   K DISK         
* Output file - Address - ZDRESSAD PF        
FZDRES1 UF A E   K DISK         

*----------------------------------------------------------------- 
* Calculation Specification           
*----------------------------------------------------------------- 
* Step 1               
C     READ  ARCMASAC        
C     DOW  NOT %EOF      
*               
* Check the record does not exist in order header file  
C     EXSR  CHKORH_SR      
* Read the next record          
C     READ  ARCMASAC      
c  counta  ifge  9990       
C     EVAL  *INLR = *ON     
c     leave         
c     endif         
c  countz  ifge  9990       
C     EVAL  *INLR = *ON     
c     leave         
c     endif         
C     ENDDO         

* Step 2 and 3            
C  *LOVAL  SETLL  TRCMA1       
C     READ(N) TRCMA1       
C     DOW  NOT %EOF      

C     EXSR  CHKCUS_SR        
*                 
* Check the record does not exist in address file     
C     EXSR  CHKADR_SR        
*                 
* Read the next record            
C     READ(N) TRCMA1         
C     ENDDO            

*----------------------------------------------------------------- 
* End of the Program             
*----------------------------------------------------------------- 
C     EVAL  *INLR = *ON        

*----------------------------------------------------------------- 
* Check the order header entity          
*----------------------------------------------------------------- 
C  CHKORH_SR  BEGSR            
C  ORHKEY  CHAIN  OEORH4          
* If the order entity is notfound, write the rec into TRCMASAC file  
C     IF  NOT %FOUND(OEORH4)       
C     WRITE  TRCMASRR         
C     ENDIF            
*                  
C     ENDSR            
*-----------------------------------------------------------------  
* Check the customer keycode entity          
*-----------------------------------------------------------------  
C  CHKCUS_SR  BEGSR            
*                  
C  ORHKEY  CHAIN  ZRCST1          
* If the order entity is found, write the rec into VRCSTKBI file  
C     IF  %FOUND(ZRCST1)        
C     WRITE  VRCSTKRR         
c     add  1    countz   500  
C     ENDIF            
C     ENDSR             

*-----------------------------------------------------------------  
* Check the address entity for records of never ordered     
*-----------------------------------------------------------------  
C  CHKADR_SR  BEGSR             
*                  
C  ACENT#  CHAIN  ADRES1          
* If the order entity is found, write the rec into ZDRESSRR file   
C     IF  %FOUND(ADRES1)        
C     WRITE  ZDRESSRR         
c     add  1    counta   500   
C     ENDIF             
*                  
C     ENDSR             

*-----------------------------------------------------------------  
* Program Initialization Subroutine          
*-----------------------------------------------------------------  
C  *INZSR  BEGSR             
+0

이 프로그램이 끝난 후 작업 파일이 필요합니까? 실제 목표는 무엇입니까? – WarrenT

+0

데이터에 익숙하지 않은 경우 가장 좋은 답변은 추측 일 것입니다. DOW NOT % EOF (ARCMASAC)와 같은 % EOF를 한정하여 모호성을 제거하십시오. 나는이 프로그램에 더 많은 것들이 있다는 것을 모았고, 필요한 디버깅 조각들이 생략 된 것 같다. 전체 소스를 올리거나 (그런 질문을 없애기에 충분합니다) ... 제발, 자유 형식 인 것처럼 고정 형식 코드를 게시하지 마십시오. 스택 오버플로의 코드 함수를 사용하면 코드가 올바르게 표시됩니다. http://publib.boulder.ibm.com/iseries/v5r2/ic2924/books/c092508429.htm#HDRBBEOF – Dennis

+0

프로그램을 완료 한 후 작업 파일이 필요합니다. – Booksman

답변

1

당신은 처음 DO 루프 countacountz의 값을 확인하고 - 두 번째 DO 루프 때까지를 증가하지 않습니다하지만. 두 번째 DO 루프에

c  counta  ifge  9990       
C     EVAL  *INLR = *ON     
c     leave         
c     endif         
c  countz  ifge  9990       
C     EVAL  *INLR = *ON     
c     leave         
c     endif 

코드 :

은 이동

.