只能读取一个值

时间:2012-07-30 07:22:26

标签: ibm-midrange rpgle rpg

我写了一个程序来读取物理文件:

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,而不是其他用户。

如何修改progrtam以便检查所有用户?

2 个答案:

答案 0 :(得分:3)

在第19.01行,你为什么要使用* LOVAL来设定下限?在我看来,你可以更好地使用" USRID ... SETLL",这应该可以解决你的问题。当您设置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 ;

答案 1 :(得分:0)

如果要从文件中读取所有用户记录,请将READER更改为READ(并删除密钥参数)。