Search code examples
cobol

COBOL error: group item cannot have PICTURE clause


Another COBOL question again. I have to create a COBOL program that will read three record fields namely, a Student Number, a Student Name, and the Gender Key from an input file. Then, I have to separate male and female students into two separate files. I have created an input function and then store it into a DAT file and that DAT file will be read and returns another DAT file that contains the Male / Female students. I haven't check if the program would actually work because I have been encountering this error:

exercise1.cob:69: error: group item 'STUD-NAME-OUT' cannot have PICTURE clause

Line 69 in this problem is 02 STUD-NAME-OUT PIC X(25). in this group item:

01  OUT-PRINT-REC.
           02 FILLER         PIC X(19) VALUE SPACES.
           02 STUD-NO-OUT    PIC X(10).
           02 FILLER         PIC X(23) VALUE SPACES.
           02 STUD-NAME-OUT  PIC X(25).

I've checked other Stack Overflow which is this and checking by the user's problem in that question and to this question, apparently, I think I did it right but I wasn't sure why this particular OUT-PRINT-REC group item is not working.

And here's the main code :

       IDENTIFICATION DIVISION.
       PROGRAM-ID. exercise-one.

       ENVIRONMENT DIVISION.
       INPUT-OUTPUT SECTION.
       FILE-CONTROL.
           SELECT STUDENT-IN ASSIGN TO "BSIT21.DAT".
           SELECT STUDENT-DATA ASSIGN TO "BSIT21.DAT"
              ORGANIZATION IS LINE SEQUENTIAL.
           SELECT BSITMALE ASSIGN TO "BSITMALE.DAT"
              ORGANIZATION IS LINE SEQUENTIAL.
      *     SELECT BSITFEM ASSIGN TO "BSITFEM.DAT"
      *        ORGANIZATION IS LINE SEQUENTIAL.
       
       DATA DIVISION.
       FILE SECTION.
       FD  STUDENT-IN.
       01  PRINT-REC PIC X(80).
       FD  STUDENT-DATA.
       01  STUD-REC.
           02 OUT-STUD-NO PIC X(10).
           02 OUT-STUD-NAME PIC X(25).
           02 OUT-STUD-GEND-IN-KEY PIC 9.
       FD  BSITMALE.
       01  PRINT-MALE-REC PIC X(80).
      * FD  BSITFEM.
      * 01  PRINT-FEMALE-REC PIC X(80).
       WORKING-STORAGE SECTION.
      * -----------------------------
       01  PRINT-LINE.
           02 STUD-NO-IN PIC X(10).
           02 STUD-NAME-IN PIC X(25).
           02 STUD-GEND-IN PIC 9.

       01  ANS PIC X VALUE 'Y'.
           88 NO-MORE-DATA VALUE 'N'.
           88 MORE-DATA VALUE 'Y'.

       01  L PIC 9.
       01  STUD-NO        PIC X(10).
       01  STUD-NAME      PIC X(25).
       01  STUD-GEND-KEY  PIC 9.
      * -----------------------------
       01  HDG-1.
           02 FILLER PIC X(20) VALUE SPACES.
           02 FILLER PIC X(22) VALUE "xxxxxxxxxxx University".
           02 FILLER PIC X(19) VALUE " of the xxxxxxxxxxx".
       01  HDG-2.
           02 FILLER PIC X(32) VALUE SPACES.
           02 FILLER PIC X(18) VALUE "xxxxxx xxxx xxxxx".
       01  HDG-MALE.
           02 FILLER PIC X(23) VALUE SPACES.
           02 FILLER PIC X(21) VALUE "List of Male Students".
           02 FILLER PIC X(14) VALUE " from xxx 4-1".
       01  HDG-FEMALE.
           02 FILLER PIC X(23) VALUE SPACES.
           02 FILLER PIC X(23) VALUE "List of Female Students".
           02 FILLER PIC X(14) VALUE " from xxxx 2-1".
       01  HDG-4.
           02 FILLER PIC X(19) VALUE SPACES.
           02 FILLER PIC X(14) VALUE "STUDENT NUMBER".
           02 FILLER PIC X(18) VALUE SPACES.
           02 FILLER PIC X(12) VALUE "STUDENT NAME".
           
       01  OUT-PRINT-REC.
           02 FILLER         PIC X(19) VALUE SPACES.
           02 STUD-NO-OUT    PIC X(10).
           02 FILLER         PIC X(23) VALUE SPACES.
           02 STUD-NAME-OUT  PIC X(25).
       
       05  E-O-F PIC XXX VALUE "NO".

       SCREEN SECTION.
       01  BSCRN.
           02  BLANK SCREEN.
      * --------------------------------------
       PROCEDURE DIVISION.
           OPEN OUTPUT STUDENT-IN.
           PERFORM INPUT-RTN UNTIL MORE-DATA.
           PERFORM PRINT-MALE-RTN.
           PERFORM CLOSE-RTN.
      * --------------------------------------------
       INPUT-RTN.
           DISPLAY BSCRN.
           MOVE 5 TO L.
           DISPLAY "ENTER STUDENT NUMBER: " LINE L COLUMN 5.
           ACCEPT STUD-NO LINE L COLUMN 35.
           ADD 1 TO L.
           DISPLAY "ENTER STUDENT NAME: " LINE L COLUMN 5.
           ACCEPT STUD-NAME LINE L COLUMN 35.
           ADD 1 TO L.
           DISPLAY "MALE = 1 / FEMALE = 2" LINE L COLUMN 5.
           ADD 1 TO L.
           DISPLAY "ENTER STUDENT GENDER KEY: " LINE L COLUMN 5.
           ACCEPT STUD-GEND-KEY LINE L COLUMN 35.
           ADD 2 TO L.

           MOVE STUD-NO TO STUD-NO-IN.
           MOVE STUD-NAME TO STUD-NAME-IN.
           MOVE STUD-GEND-KEY TO STUD-GEND-IN.
           WRITE PRINT-REC FROM PRINT-LINE BEFORE 1 LINE.

           DISPLAY "ENTER ANOTHER RECORD(Y/N)" LINE L COLUMN 30.
           ACCEPT ANS.
      * --------------------------------------------
       PRINT-MALE-RTN.
           WRITE PRINT-MALE-REC FROM HDG-1 BEFORE 1 LINE.
           WRITE PRINT-MALE-REC FROM HDG-2 AFTER 1 LINE.
           WRITE PRINT-MALE-REC FROM HDG-MALE AFTER 2 LINES.
           WRITE PRINT-MALE-REC FROM HDG-4 AFTER 2 LINES.
           MOVE SPACES TO PRINT-MALE-REC.
           WRITE PRINT-MALE-REC AFTER 1 LINE.
           PERFORM MALE-READ-RTN UNTIL E-O-F = "YES".

       MALE-READ-RTN.
           READ STUDENT-DATA AT END MOVE "YES" TO E-O-F.
           IF OUT-STUD-GEND-IN-KEY = 1
              MOVE OUT-STUD-NO TO STUD-NO-OUT.
              MOVE OUT-STUD-NAME TO STUD-NAME-OUT.
              WRITE PRINT-MALE-REC FROM OUT-PRINT-REC AFTER 1 LINE.
      * --------------------------------------------
       CLOSE-RTN.
           CLOSE STUDENT-IN.
           STOP RUN.

Expected Output:

                    xxxxxxxxxxx UNIVERSITY OF THE xxxxxxxxxxx
                                xxxxxx xxxx xxxxxx

                       List of Male Students from xxxx 4-1

                   STUDENT NUMBER                  STUDENT NAME
                   00-123345                       Leon Paulus
                   00-123456                       John Walker

I haven't also done writing the code since I wanna test if it would spew the correct answer when I input data but I guess this error keeps blocking me from doing the next step.

Also, it seems a little confusing with the way I named all my variables but I'll deal with that issue later on, and sorry for that.


Solution

  • From the comment by Rick Smith,

    05 E-O-F PIC XXX VALUE "NO".

    should have been:

    01 E-O-F PIC XXX VALUE "NO".