2012-07-30 134 views
2

我寫一個程序來讀取物理文件:只能讀取一個值

 
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以便檢查所有用戶?

回答

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 ; 
+0

這隻會讀取與USRID字段匹配的記錄。僅當USRID更改時,%EOF纔會打開。那是需要的嗎? – 2012-07-30 22:53:15

+0

BTW,自由格式評論+1。 – 2012-07-30 22:53:41

+0

@david - 不確定這是否是所需要的(儘管它看起來像是基於內容)。我只模擬上面的代碼。或者至少它看起來對我來說。 – Dennis 2012-07-31 23:25:12

0

如果要從文件中讀取所有用戶記錄,請將READE更改爲READ(併除去關鍵參數)。

+0

同意。帖子含糊不清。 – Dennis 2012-08-01 23:39:37