我写了一个程序来读取物理文件:
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以便检查所有用户?
答案 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(并删除密钥参数)。