2012-07-30 3 views
2

을 읽을 수 있습니다.단지 내가 실제 파일을 읽을 수있는 프로그램을 작성 하나 개의 값

그것은 USRID를 복제합니다 당연히 :

내 프로그램에이 같은 이전의 최대 값 확인

:

 
Opt USR ID User Name 
A0000001 SAMSUL ARIPIN MISDAR            
A0000002 NUR QISTINA SAFIYYAH            
A0000003 LEE TSAE YUN              
A0000004 SOFFUAN SAURI 

: 나는 다음과 같은 사용자가

 
0019.01 C  *LOVAL  SETLL  USRTS                     
0019.03 C  USRID   READE  USRTS         45            
0019.04 C     DOW  (*IN45='0')                    
0019.05 C     IF  (USRDT>=MIN)                   
0019.06 C     MOVE  USRTO   MAX                  
0019.07 C     MOVE  USRDT   MIN                  
0019.08 C     ENDIF                        
0019.09 C  USRID   READE  USRTS         45            
0019.10 C     ENDDO                        
0029.00 C     ENDSR 

을 그러나 이전의 가치와 비교하려고 할 때. 내 프로그램에서만 다른 사용자가 아닌 A000000001 사용자를 확인할 수 있습니다.

모든 사용자를 검사하도록 progrtam을 어떻게 수정할 수 있습니까?

답변

3

19.01 라인에서 왜 * LOVAL을 사용하여 하한값을 설정합니까? "USRID ... SETLL"로 더 잘 봉사하게 될 것 같아서 문제가 해결 될 것입니다. SETLL을 수행하면 Factor 1의 값에 커서가 위치하게됩니다. Factor 1이 * LOVAL이면이 값은 파일의 시작 부분에 위치합니다.

다음 (READE) 조작은 현재 위치 이후의 레코드를 검색하고, 그 키 값을 인수 1에 지정된 키와 비교합니다. 파일의 시작 부분에 위치하기 때문에 READE는 유일한 것입니다 파일의 첫 번째 (최저 순서) 키와 일치하므로 가장 낮은 키만 작동하는 것처럼 보입니다.

호기심 때문에 왜 자유형으로 글을 쓰고 있지 않습니까? 당신이 파일에서 모든 사용자 레코드를 읽을 바로 읽을 수있는 학년 때 락커룸을 변경 (와 키 매개 변수를 제거)하려면 ... 대비/

SETLL usrid USRTS ; 
READE usrid USRTS ; 
DOW Not %EOF(USRTS) ; 
    IF USRDT >= MIN ; 
     MAX = USRTO ; 
     MIN = USRDT ; 
    EndIF ; 
    READE usrid USRTS ; 
EndDO ; 
EndSR ; 
+0

이것은 USRID 필드와 일치하는 레코드 만 읽습니다. % EOF는 USRID가 변경 될 때만 켜집니다. 그것은 원하는 것입니까? –

+0

BTW, 자유 형식 주석에 +1. –

+0

@ david - 원하는 것이 맞는지는 확실하지 않습니다 (콘텐츠를 기반로 한 것처럼 보이지만). 위의 코드 만 에뮬레이션했습니다. 또는 적어도 그것은 나에게 그것 같이 보인다. – Dennis

0

비교.

+0

동의. 게시물이 모호합니다. – Dennis