Разница между %scan и %lookup в RPGLE?

Если я сканирую «NDIA» в «INDIAN» с помощью %scan(), возвращается значение больше 0. Если я делаю то же самое, используя %lookup() в массиве, возвращается 0. Почему?

Программа 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

В чем разница в обеих программах?


person Vikash Shukla    schedule 17.09.2014    source источник
comment
Вы перезагружаете arr(1) каждый раз, поэтому массив имеет только 1 элемент со значением «КИТАЙ». Это опечатка в вашем коде или в вашем посте?   -  person Charles    schedule 17.09.2014
comment
Ой извините... это была моя ошибка. Теперь код был отредактирован, поэтому, пожалуйста, ответьте сейчас...   -  person Vikash Shukla    schedule 17.09.2014
comment
Разница в том, что вы используете %SCAN() в одном примере и %LOOKUP() в другом примере. Это две разные функции, которые делают две разные вещи. Почему вы ожидаете, что они будут работать одинаково? Вы используете NDIA в %LOOKUP(), но не загрузили это значение ни в один элемент массива. ('NDIA' ‹› 'INDIA') Поскольку такого элемента не существует, функция возвращает ноль.   -  person user2338816    schedule 18.09.2014


Ответы (1)


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

Между прочим, нет причин использовать спецификации Fixed Format C в обоих ваших примерах. Они могут быть полностью /бесплатными.

person Scott Mildenberger    schedule 17.09.2014
comment
Документация по %LOOKUP() находится здесь: www-01. ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzasd/ Документация по %SCAN() находится здесь: www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzasd/ - person Buck Calabro; 17.09.2014