Beast
Beast

Reputation: 129

Compilation issue with COBOL Program

I have a cobol program that gives the following issues. Any help? This is basically a program to calculate a students GPA based upon the input file provided by the user. i compiled it using cobc -x -free, but still get the following issues.

These are the compilation errors.

 P2.cob:137: Warning: Line not terminated by a newline
    P2.cob:142: Warning: Line not terminated by a newline
    P2.cob: In paragraph 'BEGIN':
    P2.cob:70: Error: syntax error, unexpected '*'
    P2.cob: In paragraph '002-WRITEHEADING':
    P2.cob:80: Warning: Alphanumeric literal has zero length
    P2.cob:80: Warning: A SPACE will be assumed
    P2.cob:83: Warning: Alphanumeric literal has zero length
    P2.cob:83: Warning: A SPACE will be assumed
    P2.cob: In paragraph '004-DISPLAYSEMESTERHEADING':
    P2.cob:102: Warning: Alphanumeric literal has zero length
    P2.cob:102: Warning: A SPACE will be assumed
    P2.cob: In paragraph '006-SubRead':
    P2.cob:114: Error: syntax error, unexpected '*'
    P2.cob:116: Warning: Alphanumeric literal has zero length
    P2.cob:116: Warning: A SPACE will be assumed
    P2.cob:123: Warning: Alphanumeric literal has zero length
    P2.cob:123: Warning: A SPACE will be assumed
    P2.cob:131: Warning: Alphanumeric literal has zero length
    P2.cob:131: Warning: A SPACE will be assumed
    P2.cob:140: Warning: Alphanumeric literal has zero length
    P2.cob:140: Warning: A SPACE will be assumed
    P2.cob:145: Warning: Alphanumeric literal has zero length
    P2.cob:145: Warning: A SPACE will be assumed
    P2.cob:161: Warning: Alphanumeric literal has zero length
    P2.cob:161: Warning: A SPACE will be assumed
    P2.cob:168: Warning: Alphanumeric literal has zero length
    P2.cob:168: Warning: A SPACE will be assumed
    P2.cob:174: Warning: Alphanumeric literal has zero length
    P2.cob:174: Warning: A SPACE will be assumed

The code is posted after this:

IDENTIFICATION DIVISION. 
PROGRAM-ID. P2.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT INPUTFILE ASSIGN TO "P2In.dat"
    ORGANIZATION IS LINE SEQUENTIAL ACCESS MODE IS SEQUENTIAL.
SELECT OUTPUTFILE ASSIGN TO "P2Out.dat"
    ORGANIZATION IS LINE SEQUENTIAL ACCESS MODE IS SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD OUTPUTFILE.
01  OutDatFile.
    02 DatFile      PIC X(100).
FD INPUTFILE.
01 INPUTFILELINE.
    02 RunningLine      PIC X(100).

WORKING-STORAGE SECTION.
01 VARIABLES.
    02 LineLength       PIC X(100). 
    02 StudentName      PIC X(15).
    02 StudentWnumber   PIC X(8).
    02 NameAvailable    PIC X(1) VALUE "Y".
    02 NewSemAvailable  PIC X(1) VALUE "Y".
    02 NewSem           PIC X(1) VALUE "N".
    02 LargeSpace       PIC X(4) VALUE SPACES.
    02 SemesterName     PIC X(20).
    02 SubjectID        PIC X(10).
    02 SubjectName      PIC X(30).
    02 SubjectPTS       PIC 99.
    02 SubjectCredit    PIC 99.
    02 SubjectGrade     PIC X(1).
    02 obtainedGrade    PIC 99.
    02 SemesterGrade    PIC 99.
    02 SemesterToalHour PIC 9(1).9(2).
    02 SemesterGPA      PIC 9(1).9(2).
    02 CommulativeGpa   PIC 9(1).9(2).
    02 SemesterCredit   PIC 99.
    02 TotalHours       PIC 99.
    02 QtPoints         PIC 99.
    02 QualityPoints    PIC 999.
    02 FirstSem         PIC X(1) VALUE "Y".

01 FLAGS.
    02 EndOfFile        PIC X(3)    VALUE "NO".

