微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如果条件为真,则Cobol不进入

如何解决如果条件为真,则Cobol不进入

我正在研究在HP Nonstop上部署的Cobol应用程序。在平台上进行调试时,我遇到以下情况:

IF LABELED-VALUE OF IN-VARIABLE-1 OF PARENT-1 OF GRAND-PARENT THEN
  MOVE IN-VARIABLE-2 OF PARENT-2 OF GRAND-PARENT TO OUT-VARIABLE
ELSE
  MOVE IN-VARIABLE-1 OF PARENT-1 OF GRAND-PARENT TO OUT-VARIABLE
END-IF

字段定义如下:

01 GRAND-PARENT
  03 PARENT-1.
    05 IN-VARIABLE-1                  PIC 9(3).
      88 LABELED-VALUE                VALUE 000.
  03 PARENT-2.
    05 IN-VARIABLE-2                  PIC 9(3).
    
01 OUT-VARIABLE                       PIC 9(3).

当我评估表达式LABELED-VALUE OF IN-VARIABLE-1 OF PARENT OF GRAND-PARENT时,调试器会告诉我该表达式为TRUEIN-VARIABLE-1 OF PARENT OF GRAND-PARENT的值为0。因此,OUT-VARIABLE应该具有相应的值。但这种情况并非如此;它始终具有值IN-VARIABLE-1,并且逻辑总是输入ELSE
在这里,您可以在执行代码后看到调试器中的情况:

Here you can see the situation in my debugger after the execution of the code.



到目前为止,我已经尝试过:

  • 调整IF的条件以检查特定值,例如IF IN-VARIABLE-1 OF PARENT OF GRAND-PARENT EQUAL ZERO THENZERO实际上是LABELED-VALUE的值)
  • 在我的调试器中,它会显示旧版本的代码,但会显示最新版本的执行行指示符。这可能会导致指示符显示错误的行前面。为了避免这种情况,我对注释进行了更改,重新编译,重新启动服务器类,然后重新附加到该过程中。这样,实际上我已经获得了该源的最新版本,因此可以排除此问题。

我不是Cobol专家,尽管我认为简单的IF是可以管理的,但没有用。有人可以帮我吗?

更新:
在调试器中,我可以编辑字段的值。如果在if之前用000IN-VARIABLE-1 OF PARENT-1 OF GRAND-PARENT再次覆盖0的现有值000,则代码可以正常工作。 WTF?

解决方法

问题实际上与IN-VARIABLE-1 OF PARENT-1 OF GRAND-PARENT的初始化方式有关。就我而言,它很可能尚未初始化。在这种情况下,可以通过以下方式解决问题:

IF LABELED-VALUE OF IN-VARIABLE-1 OF PARENT-1 OF GRAND-PARENT OR
   IN-VARIABLE-1 OF PARENT-1 OF GRAND-PARENT EQUAL LOW-VALUES
THEN
  MOVE IN-VARIABLE-2 OF PARENT-2 OF GRAND-PARENT TO OUT-VARIABLE
ELSE
  MOVE IN-VARIABLE-1 OF PARENT-1 OF GRAND-PARENT TO OUT-VARIABLE
END-IF

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。