动态读取…记录无效密钥在COBOL中无法正常工作。如何修复它?

动态读取…记录无效密钥在COBOL中无法正常工作。如何修复它?,cobol,cobol85,gnucobol,Cobol,Cobol85,Gnucobol,具有如下文件控制的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 AS

具有如下文件控制的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.
并读取第二个动态文件上的记录,如下所示:

PROCESSING.
    READ D-FLAT-FILE NEXT RECORD
        AT END ....END READ.
READ C-MAST-FILE RECORD
     INVALID KEY
     GO TO PROCESSING.

除1例外,其余均能正常工作。如果第一个平面文件中的第一条记录与第二个动态文件中的任何记录都不匹配,则程序将进入无限循环,而不是执行GO TO处理。我检查了手册,都是按照手册(这是VAX Cobol)。我缺少什么?

最佳做法是为每个文件使用不同的文件状态变量。在你的情况下,你没有向我们展示足够的背景来了解问题。但是,如果您正在查看RECORD-STAT,那么从C-MAST-FILE读取失败可能会让您感到悲伤。

最佳做法是为每个文件使用不同的文件状态变量。在你的情况下,你没有向我们展示足够的背景来了解问题。但是,如果您正在查看RECORD-STAT,那么从C-MAST-FILE读取失败可能会让您感到悲伤。

读取失败后,您是否检查了文件状态?不,我不检查。我确实想这样做,但后来有人告诉我,我无法检查状态,因为我们无法写入日志文件。@Greg这样做。修改READ子句以显示FS(用于调试),这样您就可以知道那里发生了什么。@belisarius-谢谢,我会的。顺便说一句,不要重用文件状态字段。如果您使用它进行调试,您想知道从哪个文件获得它。读取失败后是否检查了文件状态?不,我不检查。我确实想这样做,但后来有人告诉我,我无法检查状态,因为我们无法写入日志文件。@Greg这样做。修改READ子句以显示FS(用于调试),这样您就可以知道那里发生了什么。@belisarius-谢谢,我会的。顺便说一句,不要重用文件状态字段。如果您使用它进行调试,您需要知道它是从哪个文件获得的。