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

时间:2016-10-12 06:15:37

标签: cobol

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.

1 个答案:

答案 0 :(得分:2)

实际的MOVEREAD ... INTO丢失,但我假设您(直接或间接)将PIC 9(06)项移至EMPLOYEEDOB1,这是一种不同的格式PIC X(08) 1}}。

只要问题没有得到改善(通过显示数据定义和"复制&#34的陈述),我就会回答“#34;我做错了什么?” "是:您对EMPLOYEEDOB1使用了错误的定义和/或"复制"错误的数据。

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

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