Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
COBOL将数字编辑字段移动到另一个数字编辑字段_Cobol - Fatal编程技术网

COBOL将数字编辑字段移动到另一个数字编辑字段

COBOL将数字编辑字段移动到另一个数字编辑字段,cobol,Cobol,我有以下字段: FLD1 PIC ---.--9,99. FLD2 PIC ---.--9,99. FLD3 PIC S9(6)V99. MOVE FLD1 TO FLD2 --> 4038 abend MOVE FLD1 TO FLD3 --> 4038 abend 当我将FLD1移动到FLD2时,我得到一个4038异常结束,因此我尝试先将FLD1移动到FLD3,然后将FLD3移动到FLD2,但这也会给出一个4038异常结束。当FLD1为空格时没有问

我有以下字段:

FLD1   PIC ---.--9,99.
FLD2   PIC ---.--9,99.
FLD3   PIC S9(6)V99.

MOVE FLD1 TO FLD2     --> 4038 abend
MOVE FLD1 TO FLD3     --> 4038 abend
当我将FLD1移动到FLD2时,我得到一个4038异常结束,因此我尝试先将FLD1移动到FLD3,然后将FLD3移动到FLD2,但这也会给出一个4038异常结束。当FLD1为空格时没有问题,但如果不是,则会出现4038异常终止

这是异常终止:

异常终止=S000 U4038原因=0000000 1 048

IGZ0063S在行号14982的AO6043中的数字编辑发送字段中检测到无效符号。从位于入口点AO6043处的编译单元AO6043,在地址1BC0024处的编译单元偏移量+00020024处的入口偏移量+00020024处


那么,如何在没有异常终止的情况下将FLD1移动到FLD3?

移动到数字编辑字段唯一有意义的是数字字段。没有别的了

将数字编辑字段移动到字母数字字段才有意义。没有别的了

编辑:我不知怎么错过了在COBOL85中,您可以将一个数字编辑字段移动到一个数字字段来“反编辑”它。但这看起来不像我们的初衷

也就是说,如果您知道您需要严格的逐位复制,并且字段定义相同,如上面的FLD1和FLD2,那么您可以使用以下方法:


移动到数字编辑字段唯一有意义的是数字字段。没有别的了

将数字编辑字段移动到字母数字字段才有意义。没有别的了

编辑:我不知怎么错过了在COBOL85中,您可以将一个数字编辑字段移动到一个数字字段来“反编辑”它。但这看起来不像我们的初衷

也就是说,如果您知道您需要严格的逐位复制,并且字段定义相同,如上面的FLD1和FLD2,那么您可以使用以下方法:


既然我们知道了这一信息,我们就可以非常清楚问题是什么了

数据中的第一个非空字符应该是
-
或数字,但不是

您可能会发现以下内容很有帮助:

在我们等待的时候,我们猜测:

您的数据是固定格式,右对齐,但包含一个前导字符
+
,或其他一些既不是
-
,也不是空白或数字的字符。这将导致U4038运行时错误,并显示一条描述问题的消息。事实上,您可能会在两个单独的数据集中得到消息,即leabend和sysout。您的站点设置可能不同,但您应该在某个地方找到该消息

这种情况下的信息是:

IGZ0063S An invalid sign was detected in a numeric edited sending field
         in XXXXXXXX on line number XX.  From compile unit XXXXXXXX at 
         entry point XXXXXXXX at compile unit offset XXXXXXXX at entry 
         offset XXXXXXXX at address XXXXXXXX. 

当程序运行时,所有的X都取决于您的实际程序和环境。

现在我们知道了消息,我们可以非常清楚地知道问题是什么

数据中的第一个非空字符应该是
-
或数字,但不是

您可能会发现以下内容很有帮助:

在我们等待的时候,我们猜测:

您的数据是固定格式,右对齐,但包含一个前导字符
+
,或其他一些既不是
-
,也不是空白或数字的字符。这将导致U4038运行时错误,并显示一条描述问题的消息。事实上,您可能会在两个单独的数据集中得到消息,即leabend和sysout。您的站点设置可能不同,但您应该在某个地方找到该消息

这种情况下的信息是:

IGZ0063S An invalid sign was detected in a numeric edited sending field
         in XXXXXXXX on line number XX.  From compile unit XXXXXXXX at 
         entry point XXXXXXXX at compile unit offset XXXXXXXX at entry 
         offset XXXXXXXX at address XXXXXXXX. 

当程序运行时,所有X都取决于您的实际程序和环境。

这里稍微放一放,您的数值编辑字段
FLD1
FLD2
不够大,无法存储与数值字段
FLD3
相同大小的数字

如果您尝试:

MOVE -123456,78 TO FLD3.
MOVE -123456,78 TO FLD1.
DISPLAY FLD1.
这很好,但如果您尝试:

MOVE -123456,78 TO FLD3.
MOVE -123456,78 TO FLD1.
DISPLAY FLD1.
您将获得“-23.456,67”

您需要在数字编辑字段中多输入一个“-”,而不是在数字字段中输入9。这与“Z”字符不同,Z字符可以有相同数量的位置


例如,
picz(6)
可以保持/显示与
pic9(6)
相同的位数。但是一个
PIC-(6)
只能容纳/显示5位数字,即使它是正数。

这里稍微放一放,您的数值编辑字段
FLD1
FLD2
不够大,无法存储与数值字段
FLD3
相同大小的数字

如果您尝试:

MOVE -123456,78 TO FLD3.
MOVE -123456,78 TO FLD1.
DISPLAY FLD1.
这很好,但如果您尝试:

MOVE -123456,78 TO FLD3.
MOVE -123456,78 TO FLD1.
DISPLAY FLD1.
您将获得“-23.456,67”

您需要在数字编辑字段中多输入一个“-”,而不是在数字字段中输入9。这与“Z”字符不同,Z字符可以有相同数量的位置


例如,
picz(6)
可以保持/显示与
pic9(6)
相同的位数。但是一个
PIC-(6)
只能容纳/显示5位数字,即使它是正数。

你的意思是你不打算这么做?哇,你是说你不打算这么做?哇,这应该是评论,而不是回答。OP的
小数点是逗号,因此您的示例不正确。如果字段的大小相同,例如处理现有报告并存储在现有文件中,那么就没有问题。只是一个额外的最左边的数字位置,它可能会被填充到整个范围,可能在其他地方,可能用于求和,可能用于业务扩展。不一定是一个固有的问题。然而,正如其他人一样,OP当然需要注意最大值,我想这就是你的观点。@Bill谢谢你对逗号的提醒。我已经编辑了我的答案。我曾考虑过使用注释,但是注释中的代码格式就没有那么好了。而且,是的,我只是想强调与“-”图片字符的固有区别,与“Z”字符相比,它需要一个额外的位置。这是我过去的经历。这应该是一个评论,而不是回答。OP的
小数点是逗号,因此您的示例不正确。如果字段的大小相同,则称为“处理”