Cobol: оператор, не завершенный конечным выполнением при наличии конечного выполнения

#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

Видеть https://www.ibm.com/support/knowledgecenter/SS6SG3_4.2.0/com.ibm.entcobol.doc_4.2/PGandLR/ref/rlpsperf.htm

Комментарии:

1. Спасибо, что в итоге удалось запустить его. Также спасибо за ссылку, у меня возникли проблемы с поиском многого для Cobol.