Compiler Thinks Im Refering to Nonexistent Paragraph or Section

230 Views Asked by At

I am getting errors concerning my procedure division in one of my assignments for class. It is a COBOL Program that is supposed to keep a running total of the average height and weight of applicants, number of brown-eyed applicants, number of male applicants, and number of female applicants. Also the program is supposed to print the info of applicants who meet a specific set of requirements but i'm getting errors for almost all of my perform statements

COBCH0034 Operand operand should be numeric A numeric value is required in this context, and you have specified a nonnumeric value.

COBCH0014 Invalid operand The operand you have specified is in some way incorrect, and cannot be processed by your COBOL system. For example, you might have specified a negative integer where only positive integers are allowed

       identification division.
   program-id. ELECTRA-MODELING-AGENCY.
  ******************************************************************
  *THIS PROGRAM PRODUCES THE REPORT ACCORDING TO THE GIVEN PRINTER 
  *SPACING CHART                                                   *
  ******************************************************************
   environment division.
   INPUT-OUTPUT SECTION.
   FILE-CONTROL.
   SELECT INPUT-FILE ASSIGN TO "INFILE.txt"
          Organization is line sequential.
   SELECT OUTPUT-FILE ASSIGN TO "CHOSEN-APLICANTS.TXT"
          Organization is line sequential.
   data division.
   FILE SECTION.
   FD INPUT-FILE.
   01 INPUT-REC.
       05 APPLICANTS-NAME              PIC X(20).
       05 APPLICANTS-WEIGHT            PIC 9(3).
       05 APPLICANTS-HEIGHT            PIC 9(2).
       05 APPLICANTS-EYE-CODE          PIC X.
       05 APPLICANTS-HAIR-CODE         PIC X.
       05 APPLICANTS-GENDER            PIC X.
   FD OUTPUT-FILE.
   01 OUTPUT-REC PIC X(78).
   WORKING-STORAGE SECTION.
   01 EOF PIC X VALUE "N".
   01 HEADING-1.
       05 FILLER                       PIC X(41) VALUE "M"
       JUSTIFIED RIGHT.
       05 FILLER                       PIC X(2) VALUE "O"
       JUSTIFIED RIGHT.
       05 FILLER                       PIC X(2) VALUE "D" 
       JUSTIFIED RIGHT.
       05 FILLER                       PIC X(2) VALUE "E"
       JUSTIFIED RIGHT.
       05 FILLER                       PIC X(2) VALUE "L"
       JUSTIFIED RIGHT.
       05 FILLER                       PIC X(3) VALUE "R"
       JUSTIFIED RIGHT.
       05 FILLER                       PIC X(2) VALUE "E"
       JUSTIFIED RIGHT.
       05 FILLER                       PIC X(2) VALUE "P"
       JUSTIFIED RIGHT.
       05 FILLER                       PIC X(2) VALUE "O"
       JUSTIFIED RIGHT.
       05 FILLER                       PIC X(2) VALUE "R"
       JUSTIFIED RIGHT.
       05 FILLER                       PIC X(2) VALUE "T"
       JUSTIFIED RIGHT.
       05 FILLER                       PIC X(16) VALUE SPACES.
   01 HEADING-2.
       05 FILLER                       PIC X(23) VALUE "NAME"
       JUSTIFIED RIGHT.
       05 FILLER                       PIC X(13) VALUE "SEX"
       JUSTIFIED RIGHT.
       05 FILLER                       PIC X(10) VALUE "WEIGHT"
       JUSTIFIED RIGHT.
       05 FILLER                       PIC X(8) VALUE "HEIGHT"
       JUSTIFIED RIGHT.
       05 FILLER                       PIC X(5) VALUE "EYE"
       JUSTIFIED RIGHT.
       05 FILLER                       PIC X(6) VALUE "COLOR"
       JUSTIFIED RIGHT.
       05 FILLER                       PIC X(6) VALUE "HAIR"
       JUSTIFIED RIGHT.
       05 FILLER                       PIC X(6) VALUE "COLOR"
       JUSTIFIED RIGHT.
       05 FILLER                       PIC X VALUE SPACES.
   01 DETAIL-LINE.
       05 FILLER                       PIC X(10) VALUE SPACES.
       05 NAME-OUT                     PIC X(20).
       05 FILLER                       PIC X(4) VALUE SPACES.
       05 GENDER-OUT                   PIC X.
       05 FILLER                       PIC X(6) VALUE SPACES.
       05 WEIGHT-OUT                   PIC X(3).
       05 FILLER                       PIC X(6) VALUE SPACES.
       05 HEIGHT-OUT                   PIC XX.
       05 FILLER                       PIC X(6) VALUE SPACES.
       05 EYE-COLOR-OUT                PIC X(5). 
       05 FILLER                       PIC X(6) VALUE SPACES.
       05 HAIR-COLOR-OUT               PIC X(6).
   01 SUMMARY-LINE-01
       05 FILLER                       PIC X(17) VALUE "AVERAGE"
       JUSTIFIED RIGHT.
       05 FILLER                       PIC X(7) VALUE "HEIGHT"
       JUSTIFIED RIGHT.
       05 FILLER                       PIC X(3) VALUE "OF"
       JUSTIFIED RIGHT.
       05 FILLER                       PIC X(4) VALUE "ALL"
       JUSTIFIED RIGHT.
       05 FILLER                       PIC X(12) VALUE "APPLICANTS:"
       JUSTIFIED RIGHT.
       05 FILLER                       PIC X.
       05 AVERAGE-HEIGHT               PIC ZZZ9.
       05 FILLER                       PIC X(12) VALUE SPACES.
   01 SUMMARY-LINE-02
       05 FILLER                       PIC X(17) VALUE "AVERAGE"
       JUSTIFIED RIGHT.
       05 FILLER                       PIC X(7) VALUE "WEIGHT"
       JUSTIFIED RIGHT.
       05 FILLER                       PIC X(3) VALUE "OF"
       JUSTIFIED RIGHT.
       05 FILLER                       PIC X(4) VALUE "ALL"
       JUSTIFIED RIGHT.
       05 FILLER                       PIC X(12) VALUE "APPLICANTS:"
       JUSTIFIED RIGHT.
       05 FILLER                       PIC X.
       05 AVERAGE-WEIGHT               PIC ZZZ9.
       05 FILLER                       PIC X(12) VALUE SPACES.
   01 SUMMARY-LINE-03
       05 FILLER                       PIC X(16) VALUE "NUMBER"
       JUSTIFIED RIGHT.
       05 FILLER                       PIC X(3) VALUE "OF"
       JUSTIFIED RIGHT.
       05 FILLER                       PIC X(11) VALUE "BROWN-EYED"
       JUSTIFIED RIGHT.
       05 FILLER                       PIC X(12) VALUE "APPLICANTS:"
       JUSTIFIED RIGHT.
       05 FILLER                       PIC XX.
       05 BROWN-EYED-APPLICANTS        PIC ZZZ9.
       05 FILLER                       PIC X(12) VALUE SPACES.
   01 SUMMARY-LINE-04
       05 FILLER                       PIC X(16) VALUE "NUMBER"
       JUSTIFIED RIGHT.
       05 FILLER                       PIC X(3) VALUE "OF"
       JUSTIFIED RIGHT.
       05 FILLER                       PIC X(5) VALUE "MALE"
       JUSTIFIED RIGHT.
       05 FILLER                       PIC X(12) VALUE "APPLICANTS:"
       JUSTIFIED RIGHT.
       05 FILLER                       PIC X(8) VALUE SPACES.
       05 MALE-APPLICANTS              PIC ZZZ9.
       05 FILLER                       PIC X(12) VALUE SPACES.
   01 SUMMARY-LINE-05
       05 FILLER                       PIC X(16) VALUE "NUMBER"
       JUSTIFIED RIGHT.
       05 FILLER                       PIC X(3) VALUE "OF"
       JUSTIFIED RIGHT.
       05 FILLER                       PIC X(7) VALUE "FEMALE"
       JUSTIFIED RIGHT.
       05 FILLER                       PIC X(11) VALUE "APPLICANTS:"
       JUSTIFIED RIGHT.
       05 FILLER                       PIC X(6) VALUE SPACES.
       05 FEMALE-APPLICANTS            PIC ZZZ9.
       05 FILLER                       PIC X(12) VALUE SPACES.
   procedure division.
   100-main.
       OPEN INPUT INPUT-FILE
            OUTPUT OUTPUT-FILE
       PERFORM UNTIL EOF = 'Y'
           READ INPUT-FILE
           AT END MOVE 'Y' TO EOF
           NOT AT END
      PERFORM 200-HEADING.
      PERFORM 200-AVG-HEIGHT.
      PERFORM 200-AVG-WEIGHT.
      PERFORM 200-BROWN-EYED-APPS.
      PERFORM 200-MALE-APPS.
      PERFORM 200-FEMALE-APPS.
      PERFORM 200-MALE-DETAIL-LINE.
      PERFORM 200-FEMALE-DETAIL-LINE.
   CLOSE INPUT-FILE, OUTPUT-FILE.
   STOP RUN.
   200-HEADING.
        WRITE OUTPUT-REC FROM HEADING-1.
           MOVE SPACES TO OUTPUT-REC.
           WRITE OUTPUT-REC.
           WRITE OUTPUT-REC FROM HEADING-2.
           MOVE SPACES TO OUTPUT-REC.
           WRITE OUTPUT-REC.
   200-AVG-HEIGHT.
          IF NOT AT END
          ADD APPLICANTS-HEIGHT TO AVERAGE-HEIGHT
          ELSE AT END
          DIVIDE AVERAGE-HEIGHT BY 21.
          WRITE OUTPUT-REC FROM SUMMARY-LINE-01.
   200-AVG-WEIGHT.
          IF NOT AT END
          ADD APPLICANTS-WEIGHT TO AVERAGE-WEIGHT
          ELSE AT END
          DIVIDE AVERAGE-HEIGHT BY 21.
          WRITE OUTPUT-REC FROM SUMMARY-LINE-02.
   200-BROWN-EYED-APPS.
          IF  APPLICANTS-EYE-CODE = 2
          ADD 1 TO BROWN-EYED-APPLICANTS
          ELSE CONTINUE.
          WRITE OUTPUT-REC FROM SUMMARY-LINE-03.
   200-MALE-APPS.
           IF APPLICANTS-GENDER = M
           ADD 1 TO MALE-APPLICANTS
           ELSE CONTINUE.
           WRITE OUTPUT-REC FROM SUMMARY-LINE-04.
   200-FEMALE-APPS.
           IF APPLICANTS-GENDER = F
           ADD 1 TO FEMALE-APPLICANTS
           ELSE CONTINUE.
           WRITE OUTPUT-REC FROM SUMMARY-LINE-05.
   200-MALE-DETAIL-LINE.
           IF APPLICANTS-HAIR-CODE = 1
           IF APPLICANTS-EYE-CODE = 1
           IF APPLICANTS-GENDER = M
           IF APPLICANTS-HEIGHT >= 72
           IF 185 <= APPLICANTS-WEIGHT <= 200
           ELSE CONTINUE.
           WRITE OUTPUT-REC FROM 01 DETAIL-LINE.
   200-FEMALE-DETAIL-LINE.
           IF APPLICANTS-HAIR-CODE = 2
           IF APPLICANTS-EYE-CODE = 2
           IF APPLICANTS-GENDER = F
           IF 62 <= APPLICANTS-HEIGHT <= 64
           IF 110 <= APPLICANTS-WEIGHT <= 125
           ELSE CONTINUE.
           WRITE OUTPUT-REC FROM 01 DETAIL-LINE.

   end program ELECTRA-MODELING-AGENCY.
