2016-10-12 18 views
2
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. 
+3

EMPLOYEE_YEARLYPAY1のPICtureが間違っています.ZZ、ZZZ.99(Vの暗黙の小数点を置き換えるフルストップ/ピリオドの実際の小数点)にする必要があります。グループ項目にデータを移動すると、VALUEステートメントは「保持」されません。グループ項目に9(8)を移動すると、アルファベットMOVEが実行され、8文字と2つの末尾空白(パディング)が与えられます。個々の移動または "/"編集記号で定義します。 –

+0

@BillWoodgerそのtipeありがとうございました、給料が正しく表示されています。 :-) – SprJD7903

答えて

2

実際MOVEまたはREAD ... INTOが欠落しているが、私はあなたが(直接的または間接的に)PIC X(08)実際の異なるフォーマットをあるEMPLOYEEDOB1PIC 9(06)項目を移動すると仮定します。

質問が改善されない限り(データ定義と「コピー」に関するステートメントの両方を表示することによって)、「私は間違っていますか? EMPLOYEEDOB1に間違った定義を使用したり、誤ってデータを "コピー"したりしています。

ターゲットフィールドの定義は、元のデータと一致する必要がありますいずれか、または(/は、あなたがそれを行うDISPLAY/WRITEに自動的に追加されます)PIC 99/99/99のように編集したフィールドに変更する - 後者の場合には:あなたのことに注意してください編集したフィールドで算術演算を行うことはできません。

別名:MOVE生年月日(DOB)の3つの部分はすべて独自のもので、定義を保持することができます(後で3つの部分で何かしたい場合にのみ便利です)。

関連する問題