2011-05-28 137 views
1

我在閱讀索引文件的程序中遇到了一個巨大的問題。雖然該計劃涉及兩個其他讀取工作很好,這一個不斷給我的問題。下面是涉及的一切它的代碼:閱讀索引文件(COBOL)的問題

 SELECT PO-MASTER-FILE 
      ASSIGN TO 'PO-INDEXED.DAT' 
      ORGANIZATION IS INDEXED 
      ACCESS IS RANDOM 
      RECORD KEY IS PO-KEY 
      FILE STATUS IS FILE-STATUS-CODE. 

    DATA DIVISION. 
    FILE SECTION. 

    FD PO-MASTER-FILE. 
    01 PO-MASTER-RECORD. 
     05 PO-KEY. 
      10 PO-VEND-NUMBER-M  PIC X(4). 
      10 PO-ORDER-ID-M   PIC X(8). 

    WORKING-STORAGE SECTION. 
     05 PO-KEY-S. 
      10 POLI-VEND-NUMBER-S  PIC X(4). 
      10 POLI-ORDER-ID-S   PIC X(8). 

    SCREEN SECTION. 
     05 LINE 07 COLUMN 23 VALUE 'NUMBER:' 
       FOREGROUND-COLOR 10. 
     05 LINE 07 COLUMN 50   PIC X(4) 
       USING POLI-VEND-NUMBER-S 
       FOREGROUND-COLOR 15 AUTO. 
     05 LINE 08 COLUMN 23 VALUE 'ORDER ID:' 
       FOREGROUND-COLOR 10. 
     05 LINE 08 COLUMN 50   PIC X(8) 
       USING POLI-ORDER-ID-S 
       FOREGROUND-COLOR 15 AUTO. 

    PROCEDURE DIVISION. 
    100-MAIN. 
     OPEN I-O POLI-MASTER-FILE 
        PO-MASTER-FILE 
        ITEM-MASTER-FILE 

     PERFORM 120-DISPLAY-SCREEN 
      UNTIL FUNCTION-CODE-S = 'END' OR 'end' 

      CLOSE POLI-MASTER-FILE 
        PO-MASTER-FILE 
        ITEM-MASTER-FILE 

      EXIT PROGRAM 
      STOP RUN. 

    120-DISPLAY-SCREEN. 

    **** 
     MOVE FUNCTION-CODE-S TO SAVE-FUNCTION-CODE 

    **** 
     MOVE POLI-VEND-NUMBER-S TO SAVE-VEND-NUMBER 

    **** 
     CALL 'DATETIME' USING DATE-TIME-PASS-AREA 

     DISPLAY SCREEN-IMAGE 
     ACCEPT SCREEN-IMAGE 

     IF FUNCTION-CODE-S = 'END' OR 'end' 
      CONTINUE 
     ELSE 
      PERFORM 200-PROCESS 
     END-IF. 

    200-PROCESS. 
     MOVE SPACES TO ERROR-MESSAGE-S 
     EVALUATE TRUE 
      WHEN FUNCTION-CODE-S = 'INQ' OR 'inq' 
       PERFORM 300-INQUIRY 
      WHEN FUNCTION-CODE-S = 'ADD' OR 'add' 
       PERFORM 400-ADD 
      WHEN FUNCTION-CODE-S = 'CHG' OR 'chg' 
       PERFORM 500-CHANGE 
      WHEN FUNCTION-CODE-S = 'DEL' OR 'del' 
       PERFORM 600-DELETE 
      WHEN OTHER 
       MOVE 'Invalid Function Code' TO ERROR-MESSAGE-S 
     END-EVALUATE. 

    400-ADD. 
    **** 
     PERFORM 900-VALIDATE-THE-FIELDS THRU 999-EXIT 
     IF ERROR-MESSAGE-S = SPACES 
      PERFORM 420-OK-TO-ADD-THE-RECORD 
     ELSE 
    **** 
      MOVE SPACES TO POLI-DATE-ADDED-S 
     END-IF. 

    900-VALIDATE-THE-FIELDS. 
     MOVE PO-KEY-S TO PO-KEY 
     READ PO-MASTER-FILE 
      INVALID KEY 
       IF FILE-STATUS-CODE = '23' 
        MOVE 'Vendor Number Or Order ID Is Not Found' 
         TO ERROR-MESSAGE-S 
        GO TO 999-EXIT 
       ELSE 
        MOVE FILE-STATUS-CODE TO UNEXPECTED-CODE 
        MOVE UNEXPECTED-CODE TO ERROR-MESSAGE-S 
       END-IF 
     END-READ 

還有更多的驗證代碼這一點後,程序將跳過就在這一部分,如果它發現一個文件,即使我離開POLI-VEND-NUMBER-SPOLI-ORDER-ID-S屏幕上的空白。我至少有點難過。任何幫助將不勝感激。感謝您的時間。

回答

1

好吧,我想出了問題。我似乎忽略了索引文件中的一些字段,因爲這部分程序中不需要它們。因此記錄不會加載,並且(由於某種原因)讀取被跳過。基本上這是什麼失蹤:

FD PO-MASTER-FILE. 
    01 PO-MASTER-RECORD. 
     05 PO-KEY. 
      10 PO-VEND-NUMBER-M  PIC X(4). 
      10 PO-ORDER-ID-M   PIC X(8). 
     05 PO-DATE-ADDED-M. 
       10 PO-DA-YEAR-M   PIC X(4). 
       10 PO-DA-MONTH-M  PIC XX. 
       10 PO-DA-DAY-M   PIC XX. 

謝謝任何​​人看着這個,並試圖幫助。

+0

您明顯找到了答案 - 請將其標記爲「已接受」。 – 2016-05-19 12:06:09