Cobol 当我添加斜杠时,我会将数字添加到记录中

Cobol 当我添加斜杠时,我会将数字添加到记录中,cobol,Cobol,还有更多的程序,我会提供代码,如果必要的话。简而言之,我的程序从文件中获取输入,然后将其加载到临时记录中。然后我将临时记录中的数据复制到输出文件的记录中,并将其写入输出文件。当它写的时候,我丢失了工资数据,它为DOB添加了数字,而不是斜杠。为什么?我做错了什么 01 EMPLOYEE-RECORD1. ... 05 EMPLOYEEDOB1. 10 MONTH1 PIC 99. *> here 10 FILLER PI

还有更多的程序,我会提供代码,如果必要的话。简而言之,我的程序从文件中获取输入,然后将其加载到临时记录中。然后我将临时记录中的数据复制到输出文件的记录中,并将其写入输出文件。当它写的时候,我丢失了工资数据,它为DOB添加了数字,而不是斜杠。为什么?我做错了什么

01 EMPLOYEE-RECORD1.
       ...
       05  EMPLOYEEDOB1.
           10  MONTH1    PIC 99.
 *> here   10  FILLER   PIC X(1) VALUE "/".
           10  DAY11     PIC 99.
 *> here   10  FILLER   PIC X(1) VALUE "/".
           10  YEARS1   PIC 9(4).
 *> here
          05 EMPLOYEE_YEARLYPAY1 PIC ZZ,ZZZV99.
       ...

实际的
移动
读取。。。缺少
,但我假设您(直接或间接)将一个
PIC 9(06)
项目移动到
EMPLOYEEDOB1
,这是一个不同的格式,实际的
PIC X(08)

01 EMPLOYEE-RECORD1.
       ...
       05  EMPLOYEEDOB1.
           10  MONTH1    PIC 99.
 *> here   10  FILLER   PIC X(1) VALUE "/".
           10  DAY11     PIC 99.
 *> here   10  FILLER   PIC X(1) VALUE "/".
           10  YEARS1   PIC 9(4).
 *> here
          05 EMPLOYEE_YEARLYPAY1 PIC ZZ,ZZZV99.
       ...
只要问题没有得到改善(通过显示数据定义和“复制”语句),我就说“我做错了什么?”的答案是:你对EmployeedObj使用了错误的定义和/或错误地“复制”了数据

01 EMPLOYEE-RECORD1.
       ...
       05  EMPLOYEEDOB1.
           10  MONTH1    PIC 99.
 *> here   10  FILLER   PIC X(1) VALUE "/".
           10  DAY11     PIC 99.
 *> here   10  FILLER   PIC X(1) VALUE "/".
           10  YEARS1   PIC 9(4).
 *> here
          05 EMPLOYEE_YEARLYPAY1 PIC ZZ,ZZZV99.
       ...
目标字段定义必须与原始数据相匹配,或更改为编辑字段,如
PIC 99/99/99
(其中
/
自动添加到
显示中
/
写入
),在后一种情况下:请注意,无法对编辑的字段执行任何算术运算

01 EMPLOYEE-RECORD1.
       ...
       05  EMPLOYEEDOB1.
           10  MONTH1    PIC 99.
 *> here   10  FILLER   PIC X(1) VALUE "/".
           10  DAY11     PIC 99.
 *> here   10  FILLER   PIC X(1) VALUE "/".
           10  YEARS1   PIC 9(4).
 *> here
          05 EMPLOYEE_YEARLYPAY1 PIC ZZ,ZZZV99.
       ...

备选方案:
MOVE
出生日期(DOB)的所有三个部分,您可以保留您的定义(仅当您想在之后对这三个部分做任何事情时才有用)。

您的员工年薪1图片错误,应该是ZZ,ZZZ.99(一个句点/句点实际小数点替换V隐含小数点). 如果将数据移动到组项,则VALUE语句将不会“持久化”。如果将9(8)移动到组项,它将只执行字母移动,给您八个字符和两个尾随空格(填充)。个人移动或使用“/”编辑符号定义。@BillWoodger感谢您的提示,现在工资显示正确了。:-)
01 EMPLOYEE-RECORD1.
       ...
       05  EMPLOYEEDOB1.
           10  MONTH1    PIC 99.
 *> here   10  FILLER   PIC X(1) VALUE "/".
           10  DAY11     PIC 99.
 *> here   10  FILLER   PIC X(1) VALUE "/".
           10  YEARS1   PIC 9(4).
 *> here
          05 EMPLOYEE_YEARLYPAY1 PIC ZZ,ZZZV99.
       ...