2014-09-17 2 views
0

Если я сканирую «NDIA» в «INDIAN» с помощью функции% scan(), возвращается значение больше 0. Если я делаю то же самое с помощью% lookup() в массиве, то возвращается 0. Зачем?Разница между% scan и% lookup в 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), поэтому массив имеет только 1 элемент со значением «CHINA». Это опечатка в вашем коде или вашем посте? – Charles

+0

О, извините ... это была моя ошибка. Теперь код был отредактирован, так что теперь PLZ ответить ... –

+1

Разница в том, что вы используете% SCAN() в одном примере и% LOOKUP() в другом примере. Это две разные функции, которые выполняют две разные вещи. Почему вы ожидаете, что они будут работать одинаково? Вы используете 'NDIA' в вашем% LOOKUP(), но вы не загрузили это значение ни в одном элементе массива. ('NDIA' <> 'INDIA') Поскольку такой элемент не существует, функция возвращает ноль. – user2338816

ответ

4

% lookup() ищет точное совпадение, а не частичное совпадение. Если вы измените свой поиск% look for 'INDIA', он вернет совпадение.

Кстати, нет никаких оснований использовать спецификации Fixed Format 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 –

Смежные вопросы