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

When I add slashes I get numbers added to the record

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.
       ...

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

   program-id. Program1 as "NAME403.Program1".

   INPUT-OUTPUT SECTION.
   FILE-CONTROL.
       SELECT EMPFILE
              ASSIGN TO "C:\COBOLClass\DataFiles\NAME402.TXT"
              ORGANIZATION IS LINE SEQUENTIAL.
       SELECT NEWEMPFILE
               ASSIGN TO "C:\COBOLClass\DataFiles\NAME403.TXT"
               ORGANIZATION IS LINE SEQUENTIAL.

   data division.

   FILE SECTION.
   FD EMPFILE.
   01 EMPLOYEE-RECORD.
       05 EMPLOYEE_ADDRESS.
           10 BLDGNUMB-AND-STREET  PIC X(10).
           10 CITY PIC X(10).
           10 STATE PIC X(10).
           10 ZIPCODE PIC X(10).
       05 FILLER   PIC X(10) VALUE SPACE.
       05 EMPLOYEENUMB PIC 9(6).
       05 FILLER   PIC X(10) VALUE SPACE.
       05  EMPLOYEEDOB.
            10  MONTH    PIC 99.
            10  DAY1     PIC 99.
            10  YEARS   PIC 9(4).
       05 FILLER   PIC X(10) VALUE SPACE.
       05 EMPLOYEE_FNAME   PIC X(10).
       05 FILLER   PIC X(10) VALUE SPACE.
       05 EMPLOYEE_MNAME   PIC X(2).
       05 FILLER   PIC X(10) VALUE SPACE.
       05 EMPLOYEE_LNAME   PIC X(10).
       05 FILLER   PIC X(10) VALUE SPACE.
       05 EMPLOYEE_YEARLYPAY PIC ZZ,ZZZ.99.

   FD NEWEMPFILE.

   01 EMPLOYEE-RECORD1.
       05 EMPLOYEENUMB1 PIC 9(6).
       05 FILLER   PIC X(10) VALUE SPACE.
       05 EMPLOYEE_FNAME1   PIC X(10).
       05 FILLER   PIC X(10) VALUE SPACE.
       05 EMPLOYEE_MNAME1   PIC X(2).
       05 FILLER   PIC X(10) VALUE SPACE.
       05 EMPLOYEE_LNAME1   PIC X(10).
       05 FILLER   PIC X(10) VALUE SPACE.
       05  EMPLOYEEDOB1.
           10  MONTH1    PIC 99.
            10  FILLER   PIC X VALUE "/".
            10  DAY11     PIC 99.
            10  FILLER   PIC X VALUE "/".
            10  YEARS1   PIC 9(4).
       05 FILLER   PIC X(10) VALUE SPACE.
       05 EMPLOYEE_YEARLYPAY1 PIC ZZ,ZZZ.99.
       05 FILLER   PIC X(10) VALUE SPACE.
       05 EMPLOYEE_ADDRESS1.
           10 BLDGNUMB-AND-STREET1  PIC X(10).
           10 CITY1 PIC X(10).
           10 FILLER   PIC X(10) VALUE SPACE.
           10 STATE1 PIC X(10).
           10 FILLER   PIC X(10) VALUE SPACE.
           10 ZIPCODE1 PIC X(10).
           10 FILLER   PIC X(166) VALUE  "---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------".




       05 EMPLOYEE_LNAME   PIC X(10).
       05 FILLER   PIC X(10) VALUE SPACE.
       05 EMPLOYEE_YEARLYPAY PIC ZZ,ZZZ.99.

   FD NEWEMPFILE.

   01 EMPLOYEE-RECORD1.
       05 EMPLOYEENUMB1 PIC 9(6).
       05 FILLER   PIC X(10) VALUE SPACE.
       05 EMPLOYEE_FNAME1   PIC X(10).
       05 FILLER   PIC X(10) VALUE SPACE.
       05 EMPLOYEE_MNAME1   PIC X(2).
       05 FILLER   PIC X(10) VALUE SPACE.
       05 EMPLOYEE_LNAME1   PIC X(10).
       05 FILLER   PIC X(10) VALUE SPACE.
       05  EMPLOYEEDOB1.
           10  MONTH1    PIC 99.
            10  FILLER   PIC X VALUE "/".
            10  DAY11     PIC 99.
            10  FILLER   PIC X VALUE "/".
            10  YEARS1   PIC 9(4).
       05 FILLER   PIC X(10) VALUE SPACE.
       05 EMPLOYEE_YEARLYPAY1 PIC ZZ,ZZZ.99.
       05 FILLER   PIC X(10) VALUE SPACE.
       05 EMPLOYEE_ADDRESS1.
           10 BLDGNUMB-AND-STREET1  PIC X(10).
           10 CITY1 PIC X(10).
           10 FILLER   PIC X(10) VALUE SPACE.
           10 STATE1 PIC X(10).
           10 FILLER   PIC X(10) VALUE SPACE.
           10 ZIPCODE1 PIC X(10).
           10 FILLER   PIC X(166) VALUE  ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------".




   working-storage section.
   01 EMPLOYEE-RECORD-TEMP.
      05 EMPLOYEE_ADDRESS-TEMP.
           10 BLDGNUMB-AND-STREET-TEMP  PIC X(10).
           10 CITY-TEMP PIC X(10).
           10 STATE-TEMP PIC X(10).
           10 ZIPCODE-TEMP PIC X(10).
       05 FILLER   PIC X(10) VALUE SPACE.
       05 EMPLOYEENUMB-TEMP PIC 9(6).
       05 FILLER   PIC X(10) VALUE SPACE.
       05  EMPLOYEEDOB-TEMP.
            10  MONTH-TEMP   PIC 99.
            10  DAY1-TEMP     PIC 99.
            10  YEARS-TEMP   PIC 9(4).
       05 FILLER   PIC X(10) VALUE SPACE.
       05 EMPLOYEE_FNAME-TEMP   PIC X(10).
       05 FILLER   PIC X(10) VALUE SPACE.
       05 EMPLOYEE_MNAME-TEMP   PIC X(2).
       05 FILLER   PIC X(10) VALUE SPACE.
       05 EMPLOYEE_LNAME-TEMP   PIC X(10).
       05 FILLER   PIC X(10) VALUE SPACE.
       05 EMPLOYEE_YEARLYPAY-TEMP PIC ZZ,ZZZ.99.

        01 SWITCHES.
           05 CUSTMAST-EOF-SWITCH  PIC X   VALUE "N".
       02 COUNTER PIC 9 VALUE 1.
   procedure division.

     000-STARTPROGRAM.
           open input EMPFILE
                output NEWEMPFILE.

           PERFORM 100-GET-INFROMATION
               UNTIL CUSTMAST-EOF-SWITCH="Y".
               display "END OF SESSION.".
               stop run.

     100-GET-INFROMATION.

     read EMPFILE into EMPLOYEE-RECORD-TEMP
     at END 

     MOVE EMPLOYEE_ADDRESS-TEMP TO EMPLOYEE_ADDRESS1.
     MOVE BLDGNUMB-AND-STREET-TEMP TO BLDGNUMB-AND-STREET1.
     MOVE CITY-TEMP TO CITY1.
     MOVE STATE-TEMP TO STATE1.
     MOVE ZIPCODE-TEMP TO ZIPCODE1.
     MOVE EMPLOYEENUMB-TEMP TO EMPLOYEENUMB1.

     MOVE MONTH-TEMP TO MONTH1.
     MOVE DAY1-TEMP TO DAY11.
     MOVE YEARS-TEMP TO YEARS1.
     MOVE EMPLOYEE_FNAME-TEMP TO EMPLOYEE_FNAME1.
     MOVE EMPLOYEE_MNAME-TEMP TO EMPLOYEE_MNAME1.
     move EMPLOYEE_LNAME-TEMP TO EMPLOYEE_LNAME1. 
     move EMPLOYEE_YEARLYPAY-TEMP to EMPLOYEE_YEARLYPAY1.

     WRITE EMPLOYEE-RECORD1.
     if COUNTER=5
     close EMPFILE
     close NEWEMPFILE
     move "Y" to CUSTMAST-EOF-SWITCH
     ELSE ADD 1 to COUNTER.

缺少实际的 MOVEREAD ... INTO 但我假设您(直接或间接)将 PIC 9(06) 项目移动到 EMPLOYEEDOB1 这是一种不同的格式实际PIC X(08).

只要问题没有得到改善(通过显示 "copy" 的数据定义和语句),我说 "What am I doing wrong?" 的答案是:你使用了错误的定义EMPLOYEEDOB1 and/or "copy" 数据错误。

目标字段定义必须与原始数据匹配或更改为已编辑字段,如 PIC 99/99/99(其中 / 自动添加到 DISPLAY/WRITE 你用它来做) - 在后一种情况下:请注意你不能对编辑的字段进行任何算术运算。

备选方案:MOVE 出生日期 (DOB) 的所有三个部分都是独立的,您可以保留自己的定义(仅当您之后想对这三个部分执行任何操作时才有用)。