PROCEDURE DIVISION.
BEGIN.

    PERFORM 005-INITIALIZEFILE.

    PERFORM 002-WRITEHEADING.

*   PERFORM 004-DISPLAYSEMESTERHEADING.

    PERFORM 006-SubRead
         UNTIL EndOfFile = "YES".


     CLOSE INPUTFILE, OUTPUTFILE
STOP RUN.

002-WRITEHEADING.
    MOVE "" TO DatFile
    STRING LargeSpace,LargeSpace,LargeSpace,LargeSpace,LargeSpace,LargeSpace,LargeSpace,"SOUTHEASTERN LOUISIANA UNIVERSITY" INTO DatFile    
    WRITE OutDatFile
    MOVE "" TO DatFile
    STRING LargeSpace,LargeSpace,LargeSpace,LargeSpace,LargeSpace,LargeSpace,LargeSpace,LargeSpace,LargeSpace,"HAMMOND, LA, 70402",x'0a' INTO DatFile   
    WRITE OutDatFile    
    DISPLAY "               ","LOUISIANA UNIVERSITY"
    DISPLAY "                   ","BATON, LA, 70402",x'0a'.


003-WriteNameandWnumber.
    MOVE RunningLine to StudentName.
    MOVE StudentName TO DatFile.
    WRITE OutDatFile
    MOVE StudentWnumber TO DatFile.
    WRITE OutDatFile.
    DISPLAY StudentName.
    DISPLAY StudentWnumber.

004-DISPLAYSEMESTERHEADING.
    STRING "COURSE",LargeSpace,LargeSpace,"TITLE",LargeSpace,LargeSpace,LargeSpace,LargeSpace,LargeSpace,LargeSpace,"  GR",LargeSpace,"EARNED","  ","QPTS" INTO DatFile 
    WRITE OutDatFile
    MOVE "" TO DatFile
    DISPLAY "COURSE",LargeSpace,LargeSpace,"TITLE",LargeSpace,LargeSpace,LargeSpace,LargeSpace,LargeSpace,LargeSpace," GR",LargeSpace,"EARNED","  ","QPTS".

005-INITIALIZEFILE.
    OPEN INPUT INPUTFILE.
    OPEN OUTPUT OUTPUTFILE.
    READ INPUTFILE
        AT END
            MOVE "YES" TO EndOfFile      
        END-READ.