1

There are 1 best solutions below

0
On

So you have several things that are going wrong here. Let me detail a few of them and give you some hints to fix them.

You are using periods to end statements, this is awful and bad when you mix it with some of the newer (and by newer, i mean only 30 years old) style of statements, like inline perform and read/at end/not at end/end-read.

Instead of this:

  PERFORM UNTIL EOF = 'Y'
      READ INPUT-FILE
      AT END MOVE 'Y' TO EOF
      NOT AT END
  PERFORM 200-HEADING.
  PERFORM 200-AVG-HEIGHT.
  PERFORM 200-AVG-WEIGHT.
  PERFORM 200-BROWN-EYED-APPS.
  PERFORM 200-MALE-APPS.
  PERFORM 200-FEMALE-APPS.
  PERFORM 200-MALE-DETAIL-LINE.
  PERFORM 200-FEMALE-DETAIL-LINE.
  CLOSE INPUT-FILE, OUTPUT-FILE.
  STOP RUN.

You need something like this:

  PERFORM UNTIL EOF = 'Y'    <--- This is better as an 88 level
      READ INPUT-FILE
         AT END MOVE 'Y' TO EOF
         NOT AT END
           PERFORM SOMETHING <--- You need to accumulate you data here
      END-READ
  END-PERFORM

  PERFORM 200-HEADING
  PERFORM 200-AVG-HEIGHT
  PERFORM 200-AVG-WEIGHT
  PERFORM 200-BROWN-EYED-APPS
  PERFORM 200-MALE-APPS
  PERFORM 200-FEMALE-APPS
  PERFORM 200-MALE-DETAIL-LINE
  PERFORM 200-FEMALE-DETAIL-LINE
  CLOSE INPUT-FILE, OUTPUT-FILE
  STOP RUN.                   <--- This is the only period you need
                              <--- In your mainline

