Cobol Abend u4038将值从1个变量移动到另一个具有不同picture子句的变量时出错
我试着用cobol写一个程序,当我试着运行这个程序时,它总是显示Abend s0000 u4038,我知道是什么问题,但我不知道如何解决它 所以我有一个变量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
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
并以十六进制模式查看输出。这可以告诉你异常终止的原因-我怀疑是一个无效的符号啃食。谢谢你的建议,我会试试的