1

我正在开发一个部署在 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我的调试器告诉我表达式是TRUE. 的值为IN-VARIABLE-1 OF PARENT OF GRAND-PARENT0。因此OUT-VARIABLE应该具有相应的值。但这种情况并非如此; 它始终具有值IN-VARIABLE-1,并且逻辑始终进入ELSE.
在这里您可以看到我的调试器中执行代码后的情况: 到目前为止我尝试过的内容:在这里你可以看到我的调试器中代码执行后的情况。

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

我不是 Cobol 专家,虽然我认为简单IF可以管理,但无济于事。有人可以帮我吗?

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

4

1 回答 1

0

问题实际上是关于如何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
于 2020-09-22T07:07:15.857 回答