Cobol Abend u4038将值从1个变量移动到另一个具有不同picture子句的变量时出错

Cobol Abend u4038将值从1个变量移动到另一个具有不同picture子句的变量时出错,cobol,Cobol,我试着用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-bra

我试着用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.

好的,像这样,分支no中的值是'0000021',当我尝试移动到ws-branch no时,它得到了abend u4038

第11742行1号语句引用时数据项WS-BRANCH-NO的内容 数值类测试失败或包含的值大于检测到的PICTURE子句的值
NUMCHECK编译器选项

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

有人能帮忙吗?谢谢

嗯,我知道是什么问题,但我不知道如何解决它 我认为,因为branch no中的值是0000021,而我在ws branch no中设置的picture子句只有pic9(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.

“那么分支编号中的值是‘0000021’——为什么?您发布的代码中没有任何地方设置了分支编号。@piet.tah sry这不是完整的代码,因为我在检查分支编号的第一个值时(显示时)将其连接到IMS数据库是0000021这就是为什么我给出0000021的例子,但这将是有趣的部分:值如何到达那里,以及如何检查它。因为它显然不是数字…@piet.t well从副本中已经设置了分支编号为pic9(07)comp-3,然后我使用GU调用CBLTDLI以到达PCB、段并设置SSA,之后我只显示分支编号,它出现了。。0000021当我在Spool中检查它作为调试手段时,您可以尝试
显示Ws-data2
并以十六进制模式查看输出。这可以告诉你异常终止的原因-我怀疑是一个无效的符号啃食。谢谢你的建议,我会试试的