006-SubRead.
*       MOVE RunningLine TO LineLength
        IF NameAvailable = "Y"
            MOVE "" TO DatFile
            UNSTRING RunningLine  
            DELIMITED BY '  ' INTO StudentName, StudentWnumber
                    DISPLAY StudentName 
                    DISPLAY  StudentWnumber
                    STRING StudentName INTO DatFile
                    WRITE OutDatFile
                    MOVE "" TO DatFile 
                    STRING StudentWnumber INTO DatFile
                    WRITE OutDatFile
                    MOVE "N" TO NameAvailable
        ELSE
            IF RunningLine = "$$"                           
                MOVE "Y" TO NewSem
                IF FirstSem ="N"
                    MOVE "" TO DatFile 
                    Compute SemesterGPA = SemesterGrade / SemesterCredit
                    Compute TotalHours = TotalHours + SemesterCredit
                    Compute QualityPoints = QualityPoints + SemesterGrade
                    Compute CommulativeGpa = QualityPoints /  TotalHours
                    DISPLAY LargeSpace,LargeSpace,LargeSpace,LargeSpace,LargeSpace,LargeSpace,LargeSpace,"SEMESTER", LargeSpace,LargeSpace,LargeSpace,"    ", SemesterCredit, LargeSpace," ",SemesterGrade,LargeSpace,SemesterGPA
                    STRING LargeSpace,LargeSpace,LargeSpace,LargeSpace,LargeSpace,LargeSpace,LargeSpace,"SEMESTER", LargeSpace,LargeSpace,LargeSpace,"     ", SemesterCredit, LargeSpace," ",SemesterGrade,LargeSpace,SemesterGPA INTO  OutDatFile
                    WRITE OutDatFile
                    MOVE "" TO DatFile
                    DISPLAY LargeSpace,LargeSpace,LargeSpace,LargeSpace,LargeSpace,LargeSpace,LargeSpace,"CUMULATIVE", LargeSpace,LargeSpace,LargeSpace,"  ", TotalHours, LargeSpace," ",QualityPoints,LargeSpace,CommulativeGpa
                    STRING LargeSpace,LargeSpace,LargeSpace,LargeSpace,LargeSpace,LargeSpace,LargeSpace,"CUMULATIVE", LargeSpace,LargeSpace,LargeSpace,"   ", TotalHours, LargeSpace," ",QualityPoints,LargeSpace,CommulativeGpa INTO OutDatFile
                    WRITE OutDatFile
                    MOVE "" TO DatFile
                    MOVE "0" TO CommulativeGpa
                    MOVE "0" TO SemesterCredit
                    MOVE "0" TO SemesterGPA
                    MOVE "0" TO SemesterGrade
                END-IF
                MOVE "N" TO FirstSem
            ELSE
                IF RunningLine = "**"
                     MOVE "YES" TO EndOfFile
                ELSE     
                    IF NewSem = "Y"             
                        MOVE RunningLine TO SemesterName
                        DISPLAY x'0a',SemesterName
                        STRING x'0a',SemesterName INTO OutDatFile
                        WRITE OutDatFile
                        MOVE "" TO DatFile
                        MOVE "N" TO NewSem
                        PERFORM 004-DISPLAYSEMESTERHEADING
                    ELSE
                        UNSTRING RunningLine 
                        DELIMITED BY '__' INTO  SubjectID, SubjectName, SubjectCredit,SubjectGrade
                        PERFORM 007-ComputeQualityPoints    
                        DISPLAY SubjectID,LargeSpace,SubjectName,""SubjectGrade,LargeSpace,"   ",SubjectCredit,LargeSpace," ",obtainedGrade
                        STRING SubjectID,LargeSpace,SubjectName,"  ",SubjectGrade,LargeSpace,"  ",SubjectCredit,LargeSpace," ",obtainedGrade INTO OutDatFile
                        COMPUTE SemesterCredit = SemesterCredit + SubjectCredit
                        COMPUTE SemesterGrade = SemesterGrade + obtainedGrade
*                       COMPUTE SemesterGPA = SemesterGPA + obtainedGrade 
                        WRITE OutDatFile
                        MOVE "" TO DatFile 
                        END-IF
                END-IF              
            END-IF
        END-IF
        READ INPUTFILE
        AT END
            MOVE "YES" TO EndOfFile      
        END-READ.
007-ComputeQualityPoints.
      IF SubjectGrade = "A"
        MOVE "4" TO SubjectPTS
        COMPUTE obtainedGrade = SubjectPTS * SubjectCredit

        END-IF
        IF SubjectGrade = "B"
               MOVE "3" TO SubjectPTS
                COMPUTE obtainedGrade = SubjectPTS * SubjectCredit
        END-IF
        IF SubjectGrade = "C"
               MOVE "2" TO SubjectPTS
                COMPUTE obtainedGrade = SubjectPTS * SubjectCredit
        END-IF
        IF SubjectGrade = "D"
            MOVE "1" TO SubjectPTS
            COMPUTE obtainedGrade = SubjectPTS * SubjectCredit
        END-IF
        IF SubjectGrade = "F"
                MOVE "0" TO SubjectPTS
                COMPUTE obtainedGrade = SubjectPTS * SubjectCredit
        END-IF.

Upvotes: 2

Views: 6254

Answers (1)

pistach
pistach

Reputation: 401

It would be easier if you put line-numbers with your code.

First :

02 SemesterToalHour PIC 9(1).9(2).
02 SemesterGPA      PIC 9(1).9(2).
02 CommulativeGpa   PIC 9(1).9(2).

I assume you want a number with 2 decimal places. Define these like this :

02 SemesterToalHour PIC 9(1)V99.
02 SemesterGPA      PIC 9(1)V99.
02 CommulativeGpa   PIC 9(1)V99.

Explanation : http://www.pgrocer.net/Cis12/cobol3.html

Second : If you want to put some code in comment, you have to put the * in the 7th position of the line.

Third :

CLOSE INPUTFILE, OUTPUTFILE

Put a point at the end of this line.

Change this and recompile.

Upvotes: 2

Related Questions