можно прочитать только одно значение

Я пишу программу для чтения физического файла:

0002.00      A                                      REF(USRMF)                                                                
0002.01      A          R TSREC                                                                                               
0005.00      A            USRID     R        *user ID                                                                                     
0006.00      A            USRDT     R        *date                                                                                 
0007.00      A            USRTI     R        *time IN                                                                                 
0008.00      A            USRTO     R        *time OUT                                                                                 
0009.00      A          K USRID         

Где я разрешаю пользователю вводить дату, время входа и выхода.

Конечно, будет дублироваться USRID:

Где в моей программе я проверяю предыдущее максимальное значение следующим образом:

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

У меня есть следующие пользователи:

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

Но когда я пытаюсь сравнить с предыдущим значением. Моя программа может проверять только пользователя A000000001, а не других пользователей.

Как мне модифицировать программу, чтобы проверялись все пользователи?


person user1516536    schedule 30.07.2012    source источник


Ответы (2)


Почему в строке 19.01 вы используете *LOVAL для установки нижнего предела? Мне кажется, вам лучше использовать "USRID... SETLL", и это должно решить вашу проблему. Когда вы устанавливаете, вы позиционируете курсор на значение в факторе 1. Когда фактор 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 ;
person Dennis    schedule 30.07.2012
comment
Это будет только читать записи, которые соответствуют полю USRID. %EOF включается только при изменении USRID. Это то, что желательно? - person David G; 31.07.2012
comment
Кстати, +1 к комментарию в свободной форме. - person David G; 31.07.2012
comment
@david - Не уверен, что это то, что нужно (хотя, судя по содержанию, похоже). Я только эмулировал код выше. Или, по крайней мере, мне так кажется. - person Dennis; 01.08.2012
comment
Я думал, что ОП хочет обработать ВСЕ пользовательские записи в файле. - person David G; 01.08.2012

Если вы хотите прочитать ВСЕ пользовательские записи из файла, измените READE на только READ (и удалите ключевой параметр).

person David G    schedule 01.08.2012