只能读取一个值
问题描述:
我写一个程序来读取物理文件:只能读取一个值
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
如果我允许用户输入的日期,时间和超时。
Ofcourse将复制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以便检查所有用户?
答
在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 ;
这只会读取与USRID字段匹配的记录。仅当USRID更改时,%EOF才会打开。那是需要的吗? – 2012-07-30 22:53:15
BTW,自由格式评论+1。 – 2012-07-30 22:53:41
@david - 不确定这是否是所需要的(尽管它看起来像是基于内容)。我只模拟上面的代码。或者至少它看起来对我来说。 – Dennis 2012-07-31 23:25:12