Изменить
OPEN INPUT BONUS-REPORT
На
OPEN OUTPUT BONUS-REPORT
При дальнейшей проверке были обнаружены ошибки добавления.
Оператор SORT
должен был создать другой файлиспользовать в качестве входных данных, а не файл, который вы намеревались использовать для вывода.Или, как подразумевает @Jim Castro в другом ответе, используйте OUTPUT PROCEDURE
для доступа к записям.Различия ниже показывают дополнительный файл и операторы OPEN
и CLOSE
для этого файла.
Кроме того, оператор CLOSE
необходимо удалить из PERFORM
.также отметил @Jim Castro.
Наконец, END-EVALUATE
необходимо поместить перед оператором WRITE
.
Ниже приведен вывод утилиты разницы, которая идентифицирует изменения. OLD - программа, которую вы опубликовали, NEW - программа после внесенных мной изменений.
* Text File Comparison
*-------------------------------------------------------------------------------
* 000008/000008: mis-matched records
* OLD :-
SELECT WORK-FILE ASSIGN TO 'TEMP.DAT'
ORGANIZATION IS LINE SEQUENTIAL.
* NEW :-
SELECT WORK-FILE ASSIGN TO 'TEMP.DAT'.
SELECT TEMP-BONUS-FILE ASSIGN TO "TEMP-BONUS.DAT"
ORGANIZATION LINE SEQUENTIAL.
*-------------------------------------------------------------------------------
* 000027/000028: extra NEW records :-
FD TEMP-BONUS-FILE.
01 TEMP-BONUS-REC.
05 T-EMP-NO PIC X(5).
05 T-NAME PIC X(20).
05 T-TERR PIC XX.
05 T-OFFICE PIC XX.
05 T-ANNUAL-SALARY PIC 9(6).
05 PIC X(29).
05 T-DATE-HIRED.
10 T-MONTH PIC 99.
10 T-DAY PIC 99.
10 T-YEAR PIC 9999.
05 PIC X(10).
*-------------------------------------------------------------------------------
* 000102/000116: mis-matched records
* OLD :-
GIVING BONUS-REPORT
* NEW :-
GIVING TEMP-BONUS-FILE
*-------------------------------------------------------------------------------
* 000107/000121: mis-matched records
* OLD :-
OPEN INPUT BONUS-REPORT
* NEW :-
OPEN INPUT TEMP-BONUS-FILE
OUTPUT BONUS-REPORT
*-------------------------------------------------------------------------------
* 000113/000128: mis-matched records
* OLD :-
READ BONUS-REPORT NEXT RECORD
* NEW :-
READ TEMP-BONUS-FILE NEXT RECORD
*-------------------------------------------------------------------------------
* 000120/000135: mis-matched records
* OLD :-
CLOSE BONUS-REPORT
END-PERFORM.
300-MOVE.
MOVE EMP-NO-IN TO EMP-NO-OUT
MOVE NAME-IN TO NAME-OUT
MOVE TERRITORY-NO-IN TO TERRITORY-NO-OUT
MOVE OFFICE-NO-IN TO OFFICE-NO-OUT
MOVE ANNUAL-SALARY-IN TO ANNUAL-SALARY-OUT
MOVE DATE-HIRED-IN TO DATE-HIRED-OUT.
* NEW :-
END-PERFORM
CLOSE BONUS-REPORT TEMP-BONUS-FILE.
300-MOVE.
MOVE T-EMP-NO TO EMP-NO-OUT
MOVE T-NAME TO NAME-OUT
MOVE T-TERR TO TERRITORY-NO-OUT
MOVE T-OFFICE TO OFFICE-NO-OUT
MOVE T-ANNUAL-SALARY TO ANNUAL-SALARY-OUT
MOVE T-DATE-HIRED TO DATE-HIRED-OUT.
*-------------------------------------------------------------------------------
* 000154/000169: mis-matched records
* OLD :-
WRITE BONUS-PRINT FROM DATA1
ADD 1 TO LINE-COUNT
END-EVALUATE.
* NEW :-
END-EVALUATE
WRITE BONUS-PRINT FROM DATA1
ADD 1 TO LINE-COUNT.
*-------------------------------------------------------------------------------
Я должен добавить, что параграф 300-MOVE
можно заменить с помощью INTO BONUS-REC
в операторе READ
или RETURN
;как в
READ TEMP-BONUS-FILE NEXT RECORD INTO BONUS-REC
или
RETURN SORT-REC INTO BONUS-REC