2010-07-21 40 views
0

首先,這裏的全部源代碼: http://pastebin.com/5teGNrPC所有的怪異COBOL錯誤

我得到一個奇怪的COBOL錯誤,我無法找到這意味着什麼。 它說,打開錯誤(請參見下面的截圖: Screenshot http://img251.imageshack.us/img251/623/screenshotyj.png ) (在http://img251.imageshack.us/img251/623/screenshotyj.png全尺寸)

它不會發生,如果我第一次使用「新文件」,之後添加一條記錄。

這裏的應用程序二進制文件,以及一些日誌文件它產生: http://www.mediafire.com/?5enhwqcvid9djnr

非常感謝,

伊凡

PS:這是富士通的NetCOBOL方言。

回答

1

我想多瞭解一些有關文件I/O問題的信息,您是 。如果再次並立即

    啓動程序

    • 創建新的文件
    • 添加記錄
    • 退出

    然後:如果我理解正確的話,你可以做沒有問題如下

  • 添加記錄

程序炸彈帶有「奇怪的錯誤」。

是否可以讀取 並顯示您在初次運行中寫入的記錄?我想知道以前的 寫入是否成功,這反過來引起對文件完整性的質疑。

我建議探索OPTIONAL關鍵字爲SELECT和 加入FILE STATUS條款了。每次I/O操作(打開,關閉,寫入,讀取等)後,應檢查文件狀態 。與FILE STATUS相關聯的變量中包含的值 需要您花費很長的時間來解決問題。以下table 描述了FILE STATUS值。

您可能還想查看tutorial的 處理COBOL中的索引文件。

我可能不知道你的文件I/O問題是什麼,但我確實看到 以後會導致麻煩的東西!

您已經使用下面的結構:

PERFORM Some-Paragraph 
... 
Some-Paragraph. 
... 
IF Some-Condition 
    PERFORM Some-Paragraph 
END-IF 
. 

最後PERFORM Some-Paragraph是 段落本身的範圍之內。 COBOL編譯器可能不會將此標記爲錯誤,但 行爲未定義。 COBOL PERFORM不符合您從 其他語言可能熟悉的CALL/RETURN語義 。你在這裏編碼通常被稱爲 作爲'邏輯炸彈'。我所指的內容的詳細說明可以發現 here

+0

我可以讀取和顯示在初始運行中寫入的記錄,但是如果我退出應用程序,數據將被寫入(我可以用十六進制編輯器查看它),但無法再讀取它。 但是我將重新構造程序,並重新編寫它。 感謝您的幫助! 伊萬 – friedkiwi 2010-07-25 14:32:46

1

也許程序試圖在創建文件之前訪問該文件。 '新文件'選項可能會使用OPEN OUTPUT語句創建數據文件,並且添加記錄會成功。

+0

如果首先創建一個新文件,並且之後將記錄添加到新文件,它確實有效。但是,如果我退出應用程序,並嘗試重新打開該文件並添加新記錄,則它會與上述消息一起崩潰。 – friedkiwi 2010-07-22 07:57:19

1

第一個錯誤可能是文件狀態錯誤35,打開一個不存在的文件。 你應該重構你的代碼。在數據錄入程序中,您只需要每次執行一次OPEN和CLOSE 語句。 在這個程序中,OPEN語句應該儘可能靠近源代碼的開始(在開始時執行一次,以及爲了可讀性),CLOSE應該在STOP RUN之前。