首页 > 解决方案 > Abend u4038 将值从 1 个变量移动到具有不同图片子句的另一个变量时出错

问题描述

我正在尝试使用 cobol 编写程序,当我尝试运行该程序时,它总是显示 Abend s0000 u4038,我知道是什么问题,但我不知道如何解决它

所以我有一个变量

01 Ws-data.
   05 ws-branch-no   pic 9(04).

01 Ws-data2.     
   05 branch-no      pic 9(07) comp-3.


Procedure division.

Move branch-no to ws-branch-no.
Display ws-branch-no.

stop run.

好的,所以 branch-no 中的值是 '0000021' ,当我尝试移动到 ws-branch-no 时,它异常结束 u4038

数据项 WS-BRANCH-NO 在第 11742 行上的第 1 条语句引用时的内容未通过 NUMERIC 类测试或包含大于
NUMCHECK 编译器选项检测到的 PICTURE 子句的值。

我认为这是因为 branch-no 中的值是 0000021,而我在 ws-branch-no 中设置的图片子句只有 pic 9(04)。但关键是我希望 ws-branch-no 的值在移动到 ws-branch-no 时变为 0021。

谁能帮忙?谢谢

标签: cobol

解决方案


好吧,我知道是什么问题,但我不知道如何解决它我认为因为分支号中的值是 0000021,而我在 ws-分支号中设置的图片子句只有图片 9(04)。

不,这不是问题(至少我很确定你使用的系统没有那么坏)。只有在以下情况下才会触发 NUMCHECK 选项:

  • 原始数据不是数字(它是打包的,所以可能包含未打包的数据?)
  • 原始数据太大(如 0010021)

我建议添加一个简单的检查:

  IF branch-no NOT NUMERIC
     DISPLAY 'SHOULD NEVER HAPPEN: ' branch-no ' - ' ws-data2
  END-IF.
  IF branch-no > 9999
     DISPLAY 'TOO BIG :            ' branch-no ' - ' ws-data2
  END-IF
  MOVE branch-no TO ws-branch-no
  DISPLAY ws-branch-no.

推荐阅读