#cobol
#cobol
Вопрос:
Прохождение класса на Cobol и проблемы с запуском программы. Я использую opencobol для запуска через командную строку. Программа является:
IDENTIFICATION DIVISION.
PROGRAM-ID. SAMPLE.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT EMPLOYEE-DATA
ASSIGN TO "C:COBOLEMPLOYEE-INFO.DAT"
ORGANIZATION IS LINE SEQUENTIAL.
SELECT PAYROLL-LISTING
ASSIGN TO "C:COBOLPAYROLL-OUT.DAT"
ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD EMPLOYEE-DATA.
01 EMPLOYEE-RECORD.
05 EMPLOYEE-NAME-IN PICTURE X(20).
05 HOURS-WORKED-IN PICTURE 9(2).
05 HOURLY-RATE-IN PICTURE 9V99.
FD PAYROLL-LISTING.
01 PRINT-REC.
05 PICTURE X(20).
05 NAME-OUT PICTURE X(20).
05 PICTURE X(10).
05 HOURS-OUT PICTURE 9(2).
05 PICTURE X(8).
05 RATE-OUT PICTURE 9.99.
05 PICTURE X(6).
05 WEEKLY-WAGES-OUT PICTURE 999.99.
WORKING-STORAGE SECTION.
01 ARE-THERE-MORE-RECORDS PICTURE XXX VALUE 'YES'.
PROCEDURE DIVISION.
100-MAIN-MODULE.
OPEN INPUT EMPLOYEE-DATA
OUTPUT PAYROLL-LISTING
PERFORM UNTIL ARE-THERE-MORE-RECORDS = 'NO '
READ EMPLOYEE-DATA
AT END
MOVE 'NO ' TO ARE-THERE-MORE-RECORDS
NOT AT END
PERFORM 200-WAGE-ROUTINE
END READ
END PERFORM
CLOSE EMPLOYEE-DATA
PAYROLL-LISTING
STOP RUN.
200-WAGE-ROUTINE.
MOVE SPACES TO PRINT-REC
MOVE EMPLOYEE-NAME-IN TO NAME-OUT
MOVE HOURS-WORKED-IN TO HOURS-OUT
MOVE HOURLY-RATE-IN TO RATE-OUT
MULTIPLY HOURS-WORKED-IN BY HOURLY-RATE-IN
GIVING WEEKLY-WAGES-OUT
WRITE PRINT-REC.
STOP RUN.
При запуске программы я получаю следующую ошибку:
Sample.cob: In paragraph '100-MAIN-MODULE':
Sample.cob:35: Error: PERFORM statement not terminated by END-PERFORM
Sample.cob:41: Error: syntax error, unexpected END
Я видел другой пост, похожий на этот, но в их абзаце были инструкции close, но я не здесь. Эта программа также взята из учебника, поэтому не уверен, почему она не работает у меня.
Комментарии:
1. Ключевые слова — это
END-READ
иEND-PERFORM
С ДЕФИСОМ, делающие каждое из них отдельным словом, а не отдельными словами с пробелом. (НоSTOP RUN
это два слова, и так былоGO BACK
в более старых версиях.) Вы не имеетеCLOSE
заявления, но они не имеют отношения вообще к проблеме.2. … обновление до более актуальной версии GnuCOBOL, вероятно, также является хорошей идеей.
Ответ №1:
Попробуйте использовать END-PERFORM
с — в нем и не END PERFORM
Также это End-Read
не end read
Комментарии:
1. Спасибо, что в итоге удалось запустить его. Также спасибо за ссылку, у меня возникли проблемы с поиском многого для Cobol.