如果在2个平面文件中找不到匹配项,如何防止Cobol程序进入无限循环?

Cobol程序从第一个平面文件中读取记录,并将其与第二个平面文件中的第一个记录进行比较。但是,因为第一个平面文件中的第一个记录与第二个平面文件中的任何记录都不匹配,所以Cobol程序进入无限循环。我如何解决它?     
已邀请:
闻起来像程序中的某个逻辑错误。很难说 可能是什么。但我确实有一些想法...... 无限循环的可能原因: 未能检查文件结束条件 没有正确地对文件结尾做出反应 测试文件结尾但假设所有其他条件都是“成功”读取 有时通过在每个文件后测试文件状态来确定文件结尾 I / O操作。文件状态是与文件相关联的可选2字符数据项 读/写。它被指定 在程序的FILE-CONTROL段落中。例如:
   SELECT file-name ASSIGN TO dd-name FILE STATUS fstatus
其中:
file-name
是您在OPEN / READ / WRITE / CLOSE语句中引用的名称。
dd-name
是外部文件名(来自JCL的DDNAME)。
fstatus
是声明的双字符数据项 在工作 - 存储下。 在每个文件I / O操作上设置文件状态。例如:
    READ file-name
如果没有更多的记录要读,则将
fstatus
设置为文件结尾。请注意文件状态 变量实际上并未在
READ
上引用,但它已设置。 文件状态值是两个字符,并且在ISO COBOL标准中定义,它们应该 对于所有COBOL实现都是一样的。例外的文件状态值是第一个 字符是'9',这些是依赖于实现的。这是IBM Enterprise的链接 COBOL文件状态值 文件结尾的值为:'10' - 对于所有COBOL实现应该是相同的。 我猜你的程序对每个输入文件都有一个文件状态,但是没有检查它或对它作出反应 适当。例如,您的程序可能只检查文件结尾但不检查其他条件:
   IF fstatus = '10'
      PERFORM END-OF-FILE-LOGIC
   ELSE
      PERFORM NORMAL-LOGIC
   END-IF
这种方法的问题在于它处理正常返回(fstatus = '00')和所有非文件结束错误 条件好像READ成功了。最好有类似的东西:
   EVALUATE fstatus
       WHEN '10'
           PERFORM END-OF-FILE-LOGIC
       WHEN '00'
           PERFORM NORMAL-LOGIC
       WHEN OTHER
           PERFORM UNEXPECTED-ERROR
   END-EVALUATE
READ
语句有一种命令式形式,用于指定文件结束时要执行的操作 到达了。它类似于:
   READ file-name AT END PERFORM END-OF-FILE-LOGIC END-READ
同样,如果在FILE-CONTROL部分为
file-name
和非文件结束指定了文件状态 发生错误,您的程序将尝试继续“正常”逻辑 - 完全错误的事情 这样做。     
在文件结尾处,最后一条记录读取保留在记录区域中。因此,如果您没有检查文件结束情况,您的程序将不会自行停止运行。     
对于每个循环结束时的典型顺序文件匹配,您需要读取一个或多个记录。 如果第一个键>​​ =第二个键,则从第二个文件中读取。 如果第二个键>第一个键,则从第一个文件中读取。 根据两个文件之间的一对一关系,有许多变化。但是你必须在循环结束时阅读一些内容!     

要回复问题请先登录注册