2014-09-17 4 views
0

% scan()을 사용하여 'INDIAN'에서 'NDIA'를 스캔하면 0보다 큰 값이 반환됩니다. 배열에서 % lookup()을 사용하면 동일하면 0이 반환됩니다. 왜?RPGLE에서 % 검색과 % 조회의 차이점은 무엇입니까?

프로그램 1

D VAR1   s    10a inz('INDIAN')  
D S1    S    10S 0     
C  'NDIA'  SCAN  VAR1   S1   
C  S1   DSPLY        
/free             
    *inlr = *on;           
/end-free 

프로그램은 2

D ARR1   s    10a DIM(5)  
D S1    S    10S 0    
C     EVAL  ARR1(1) = 'AMERICA' 
C     EVAL  ARR1(2) = 'INDIA'  
C     EVAL  ARR1(3) = 'CHINA'  
/free            
    S1 = %LOOKUP('NDIA':ARR1);      
    DSPLY S1;          
    *inlr = *on;          
/end-free 

두 프로그램의 차이는 무엇입니까?

+0

매번 arr (1)을 다시로드하므로 배열의 값이 'CHINA'인 요소가 하나만 있습니다. 코드 또는 게시물의 오타가 있습니까? – Charles

+0

아 죄송합니다 ... 제 실수였습니다. 이제 코드가 편집되어 이제 plz reply가됩니다 ... –

+1

차이점은 한 예에서는 % SCAN()을 사용하고 다른 예에서는 % LOOKUP()을 사용한다는 것입니다. 그것들은 두 가지 다른 일을하는 두 가지 다른 기능입니다. 왜 그들이 똑같이 작동 할 것이라고 기대합니까? 당신은 % LOOKUP()에서'NDIA'를 사용합니다, 그러나 당신은 그 배열의 어떤 요소에서도 그 값을로드하지 않았습니다. ('NDIA'<> 'INDIA') 이러한 요소가 없으므로 함수는 0을 반환합니다. – user2338816

답변

4

% lookup()은 부분 일치가 아닌 완전 일치를 찾습니다. 'INDIA'를 찾기 위해 % 조회를 변경하면 일치가 반환됩니다.

그런데 두 가지 예 모두에서 고정 형식 C 사양을 사용할 이유가 없습니다. 그들은 완전히/자유로울 수 있습니다.

+1

% LOOKUP() 문서는 다음 위치에 있습니다. http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzasd/bbloo.htm%23bbloo % SCAN() 문서는 http : // www-01입니다. ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzasd/bbscan.htm –