2017-03-29 27 views
0

您好我正在從tutorialpoints學習cobol,並從那裏的每個程序工作,因爲我已經在OpenCobolIDE(有些需要一點編輯)測試它們。然後我遇到了文件處理章節,並在那裏程序有很多錯誤。我設法重寫了程序,直到它沒有顯示任何錯誤,但它什麼也沒有做。Cobol:找不到文本文件的入口點

這裏是我的代碼:

IDENTIFICATION DIVISION. 
     PROGRAM-ID. HELLO. 

     ENVIRONMENT DIVISION. 
      INPUT-OUTPUT SECTION. 
      FILE-CONTROL. 
       SELECT STUDENT ASSIGN TO 
       'C:\Cobol\FIle Handling\input.txt' 
       ORGANIZATION IS INDEXED 
       ACCESS IS RANDOM 
       RECORD KEY IS STUDENT-ID 
       FILE STATUS IS FS. 

     DATA DIVISION. 
      FILE SECTION. 
      FD STUDENT. 
       01 STUDENT-FILE. 
       05 STUDENT-ID PIC 9(5). 
       05 NAME PIC A(25). 

      WORKING-STORAGE SECTION. 
       01 WS-STUDENT-FILE. 
       05 WS-STUDENT-ID PIC 9(5). 
       05 WS-NAME PIC A(25). 
       01 FS PIC 9(02). 

     PROCEDURE DIVISION. 
      OPEN I-O STUDENT. 
       MOVE 20005 TO STUDENT-ID. 
      READ STUDENT RECORD INTO WS-STUDENT-FILE 
        KEY IS STUDENT-ID 
        INVALID KEY DISPLAY 'Invalid Key' 
        NOT INVALID KEY DISPLAY WS-STUDENT-FILE 
      END-READ. 

      CLOSE STUDENT. 
     STOP RUN. 

這是文本文件:

20003 Mohtashim M. 
20004 Nishant Malik 
20005 Amitabh Bachhan 

結果應該是全文:

20005 Amitabh Bachhan 
+0

JCL是否設置正確?我的猜測是,您在嘗試打開文件時出現錯誤。 (根據程序)它不存在或它是空的。因爲這個程序沒有檢查任何狀態碼,所以不可能告訴。添加一些檢查,看看文件是否打開。 – SaggingRufus

+0

@SaggingRufus它是OpenCOBOL(幾年前改名爲GnuCOBOL)。不涉及JCL :-) –

+4

你不能只有一個文本文件,並將其用作索引文件。如果您編寫另一個小型COBOL程序來創建索引文件(輸入現有文件,將每條記錄寫入索引文件),並假設已安裝「索引文件支持」,則需要更改上述程序以引用新索引文件,然後應該工作。你幾乎可以肯定在OPEN上有一個非零的FILE STATUS,而READ,就像@SaggingRufus已經提示的那樣。在READ上指出你正在進行密鑰訪問是很好的。 –

回答

2

它做的事情:它讀取文件。但就是這些;你沒有要求它顯示或做任何事情,除了將記錄讀入記憶。您可能想要查看使用DISPLAY語句或可能創建另一個文件來將輸出寫入到。

我可以提出一些建議嗎?

在現代的COBOL中,在風格上,你不會在程序部分的所有內容之後放置一段時間 - 你只會把它放在需要的地方。例如:

PROCEDURE DIVISION. 
     OPEN I-O STUDENT 
     MOVE 20005 TO STUDENT-ID 
     READ STUDENT RECORD INTO WS-STUDENT-FILE 
      KEY IS STUDENT-ID 
      INVALID KEY DISPLAY 'Invalid Key' 
      NOT INVALID KEY DISPLAY WS-STUDENT-FILE 
     END-READ 

     CLOSE STUDENT 
     STOP RUN 
     . 

雖然編譯器不會在意空間和回報,如果我是你,我會嘗試縮進我的代碼好一點(我想我該怎麼縮進上述:-)) 。這取決於你和許多人喜歡以不同的方式做,但如果你一致的話,你可以發現可能通過你的代碼偷偷摸摸的問題。

編輯:我沒有注意到你正在用文本文件中的鍵讀取。所以,要麼你需要:

  1. 讀取從預建的索引文件,或
  2. 讀取文件順序和搜索想要通過比較你讀什麼,你想要的學生證什麼。
+1

它怎麼能正確讀取文件?這是一個文本文件,所以它不會被索引。 OP正在進行索引查找。 – SaggingRufus

+0

@SaggingRufus你是對的;我讀得太快,沒有注意到它是一個文本文件。 –