top of page

Programming by example

Coding Made Easy

MisterTootor  M.S., B.S., A.S., A.S.B

mistertooter's

A very short COBOL program (http://www.csis.ul.ie/cobol/examples/default.htm)

​

$ SET SOURCEFORMAT"FREE"

IDENTIFICATION DIVISION.

PROGRAM-ID.  ShortestProgram.

 

PROCEDURE DIVISION.

DisplayPrompt.

    DISPLAY "I did it".

    STOP RUN.

 

​

IDENTIFICATION DIVISION.

PROGRAM-ID. HELLO.

ENVIRONMENT DIVISION.

INPUT-OUTPUT SECTION.

FILE-CONTROL.

SELECT FILEN ASSIGN TO INPUT.

ORGANIZATION IS SEQUENTIAL.

ACCESS IS SEQUENTIAL.

DATA DIVISION.

FILE SECTION.

FD FILEN 01 NAME PIC A(25).

WORKING-STORAGE SECTION.

01 WS-STUDENT PIC A(30).

01 WS-ID PIC 9(5).

LOCAL-STORAGE SECTION.

01 LS-CLASS PIC 9(3).

LINKAGE SECTION. 01 LS-ID PIC 9(5).

PROCEDURE DIVISION.

DISPLAY 'Executing COBOL program using JCL'.

STOP RUN.

 

The JCL to execute the above COBOL program is as follows:

 //SAMPLE JOB(TESTJCL,XXXXXX),CLASS=A,MSGCLASS=C

//STEP1 EXEC PGM=HELLO

//INPUT DD DSN=ABC.EFG.XYZ,DISP=SHR

 

Output

Executing COBOL program using JCL

 

 

 

      $ SET SOURCEFORMAT"FREE"

IDENTIFICATION DIVISION.

PROGRAM-ID.  Conditions.

AUTHOR.  Michael Coughlan.

* An example program demonstrating the use of

* condition names (level 88's).

* The EVALUATE and PERFORM verbs are also used.

 

DATA DIVISION.

WORKING-STORAGE SECTION.

01  Char               PIC X.

    88 Vowel           VALUE "a", "e", "i", "o", "u".

    88 Consonant       VALUE "b", "c", "d", "f", "g", "h"

                             "j" THRU "n", "p" THRU "t", "v" THRU "z".

    88 Digit           VALUE "0" THRU "9".

    88 ValidCharacter  VALUE "a" THRU "z", "0" THRU "9".

 

PROCEDURE DIVISION.

Begin.

    DISPLAY "Enter lower case character or digit. No data ends.".

    ACCEPT Char.

    PERFORM UNTIL NOT ValidCharacter

        EVALUATE TRUE

           WHEN Vowel DISPLAY "The letter " Char " is a vowel."

           WHEN Consonant DISPLAY "The letter " Char " is a consonant."

           WHEN Digit DISPLAY Char " is a digit."

           WHEN OTHER DISPLAY "problems found"

        END-EVALUATE

    END-PERFORM

    STOP RUN.

 Reads a sequential file and displays the record (http://www.csis.ul.ie/cobol/examples/SeqRead/Seqread.cbl)

 

​

     $ SET SOURCEFORMAT"FREE"

IDENTIFICATION DIVISION.

PROGRAM-ID.  SeqRead.

AUTHOR.  Michael Coughlan.

* An example program showing how to read a sequential file.

* This is the definitive example

 

ENVIRONMENT DIVISION.

INPUT-OUTPUT SECTION.

FILE-CONTROL.

    SELECT StudentFile ASSIGN TO "STUDENTS.DAT"

               ORGANIZATION IS LINE SEQUENTIAL.

 

DATA DIVISION.

FILE SECTION.

FD StudentFile.

01 StudentDetails.

   88  EndOfStudentFile  VALUE HIGH-VALUES.

   02  StudentId        PIC 9(7).

   02  StudentName.

       03 Surname      PIC X(8).

       03 Initials          PIC XX.

   02  DateOfBirth.

       03 YOBirth         PIC 9(4).

       03 MOBirth        PIC 9(2).

       03 DOBirth        PIC 9(2).

   02  CourseCode    PIC X(4).

   02  Gender            PIC X.

 

PROCEDURE DIVISION.

Begin.

   OPEN INPUT StudentFile

   READ StudentFile

      AT END SET EndOfStudentFile TO TRUE

   END-READ

   PERFORM UNTIL EndOfStudentFile

      DISPLAY StudentId SPACE StudentName SPACE CourseCode SPACE YOBirth

      READ StudentFile

         AT END SET EndOfStudentFile TO TRUE

      END-READ

   END-PERFORM

   CLOSE StudentFile

   STOP RUN.

 

​

(http://www.csis.ul.ie/cobol/examples/Tables/MonthTable.htm

 

   $ SET SOURCEFORMAT"FREE"

IDENTIFICATION DIVISION.

PROGRAM-ID.  MonthTable.

AUTHOR.  Michael Coughlan.

* This program counts the number of students born in each month and

* displays the result.

 

ENVIRONMENT DIVISION.

INPUT-OUTPUT SECTION.

FILE-CONTROL.

    SELECT StudentFile ASSIGN TO "STUDENTS.DAT"

               ORGANIZATION IS LINE SEQUENTIAL.

 

DATA DIVISION.

FILE SECTION.

FD StudentFile.

01 StudentDetails.

   88  EndOfStudentFile  VALUE HIGH-VALUES.

   02  StudentId        PIC 9(7).

   02  StudentName.

       03 Surname      PIC X(8).

       03 Initials           PIC XX.

   02  DateOfBirth.

       03 YOBirth           PIC 9(4).

       03 MOBirth          PIC 9(2).

       03 DOBirth           PIC 9(2).

   02  CourseCode       PIC X(4).

   02  Gender               PIC X.

 

WORKING-STORAGE SECTION.

01 MonthTable.

   02 TableValues.

      03 FILLER       PIC X(18) VALUE "January  February".

      03 FILLER       PIC X(18) VALUE "March    April".

      03 FILLER       PIC X(18) VALUE "May      June".

      03 FILLER       PIC X(18) VALUE "July     August".

      03 FILLER       PIC X(18) VALUE "SeptemberOctober".

      03 FILLER       PIC X(18) VALUE "November December".

   02 FILLERh REDEFINES TableValues.

      03 Month OCCURS 12 TIMES PIC X(9).

 

01 MonthCount OCCURS 12 TIMES PIC 999 VALUE ZEROS.

 

01 MonthIdx              PIC 999.

 

01 HeadingLine          PIC X(19) VALUE " Month    StudCount".

 

01 DisplayLine.

   02 PrnMonth           PIC X(9).

   02 FILLER               PIC X(4) VALUE SPACES.

   02 PrnStudentCount   PIC ZZ9.

 

 

PROCEDURE DIVISION.

Begin.

   OPEN INPUT StudentFile

   READ StudentFile

      AT END SET EndOfStudentFile TO TRUE

   END-READ

   PERFORM UNTIL EndOfStudentFile

      ADD 1 TO MonthCount(MOBirth)

      READ StudentFile

         AT END SET EndOfStudentFile TO TRUE

      END-READ

   END-PERFORM

 

   DISPLAY HeadingLine

   PERFORM VARYING MonthIdx FROM 1 BY 1 UNTIL MonthIdx > 12

      MOVE Month(MonthIdx) TO PrnMonth

      MOVE MonthCount(MonthIdx) TO PrnStudentCount

      DISPLAY DisplayLine

   END-PERFORM.

 

   CLOSE StudentFile

   STOP RUN.

Counts the number of students born each month

The table properties

Show me the source code to build a basic Cobol module along with an output

IDENTIFICATION DIVISION.
       PROGRAM-ID. HelloWorld.

       ENVIRONMENT DIVISION.

       DATA DIVISION.

       WORKING-STORAGE SECTION.
       01  WS-GREETING     PIC A(20) VALUE 'Hello, World!'.

       PROCEDURE DIVISION.

       DISPLAY WS-GREETING.

       STOP RUN.

Sample Output:

Hello, World!

 

How to Compile the COBOL Program​:

cobc -x HelloWorld.cob
 

How to run the COBOL Program​

./HelloWorld

Show me the source code with a table of data I can use to run a basic cobol program

       IDENTIFICATION DIVISION.
       PROGRAM-ID. TableExample.

       ENVIRONMENT DIVISION.

       DATA DIVISION.

       WORKING-STORAGE SECTION.
       01  WS-TABLE-SIZE       PIC 9(02) VALUE 5.
       01  WS-INDEX            PIC 9(02) VALUE 1.

       01  WS-NAME-TABLE.
           05  WS-NAME OCCURS 5 TIMES INDEXED BY IDX.
               10  WS-FIRST-NAME  PIC A(20).
               10  WS-LAST-NAME   PIC A(20).

       PROCEDURE DIVISION.

       * Initialize table data
       MOVE 'John'        TO WS-FIRST-NAME (1).
       MOVE 'Doe'         TO WS-LAST-NAME (1).
       MOVE 'Jane'        TO WS-FIRST-NAME (2).
       MOVE 'Smith'      TO WS-LAST-NAME (2).
       MOVE 'Alice'        TO WS-FIRST-NAME (3).
       MOVE 'Johnson'  TO WS-LAST-NAME (3).
       MOVE 'Bob'          TO WS-FIRST-NAME (4).
       MOVE 'Brown'     TO WS-LAST-NAME (4).
       MOVE 'Charlie'    TO WS-FIRST-NAME (5).
       MOVE 'Davis'       TO WS-LAST-NAME (5).

       * Display header
       DISPLAY 'Name List:'.

       * Loop through the table and display names
       PERFORM DISPLAY-NAMES UNTIL WS-INDEX > WS-TABLE-SIZE.

       STOP RUN.

       DISPLAY-NAMES.
           DISPLAY 'First Name: ' WS-FIRST-NAME (WS-INDEX)
                   '  Last Name: ' WS-LAST-NAME (WS-INDEX).
           ADD 1 TO WS-INDEX.

 

Sample Output:

​

Name List:
First Name: John  Last Name: Doe
First Name: Jane  Last Name: Smith
First Name: Alice  Last Name: Johnson
First Name: Bob  Last Name: Brown
First Name: Charlie  Last Name: Davis

The PIC Environment

IDENTIFICATION DIVISION.

PROGRAM-ID. STATE-DFD-INPUT-REPORT.

​

 ENVIRONMENT DIVISION.

 INPUT-OUTPUT SECTION.

 FILE-CONTROL.

 SELECT EMPFILE  ASSIGN TO 'DataTest.txt'

 ORGANIZATION IS SEQUENTIAL      

 ACCESS MODE IS SEQUENTIAL

 FILE STATUS IS WS-FILE-STATUS.

DATA DIVISION.

WORKING-STORAGE SECTION.

01 INPUT-DATA.

   05 CDE-COUNT                                                PIC X(2).

   05 IDN-CASE                                                    PIC X(7).

   05 APPL-LAST-NAME                                     PIC X(15).

   05 APPL-FIRST-NAME                                    PIC X(15).

   05 ADDRESS1                                                 PIC X(25).

   05 ADDRESS2                                                 PIC X(20).

   05 CITY                                                             PIC X(15).

   05 STATE                                                          PIC X(2).

   05 ZIP                                                               PIC X(5).

   05 CDE-TIER-LEVEL-CCDBG                           PIC X(1).

   05 POVERTY-LEVEL                                         PIC X(25).

   05 NUM-PROGRAM-ACCOUNT                       PIC X(3).

   05 IDN-CHILD                                                  PIC X(7).

   05 NME-FIRST                                                 PIC X(20).

   05 NME-LAST                                                  PIC X(20).

   05 CDE-RACE                                                   PIC X(2).

   05 CDE-ETHNIC                                               PIC X(1).

   05 CAT-CARE                                                   PIC X(1).

   05 AGE                                                             PIC X(3).

   05 DTE-BIRTH                                                 PIC X(10).

   05 F-P-CARE                                                   PIC X(1).

   05 IDN-PROVIDER                                           PIC X(6).

   05 NME-PROVIDER                                         PIC X(20).

   05 ADD1                                                           PIC X(20).

   05 ADD-CITY                                                    PIC X(20).

   05 ADD-STATE                                                 PIC X(2).

   05 ADD-ZIP                                                      PIC X(5).

   05 CDE-PROVIDER-CARE-TYPE                     PIC X(1).

   05 NUMB-GNJK-CARE-TYPE                          PIC X(1).

   05 NUM-GNJK-LEVEL                                     PIC X(1).

   05 EMAIL                                                          PIC X(30).

The Code to Run

PROCEDURE DIVISION.

 

 MAIN-PARA.

   OPEN INPUT  EMPFILE.

   PERFORM READ-PARA THRU READ-PARA-EXIT UNTIL WS-EOF="Y".

   CLOSE EMPFILE.

   STOP RUN.                                            

 MAIN-PARA-EXIT.

 EXIT.

 

 READ-PARA.

 MOVE ZERO TO CDE-Count.

 READ EMPFILE                                        

 AT END                                              

   MOVE "Y" TO WS-EOF                                 

 NOT AT END                                          

   DISPLAY  '*******', NEWFILE

 END-READ.

 

 READ-PARA-EXIT.

 EXIT.

bottom of page