Data Type Justifications


Data justification refers to the alignment of data within a variable. By default, numeric data is right-justified, while alphabetic and alphanumeric data is left-justified.

However, COBOL provides additional features to adjust this alignment as per the requirements. JUSTIFIED clause is used to override the default alignment for Alphabetic and Alphanumeric data types.

Numeric Data Type -


Numeric data type is right justified by default and no override alignment applies to it. However, the below are the possible scenarios while moving the data from one to another variable -

Case-1: - Input data is larger than the declared variable size. (Overflow)

If the input data exceeds the declared variable size, the digits move from right to left, and the extra digits are ignored. The variable can only have digits that are equal to its size.

Case-2: - Input data is smaller than the declared variable size.

If the input data is smaller than the declared variable size, the digits are assigned to the variable from right to left. The remaining digits on the left side of the variable are filled with ZEROES.

Example -

Scenario - Describes how the numeric data aligns in COBOL variables.

Code -

----+----1----+----2----+----3----+----4----+----5----+
       IDENTIFICATION DIVISION.
       PROGRAM-ID. NUMERICJ.
       AUTHOR. MTH.

       DATA DIVISION.
       WORKING-STORAGE SECTION. 
       01  WS-VAR.
           05 NUMERIC-J1        PIC 9(03).
           05 NUMERIC-J2        PIC 9(09).

       PROCEDURE DIVISION.
           MOVE 256128          TO  NUMERIC-J1
                                    NUMERIC-J2.

           DISPLAY 'NUMERIC-J1:  ' NUMERIC-J1.
           DISPLAY 'NUMERIC-J2:  ' NUMERIC-J2.

		   STOP RUN.

Output -

NUMERIC-J1:  128         
NUMERIC-J2:  000256128   

Explaining Example -

NUMERIC-J1 is declared with length 3, and NUMERIC-J2 is declared with length 9. 256128 value moved to both fields.

After moving, NUMERIC-J1 is smaller than the value passed. Because of the right justification, the value should move from right to left up to the length declared. So NUMERIC-J1 had the value 128.

After moving, NUMERIC-J2 is larger than the value passed. Because of the right justification, the value should move from right to left up to the length declared. So NUMERIC-J2 had the value 000256128.

Alphabetic | Alphanumeric Data Type -


Alphabetic or Alphanumeric data type is left justified by default, and the JUSTIFIED clause overrides the default alignment. However, below are the possible scenarios while moving the data from one to another variable -

Case-1: - Input data is larger than the declared variable size. (Overflow)

If the input data exceeds the declared variable size, the characters move from left to right, and the extra characters are ignored. The variable can only have characters that are equal to its size.

Case-2: - Input data is smaller than the declared variable size.

If the input data is smaller than the declared variable size, the characters are assigned to the variable from left to right. The remaining characters on the right side of the variable are filled with LOW-VALUES or HIGH-VALUES.

Case-3: - Overriding JUSTIFIED clause.

JUSTIFIED clause overrides the default left alignment and applies right alignment to it.

Syntax -

 level-number ws-variable   
         PIC data-type(variable-length) JUSTIFIED RIGHT.

Example -

Scenario - Describes how the non-numeric data aligns in COBOL variables.

Code -

----+----1----+----2----+----3----+----4----+----5----+
       IDENTIFICATION DIVISION.
       PROGRAM-ID. ALPHAJUS.
       AUTHOR. MTH.

       DATA DIVISION. 
       WORKING-STORAGE SECTION.
       01  WS-VAR.
           05 ALPHA-J1          PIC A(10).
           05 ALPHA-J2          PIC A(50).
		   05 ALPHA-JR          PIC A(50) JUSTIFIED RIGHT.

       PROCEDURE DIVISION.
           MOVE "MAINFRAMES IS LEGACY SYSTEM"   TO ALPHA-J1 
                                                   ALPHA-J2
												   ALPHA-JR.

           DISPLAY 'ALPHA-J1:  ' ALPHA-J1.
           DISPLAY 'ALPHA-J2:  ' ALPHA-J2.
		   DISPLAY 'ALPHA-JR:  ' ALPHA-JR.

           STOP RUN.

Output -

ALPHA-J1:  MAINFRAMES                                        
ALPHA-J2:  MAINFRAMES IS LEGACY SYSTEM                       
ALPHA-JR:                         MAINFRAMES IS LEGACY SYSTEM

Explaining Example -

ALPHA-J1 is declared with a length of ten, and ALPHA-J2 is declared with a length of 20. "MAINFRAMES IS LEGACY SYSTEM" value moved to both fields.

After moving, ALPHA-J1 is smaller than the value passed. Because of left justification, the value should move from left to right up to the length declared. So ALPHA-J1 had the value MAINFRAMES.

After moving, ALPHA-J2 is larger than the value passed. Because of left justification, the value should move from left to right up to the length declared. So ALPHA-J2 had the value "MAINFRAMES IS LEGACY SYSTEM".

After moving, ALPHA-JR is larger than the value passed. Because of right justification (JUSTIFIED clause), the value should move from right to left up to the length declared. So ALPHA-JR had the value "MAINFRAMES IS LEGACY SYSTEM".