nboz75
nboz75

Reputation: 55

Cobol: Statement not Ended by End Perform When End Perform is Present

Taking a class on Cobol and having issues getting a program to run. I'm using opencobol to run through command prompt. The program is:

IDENTIFICATION DIVISION.
       PROGRAM-ID. SAMPLE.
       ENVIRONMENT DIVISION.
       INPUT-OUTPUT SECTION.
       FILE-CONTROL.
          SELECT EMPLOYEE-DATA
             ASSIGN TO "C:\COBOL\EMPLOYEE-INFO.DAT"
             ORGANIZATION IS LINE SEQUENTIAL.
          SELECT PAYROLL-LISTING
             ASSIGN TO "C:\COBOL\PAYROLL-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.

When running the program I'm getting the following error:

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

I saw another post similar to this but they had close statements in their paragraph, but I don't here. This program is gotten from the textbook also so not sure why it isn't working for me.

Upvotes: 0

Views: 671

Answers (1)

Bruce Martin
Bruce Martin

Reputation: 10543

Try using END-PERFORM with the - in it and not END PERFORM

Also it is End-Read not end read

See https://www.ibm.com/support/knowledgecenter/SS6SG3_4.2.0/com.ibm.entcobol.doc_4.2/PGandLR/ref/rlpsperf.htm

Upvotes: 2

Related Questions