如何解决读取索引文件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-S
和POLI-ORDER-ID-S
留为空白,程序也会跳过这一部分,就好像它找到了文件一样。至少我有点沮丧。任何帮助将不胜感激。感谢您的时间。
解决方法
好的,我知道了问题所在。似乎我省略了索引文件中的某些字段,因为在程序的这一部分中不需要它们。结果,记录将无法加载,并且(由于某些原因)读取被跳过。基本上这就是所缺少的:
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.
感谢所有看过这个并试图提供帮助的人。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。