2011-04-04 71 views
1

與文件控制像這樣一個COBOL程序:動態READ ... RECORD INVALID KEY在COBOL中無法正常工作。如何解決它?

SELECT D-FLAT-FILE ASSIGN TO DFLAT-FILE 
     ORGANIZATION IS INDEXED 
     ACCESS MODE IS SEQUENTIAL 
     FILE STATUS IS RECORD-STAT 
     RECORD KEY IS D_KEY OF D-FLAT-FILE DESCENDING WITH DUPLICATES. 


SELECT C-MAST-FILE ASSIGN TO CMAST-FILE 
     ORGANIZATION IS INDEXED 
     ACCESS MODE IS DYNAMIC 
     FILE STATUS IS RECORD-STAT 
     RECORD KEY IS C_KEY OF C-MAST-FILE. 

讀取從第一平面文件,像這樣的記載:

PROCESSING. 
    READ D-FLAT-FILE NEXT RECORD 
     AT END ....END READ. 

和像這樣的第二動態文件讀取的記錄:

READ C-MAST-FILE RECORD 
    INVALID KEY 
    GO TO PROCESSING. 

除1個情況外,所有的都很好。如果來自第一個平面文件的第一條記錄與第二個動態文件中的任何記錄不匹配,程序將進入無限循環而不是執行「轉至處理」。我檢查了手冊,全部按照手冊(它是VAX Cobol)。我錯過了什麼?

+1

您在READ失敗後檢查了文件狀態嗎? – 2011-04-04 08:48:18

+0

不,我不檢查。我其實想這樣做,但後來我被告知我無法檢查狀態,因爲我們不能寫日誌文件。 – Fet 2011-04-04 10:34:08

+0

@Greg做到這一點。修改您的READ子句以顯示FS(用於調試),以便您知道那裏發生了什麼。 – 2011-04-04 11:36:02

回答

1

最佳做法是對每個文件使用不同的FILE STATUS變量。在你的情況下,你沒有向我們展示足夠的背景來看問題。但是如果你正在查看RECORD-STAT的循環,那麼從C-MAST-FILE讀取失敗可能會給你帶來悲傷。

相關問題