Когда я добавляю косые черты, я получаю числа, добавленные к записи

#cobol

#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:COBOLClassDataFilesNAME402.TXT"
              ORGANIZATION IS LINE SEQUENTIAL.
       SELECT NEWEMPFILE
               ASSIGN TO "C:COBOLClassDataFilesNAME403.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. Ваше изображение для EMPLOYEE_YEARLYPAY1 неверно, оно должно быть ZZ, ZZZ.99 (фактическая десятичная точка с полной остановкой / периодом, заменяющая подразумеваемую десятичную точку V). Оператор ЗНАЧЕНИЯ не будет «сохраняться», если вы ПЕРЕМЕСТИТЕ данные в элемент группы. Если вы ПЕРЕМЕСТИТЕ 9 (8) в элемент группы, он просто выполнит буквенное ПЕРЕМЕЩЕНИЕ, что даст вам восемь символов и два завершающих пробела (заполнение). Отдельные перемещения или определение с помощью символа редактирования «/».

2. @BillWoodger Спасибо за эту подсказку, оплата теперь отображается правильно. 🙂

Ответ №1:

Фактические MOVE или READ ... INTO отсутствуют, но я предполагаю, что вы (прямо или косвенно) перемещаете PIC 9(06) элемент, в EMPLOYEEDOB1 который используется другой формат, фактический a PIC X(08) .

До тех пор, пока вопрос не будет улучшен (путем отображения как определения данных, так и инструкции для «копирования») Я говорю ответ на вопрос «Что я делаю не так?» это: вы используете неправильное определение для EMPLOYEEDOB1 и / или «копируете» данные ложно.

Определение целевого поля должно либо соответствовать исходным данным, либо быть изменено на отредактированное поле, например PIC 99/99/99 (где / они добавляются автоматически в DISPLAY / WRITE вы делаете с ним) — в последнем случае: имейте в виду, что вы не можете выполнять какие-либо арифметические действия с отредактированным полем.

Альтернатива: MOVE все три части даты рождения (DOB) сами по себе, и вы можете сохранить свое определение (полезно, только если вы хотите что-то сделать с тремя частями впоследствии).