You can not do this:

  200-AVG-HEIGHT.
      IF NOT AT END            <--- NOT AT END and AT END only work
                               <--- in the context of a READ statement
      ADD APPLICANTS-HEIGHT TO AVERAGE-HEIGHT
      ELSE AT END
      DIVIDE AVERAGE-HEIGHT BY 21.
      WRITE OUTPUT-REC FROM SUMMARY-LINE-01.

While you are looping through the file, accumulate the total height by adding each applicants to APPLICANTS-HEIGHT and adding 1 to your APPLICANTS-COUNT. When you are ready to do your summary line for height, do this:

  200-AVG-HEIGHT.
      DIVIDE APPLICANTS-HEIGHT BY APPLICANTS-COUNT
      WRITE OUTPUT-REC FROM SUMMARY-LINE-01
      .       <---- Again, you only need a single period to end a paragraph

In all of your paragraphs, you are trying to accumulate your data AND write your summary line. This does not work. See the perform loop above where I have the "Perform Something To Accumulate your data", this is the paragraph you want to put all of your code that adds up every applicant. You need separate paragraphs, as you have, to write the summary lines.

So this should happen every record:

  200-MALE-DETAIL-LINE.
       IF APPLICANTS-HAIR-CODE = 1
       IF APPLICANTS-EYE-CODE = 1
       IF APPLICANTS-GENDER = M
       IF APPLICANTS-HEIGHT >= 72
       IF 185 <= APPLICANTS-WEIGHT <= 200
       ELSE CONTINUE.   <--- you are doing nothing here
       WRITE OUTPUT-REC FROM 01 DETAIL-LINE.

It is better written like this:

  200-MALE-DETAIL-LINE.
       IF APPLICANTS-HAIR-CODE = 1
         AND APPLICANTS-EYE-CODE = 1
           AND APPLICANTS-GENDER = M
             AND APPLICANTS-HEIGHT >= 72
               AND (185 <= APPLICANTS-WEIGHT <= 200)
          WRITE OUTPUT-REC FROM 01-DETAIL-LINE
       END-IF

That should get you going. You will need to apply these hints to all the other paragraphs. In brief, your program should generally look like this:

  Open Files
  Perform until EOF
    Read a-record
      not at end
        Perform Do-Detail-Lines
      at end
        Set EOF to true
    End-Read
  End-Perform

  Perform Do-Summary-Lines

  Close files
  Stop Run.

  Do-Detail-Lines.
     ...add up all the things you are averaging and counting...
     ...populate detail line...   
     write output-rec from detail-line
     .

  Do-Summary-Lines.
     ...calculate all averages...
     ...populate summary line...
     write output-red from summary-line
     ...repeat as needed for other summary-lines...
     .

Happy coding :-)