cobol - 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。
谁能帮忙?谢谢
解决方案
好吧,我知道是什么问题,但我不知道如何解决它我认为因为分支号中的值是 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.
推荐阅读
- angularjs - Angular JS 中的路由错误
- javascript - ES6函数解构赋值为对象
- fortran - 错误:f77 程序中有两个主要程序
- ios - 使用 twitter 回调 url 错误登录
- linux - 将第 n+1 行的列合并到第 n 行
- php - html中电话号码的正则表达式
- python - 最高效的 3sum 算法使用 python 进行 leetcode 挑战
- reactjs - React Redux this.props.getClasses 不是函数
- sql - Oracle SQL 小时 HH:MM:SS 中的日期之间的差异
- tomcat - 在 Openshift v3 Tomcat 映像中编辑 catalina.sh