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.
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".