Defining and Using Tables in COBOL

In COBOL, tables (also known as arrays) are an essential feature for organizing and managing collections of data. They are particularly useful when you need to handle a large number of related items, such as customer records, sales transactions, or any dataset where direct indexing and retrieval are convenient. This article will guide you through the process of defining and utilizing tables in COBOL, allowing you to enhance data organization in your applications.

Defining Tables in COBOL

Basic Syntax

In COBOL, defining a table is akin to establishing a data structure that retains multiple entries under a single identifier. The definition occurs in the DATA DIVISION, specifically in the WORKING-STORAGE SECTION or FILE SECTION. Let's look at the general syntax:

01  table-name.
    05  index-name OCCURS n TIMES.
        10  element-name  data-type.

Example of a Simple Table

Let’s take a step-by-step approach with an example that defines a table for storing student grades.

       IDENTIFICATION DIVISION.
       PROGRAM-ID. StudentGrades.

       DATA DIVISION.
       WORKING-STORAGE SECTION.

       01  StudentGrades.
           05  Grade OCCURS 10 TIMES.
               10  CourseCode         PIC X(4).
               10  CourseGrade       PIC 99.

       PROCEDURE DIVISION.
       MAIN-PROGRAM.
           DISPLAY 'Table of Grades Initialized'.

In this example, we define a table called StudentGrades that can hold grades for 10 courses. Each course has two items: CourseCode, which is a 4-character string, and CourseGrade, which is a two-digit number.

Indexing Tables

When dealing with tables, indexing plays a significant role in data manipulation. COBOL provides the ability to reference items using subscript notation, allowing you to access and modify elements directly.

Accessing Elements

Elements of the table can be accessed using subscripts, where the counting begins at 1 (as opposed to 0 in many other programming languages). Here’s how you can refer to the first element:

   MOVE 'CS01' TO Grade(1).   *> Setting course code for the first subject
   MOVE 85 TO CourseGrade(1).  *> Setting grade for the first subject

In this case, we're directly setting CourseCode to CS01 and CourseGrade to 85 for the first entry in our table.

Modifying Table Entries

To update or change values within your table, you can simply reassign values using the same subscript.

   MOVE 90 TO CourseGrade(2).   *> Update the grade for the second subject

With this code, we are updating the grade for the course represented in Grade(2).

Using Tables in COBOL Programs

Looping Through a Table

One of the most common operations when working with tables is iterating through all the entries. This can be achieved using a PERFORM statement along with a loop control variable.

       PERFORM VARYING Index FROM 1 BY 1 UNTIL Index > 10
           DISPLAY 'Course Code: ' Grade(Index)
           DISPLAY 'Course Grade: ' CourseGrade(Index)
       END-PERFORM.

In this loop, Index is a variable used to access each element of the table sequentially.

Example Program: Handling Student Grades

Now let’s take a complete example that includes defining a table, populating it with data, and then displaying the results.

       IDENTIFICATION DIVISION.
       PROGRAM-ID. StudentGrades.

       ENVIRONMENT DIVISION.

       DATA DIVISION.
       WORKING-STORAGE SECTION.

       01  StudentGrades.
           05  Grade OCCURS 10 TIMES INDEXED BY Index.
               10  CourseCode         PIC X(4).
               10  CourseGrade       PIC 99.

       01  Index                   PIC 9(2) VALUE 1.
       01  Continue                PIC X(3) VALUE 'YES'.

       PROCEDURE DIVISION.
       MAIN-PROGRAM.

           PERFORM UNTIL Continue = 'NO'
               DISPLAY 'Enter Course Code:'
               ACCEPT CourseCode
               DISPLAY 'Enter Course Grade:'
               ACCEPT CourseGrade

               MOVE CourseCode TO Grade(Index)
               MOVE CourseGrade TO CourseGrade(Index)
               ADD 1 TO Index
               IF Index > 10
                   MOVE 'NO' TO Continue
               END-IF
           END-PERFORM.

           DISPLAY 'Grades Entered: '.

           PERFORM VARYING Index FROM 1 BY 1 UNTIL Index > 10
               DISPLAY 'Course Code: ' Grade(Index)
               DISPLAY 'Course Grade: ' CourseGrade(Index)
           END-PERFORM.

           STOP RUN.

Explanation

  1. Initialization: The program starts by declaring a Working-Storage section where the table is defined, along with an index variable Index and a loop-control variable Continue.

  2. Input Loop: The program enters a loop where it prompts the user to enter a course code and corresponding grade. It populates the table until it reaches 10 entries.

  3. Displaying Results: After completing the data entry, the program performs another loop to display all the grades entered.

Important Considerations

  • Table Size: When defining tables, always consider the maximum number of entries you expect. COBOL arrays are static once defined; you cannot change their size dynamically during runtime.

  • Index Usage: Using indexed tables can significantly enhance performance when searching or modifying data because it allows for optimized direct access.

  • Out-of-Bounds Errors: Be cautious of array bounds; accessing an index outside the defined limits can lead to runtime errors.

Conclusion

Tables are a vital aspect of COBOL programming, allowing for organized data structures that are easy to read and manipulate. By mastering the definition and usage of tables, you can improve the efficiency of your COBOL applications, leading to more maintainable and scalable code. Remember to utilize indexing wisely and ensure your programs handle entries appropriately to avoid common pitfalls. Happy coding!