PADDING techniques in COBOL represent sophisticated data formatting and comprehensive field preparation capabilities within enterprise programming environments, providing advanced character filling mechanisms for record processing, enhanced alignment strategies for report generation, and intelligent field standardization patterns that enable consistent data presentation, optimal record structure formatting, and systematic field length management requirements while maintaining data integrity, ensuring proper alignment characteristics, and enabling flexible formatting architectures across business applications requiring precise field preparation, standardized data layouts, and reliable formatting throughout sophisticated data processing scenarios.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051*> Basic padding with SPACES 01 WS-PADDING-EXAMPLES. 05 WS-NAME-FIELD PIC X(30). 05 WS-PADDED-NAME PIC X(30). 05 WS-ACCOUNT-NUMBER PIC X(12). 05 WS-PADDED-ACCOUNT PIC X(12). *> Zero padding for numeric fields 01 WS-NUMERIC-PADDING. 05 WS-INVOICE-NUMBER PIC 9(8). 05 WS-PADDED-INVOICE PIC X(8). 05 WS-CHECK-NUMBER PIC 9(6). 05 WS-FORMATTED-CHECK PIC X(10). *> Asterisk padding for security 01 WS-SECURITY-PADDING. 05 WS-AMOUNT PIC 9(8)V99. 05 WS-PROTECTED-AMOUNT PIC X(15). 05 WS-ACCOUNT-BALANCE PIC S9(9)V99. 05 WS-SECURED-BALANCE PIC X(20). PROCEDURE DIVISION. BASIC-PADDING-DEMO. *> Right-padding with spaces MOVE "JOHN DOE" TO WS-NAME-FIELD MOVE WS-NAME-FIELD TO WS-PADDED-NAME STRING WS-NAME-FIELD DELIMITED BY SIZE SPACES DELIMITED BY SIZE INTO WS-PADDED-NAME END-STRING *> Left-padding with zeros MOVE 12345 TO WS-INVOICE-NUMBER MOVE ZEROS TO WS-PADDED-INVOICE STRING "000" DELIMITED BY SIZE WS-INVOICE-NUMBER DELIMITED BY SIZE INTO WS-PADDED-INVOICE END-STRING *> Asterisk padding for check protection MOVE 1234.56 TO WS-AMOUNT MOVE ALL "*" TO WS-PROTECTED-AMOUNT STRING "**" DELIMITED BY SIZE WS-AMOUNT DELIMITED BY SIZE "**" DELIMITED BY SIZE INTO WS-PROTECTED-AMOUNT END-STRING DISPLAY "Name padded: '" WS-PADDED-NAME "'" DISPLAY "Invoice padded: '" WS-PADDED-INVOICE "'" DISPLAY "Amount secured: '" WS-PROTECTED-AMOUNT "'"
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788*> Advanced padding utility functions 01 WS-PADDING-UTILITIES. 05 WS-SOURCE-FIELD PIC X(50). 05 WS-TARGET-FIELD PIC X(50). 05 WS-PAD-CHARACTER PIC X. 05 WS-PAD-LENGTH PIC 9(2). 05 WS-PAD-DIRECTION PIC X. *> L=Left, R=Right, C=Center 05 WS-FIELD-LENGTH PIC 9(2). 05 WS-SOURCE-LENGTH PIC 9(2). *> Report formatting with padding 01 WS-REPORT-FORMATTING. 05 WS-EMPLOYEE-RECORD. 10 WS-EMP-ID PIC X(8). 10 WS-EMP-NAME PIC X(25). 10 WS-EMP-DEPT PIC X(15). 10 WS-EMP-SALARY PIC 9(8)V99. 05 WS-FORMATTED-RECORD. 10 WS-FORMATTED-ID PIC X(10). 10 WS-FORMATTED-NAME PIC X(30). 10 WS-FORMATTED-DEPT PIC X(20). 10 WS-FORMATTED-SAL PIC X(12). PERFORM-CUSTOM-PADDING. *> Universal padding function MOVE FUNCTION LENGTH(WS-SOURCE-FIELD) TO WS-FIELD-LENGTH MOVE FUNCTION LENGTH(FUNCTION TRIM(WS-SOURCE-FIELD)) TO WS-SOURCE-LENGTH EVALUATE WS-PAD-DIRECTION WHEN 'L' *> Left padding MOVE SPACES TO WS-TARGET-FIELD COMPUTE WS-PAD-LENGTH = WS-FIELD-LENGTH - WS-SOURCE-LENGTH STRING FUNCTION REPEAT(WS-PAD-CHARACTER, WS-PAD-LENGTH) DELIMITED BY SIZE FUNCTION TRIM(WS-SOURCE-FIELD) DELIMITED BY SIZE INTO WS-TARGET-FIELD END-STRING WHEN 'R' *> Right padding MOVE FUNCTION TRIM(WS-SOURCE-FIELD) TO WS-TARGET-FIELD COMPUTE WS-PAD-LENGTH = WS-FIELD-LENGTH - WS-SOURCE-LENGTH STRING WS-TARGET-FIELD DELIMITED BY SPACE FUNCTION REPEAT(WS-PAD-CHARACTER, WS-PAD-LENGTH) DELIMITED BY SIZE INTO WS-TARGET-FIELD END-STRING WHEN 'C' *> Center padding COMPUTE WS-PAD-LENGTH = (WS-FIELD-LENGTH - WS-SOURCE-LENGTH) / 2 MOVE SPACES TO WS-TARGET-FIELD STRING FUNCTION REPEAT(WS-PAD-CHARACTER, WS-PAD-LENGTH) DELIMITED BY SIZE FUNCTION TRIM(WS-SOURCE-FIELD) DELIMITED BY SIZE FUNCTION REPEAT(WS-PAD-CHARACTER, WS-PAD-LENGTH) DELIMITED BY SIZE INTO WS-TARGET-FIELD END-STRING END-EVALUATE FORMAT-EMPLOYEE-RECORD. *> Format employee ID with leading zeros MOVE WS-EMP-ID TO WS-SOURCE-FIELD MOVE '0' TO WS-PAD-CHARACTER MOVE 'L' TO WS-PAD-DIRECTION PERFORM PERFORM-CUSTOM-PADDING MOVE WS-TARGET-FIELD TO WS-FORMATTED-ID *> Format name with trailing spaces MOVE WS-EMP-NAME TO WS-SOURCE-FIELD MOVE ' ' TO WS-PAD-CHARACTER MOVE 'R' TO WS-PAD-DIRECTION PERFORM PERFORM-CUSTOM-PADDING MOVE WS-TARGET-FIELD TO WS-FORMATTED-NAME *> Format department centered MOVE WS-EMP-DEPT TO WS-SOURCE-FIELD MOVE ' ' TO WS-PAD-CHARACTER MOVE 'C' TO WS-PAD-DIRECTION PERFORM PERFORM-CUSTOM-PADDING MOVE WS-TARGET-FIELD TO WS-FORMATTED-DEPT *> Format salary with asterisk protection MOVE WS-EMP-SALARY TO WS-FORMATTED-SAL INSPECT WS-FORMATTED-SAL REPLACING LEADING SPACES BY "*"
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283IDENTIFICATION DIVISION. PROGRAM-ID. PADDING-DEMO. DATA DIVISION. WORKING-STORAGE SECTION. *> Banking system padding examples 01 WS-BANKING-RECORDS. 05 WS-ACCOUNT-RECORDS OCCURS 100 TIMES. 10 WS-ACCOUNT-NUM PIC X(12). 10 WS-CUSTOMER-NAME PIC X(35). 10 WS-ACCOUNT-TYPE PIC X(10). 10 WS-BALANCE PIC S9(9)V99. 10 WS-LAST-ACTIVITY PIC X(10). *> Formatted output records 01 WS-FORMATTED-BANKING. 05 WS-FORMATTED-RECORDS OCCURS 100 TIMES. 10 WS-PADDED-ACCOUNT PIC X(15). 10 WS-PADDED-NAME PIC X(40). 10 WS-PADDED-TYPE PIC X(15). 10 WS-PADDED-BALANCE PIC X(20). 10 WS-PADDED-DATE PIC X(12). *> Check writing system 01 WS-CHECK-WRITING. 05 WS-CHECK-DATA. 10 WS-PAYEE-NAME PIC X(30). 10 WS-CHECK-AMOUNT PIC 9(8)V99. 10 WS-CHECK-NUMBER PIC 9(6). 10 WS-CHECK-DATE PIC X(10). 05 WS-PROTECTED-CHECK. 10 WS-SECURED-PAYEE PIC X(35). 10 WS-SECURED-AMOUNT PIC X(25). 10 WS-FORMATTED-NUM PIC X(10). 10 WS-FORMATTED-DATE PIC X(12). *> Inventory report formatting 01 WS-INVENTORY-SYSTEM. 05 WS-ITEM-RECORDS OCCURS 500 TIMES. 10 WS-ITEM-CODE PIC X(15). 10 WS-ITEM-DESC PIC X(40). 10 WS-QUANTITY PIC 9(6). 10 WS-UNIT-PRICE PIC 9(6)V99. 10 WS-SUPPLIER-CODE PIC X(8). *> Formatted inventory display 01 WS-FORMATTED-INVENTORY. 05 WS-FORMATTED-ITEMS OCCURS 500 TIMES. 10 WS-DISPLAY-CODE PIC X(18). 10 WS-DISPLAY-DESC PIC X(45). 10 WS-DISPLAY-QTY PIC X(10). 10 WS-DISPLAY-PRICE PIC X(12). 10 WS-DISPLAY-SUPPLIER PIC X(12). PROCEDURE DIVISION. MAIN-PADDING-DEMO. DISPLAY "=== COBOL PADDING DEMONSTRATION ===" PERFORM INITIALIZE-SAMPLE-DATA PERFORM DEMONSTRATE-BANKING-PADDING PERFORM DEMONSTRATE-CHECK-PROTECTION PERFORM DEMONSTRATE-INVENTORY-FORMATTING PERFORM DEMONSTRATE-ADVANCED-TECHNIQUES DISPLAY "=== PADDING DEMO COMPLETE ===" STOP RUN. INITIALIZE-SAMPLE-DATA. DISPLAY "Initializing sample data for padding demonstration..." *> Banking data MOVE "123456789" TO WS-ACCOUNT-NUM(1) MOVE "JOHN SMITH" TO WS-CUSTOMER-NAME(1) MOVE "CHECKING" TO WS-ACCOUNT-TYPE(1) MOVE 15432.75 TO WS-BALANCE(1) MOVE "2024-01-15" TO WS-LAST-ACTIVITY(1) MOVE "987654321" TO WS-ACCOUNT-NUM(2) MOVE "JANE DOE" TO WS-CUSTOMER-NAME(2) MOVE "SAVINGS" TO WS-ACCOUNT-TYPE(2) MOVE 75620.00 TO WS-BALANCE(2) MOVE "2024-01-20" TO WS-LAST-ACTIVITY(2) *> Check data MOVE "ABC SUPPLIERS INC" TO WS-PAYEE-NAME MOVE 2547.83 TO WS-CHECK-AMOUNT MOVE 123456 TO WS-CHECK-NUMBER MOVE "01/25/2024" TO WS-CHECK-DATE *> Inventory data MOVE "PROD001" TO WS-ITEM-CODE(1) MOVE "WIRELESS BLUETOOTH HEADPHONES" TO WS-ITEM-DESC(1) MOVE 150 TO WS-QUANTITY(1) MOVE 89.99 TO WS-UNIT-PRICE(1) MOVE "SUP123" TO WS-SUPPLIER-CODE(1) DISPLAY "✅ Sample data initialized". DEMONSTRATE-BANKING-PADDING. DISPLAY " " DISPLAY "=== BANKING RECORD PADDING ===" PERFORM VARYING WS-INDEX FROM 1 BY 1 UNTIL WS-INDEX > 2 *> Account number with leading zeros MOVE SPACES TO WS-PADDED-ACCOUNT(WS-INDEX) STRING "ACC-" DELIMITED BY SIZE FUNCTION REPEAT("0", 8) DELIMITED BY SIZE WS-ACCOUNT-NUM(WS-INDEX) DELIMITED BY SPACE INTO WS-PADDED-ACCOUNT(WS-INDEX) END-STRING *> Customer name with trailing spaces for alignment MOVE WS-CUSTOMER-NAME(WS-INDEX) TO WS-PADDED-NAME(WS-INDEX) *> Account type centered with spaces MOVE SPACES TO WS-PADDED-TYPE(WS-INDEX) COMPUTE WS-SPACES-NEEDED = (15 - FUNCTION LENGTH(FUNCTION TRIM(WS-ACCOUNT-TYPE(WS-INDEX)))) / 2 STRING FUNCTION REPEAT(" ", WS-SPACES-NEEDED) DELIMITED BY SIZE FUNCTION TRIM(WS-ACCOUNT-TYPE(WS-INDEX)) DELIMITED BY SIZE INTO WS-PADDED-TYPE(WS-INDEX) END-STRING *> Balance with asterisk protection MOVE SPACES TO WS-PADDED-BALANCE(WS-INDEX) STRING "***$" DELIMITED BY SIZE WS-BALANCE(WS-INDEX) DELIMITED BY SIZE "***" DELIMITED BY SIZE INTO WS-PADDED-BALANCE(WS-INDEX) END-STRING *> Date with standard formatting MOVE WS-LAST-ACTIVITY(WS-INDEX) TO WS-PADDED-DATE(WS-INDEX) DISPLAY "Record " WS-INDEX ":" DISPLAY " Account: " WS-PADDED-ACCOUNT(WS-INDEX) DISPLAY " Name: '" WS-PADDED-NAME(WS-INDEX) "'" DISPLAY " Type: '" WS-PADDED-TYPE(WS-INDEX) "'" DISPLAY " Balance: " WS-PADDED-BALANCE(WS-INDEX) DISPLAY " Date: " WS-PADDED-DATE(WS-INDEX) END-PERFORM. DEMONSTRATE-CHECK-PROTECTION. DISPLAY " " DISPLAY "=== CHECK PROTECTION PADDING ===" *> Payee name with security padding MOVE ALL "*" TO WS-SECURED-PAYEE COMPUTE WS-NAME-LENGTH = FUNCTION LENGTH(FUNCTION TRIM(WS-PAYEE-NAME)) COMPUTE WS-PAD-START = (35 - WS-NAME-LENGTH) / 2 STRING FUNCTION REPEAT("*", WS-PAD-START) DELIMITED BY SIZE FUNCTION TRIM(WS-PAYEE-NAME) DELIMITED BY SIZE INTO WS-SECURED-PAYEE(WS-PAD-START + 1:) END-STRING *> Amount with maximum protection MOVE ALL "*" TO WS-SECURED-AMOUNT STRING "**$" DELIMITED BY SIZE WS-CHECK-AMOUNT DELIMITED BY SIZE "**" DELIMITED BY SIZE INTO WS-SECURED-AMOUNT END-STRING *> Check number with leading zeros MOVE SPACES TO WS-FORMATTED-NUM STRING "CHK" DELIMITED BY SIZE FUNCTION REPEAT("0", 6) DELIMITED BY SIZE WS-CHECK-NUMBER DELIMITED BY SIZE INTO WS-FORMATTED-NUM END-STRING *> Date with standard format MOVE WS-CHECK-DATE TO WS-FORMATTED-DATE DISPLAY "Protected Check Information:" DISPLAY " Payee: " WS-SECURED-PAYEE DISPLAY " Amount: " WS-SECURED-AMOUNT DISPLAY " Number: " WS-FORMATTED-NUM DISPLAY " Date: " WS-FORMATTED-DATE. DEMONSTRATE-INVENTORY-FORMATTING. DISPLAY " " DISPLAY "=== INVENTORY REPORT FORMATTING ===" *> Item code with prefix padding MOVE SPACES TO WS-DISPLAY-CODE(1) STRING "ITEM-" DELIMITED BY SIZE FUNCTION REPEAT("0", 10) DELIMITED BY SIZE FUNCTION TRIM(WS-ITEM-CODE(1)) DELIMITED BY SIZE INTO WS-DISPLAY-CODE(1) END-STRING *> Description with proper spacing MOVE WS-ITEM-DESC(1) TO WS-DISPLAY-DESC(1) *> Quantity right-aligned with leading spaces MOVE SPACES TO WS-DISPLAY-QTY(1) COMPUTE WS-QTY-LENGTH = FUNCTION LENGTH(FUNCTION TRIM(WS-QUANTITY(1))) COMPUTE WS-SPACES-NEEDED = 10 - WS-QTY-LENGTH STRING FUNCTION REPEAT(" ", WS-SPACES-NEEDED) DELIMITED BY SIZE WS-QUANTITY(1) DELIMITED BY SIZE INTO WS-DISPLAY-QTY(1) END-STRING *> Price with currency formatting MOVE SPACES TO WS-DISPLAY-PRICE(1) STRING "$" DELIMITED BY SIZE WS-UNIT-PRICE(1) DELIMITED BY SIZE INTO WS-DISPLAY-PRICE(1) END-STRING *> Supplier code with standard padding MOVE WS-SUPPLIER-CODE(1) TO WS-DISPLAY-SUPPLIER(1) DISPLAY "Formatted Inventory Record:" DISPLAY " Code: " WS-DISPLAY-CODE(1) DISPLAY " Description: " WS-DISPLAY-DESC(1) DISPLAY " Quantity: '" WS-DISPLAY-QTY(1) "'" DISPLAY " Price: " WS-DISPLAY-PRICE(1) DISPLAY " Supplier: " WS-DISPLAY-SUPPLIER(1). DEMONSTRATE-ADVANCED-TECHNIQUES. DISPLAY " " DISPLAY "=== ADVANCED PADDING TECHNIQUES ===" *> Dynamic padding based on content MOVE "SHORT" TO WS-TEST-FIELD PERFORM DYNAMIC-PADDING DISPLAY "Dynamic padding result: '" WS-PADDED-FIELD "'" *> Conditional padding for different data types MOVE "NUMERIC123" TO WS-TEST-FIELD PERFORM CONDITIONAL-PADDING DISPLAY "Conditional padding result: '" WS-PADDED-FIELD "'" *> Multi-character padding patterns MOVE "CENTER" TO WS-TEST-FIELD PERFORM PATTERN-PADDING DISPLAY "Pattern padding result: '" WS-PADDED-FIELD "'" DYNAMIC-PADDING. COMPUTE WS-CONTENT-LENGTH = FUNCTION LENGTH(FUNCTION TRIM(WS-TEST-FIELD)) IF WS-CONTENT-LENGTH < 10 COMPUTE WS-SPACES-NEEDED = 10 - WS-CONTENT-LENGTH STRING FUNCTION TRIM(WS-TEST-FIELD) DELIMITED BY SIZE FUNCTION REPEAT("-", WS-SPACES-NEEDED) DELIMITED BY SIZE INTO WS-PADDED-FIELD END-STRING ELSE MOVE WS-TEST-FIELD TO WS-PADDED-FIELD END-IF CONDITIONAL-PADDING. IF WS-TEST-FIELD(1:7) = "NUMERIC" STRING "###" DELIMITED BY SIZE FUNCTION TRIM(WS-TEST-FIELD) DELIMITED BY SIZE "###" DELIMITED BY SIZE INTO WS-PADDED-FIELD END-STRING ELSE STRING "..." DELIMITED BY SIZE FUNCTION TRIM(WS-TEST-FIELD) DELIMITED BY SIZE "..." DELIMITED BY SIZE INTO WS-PADDED-FIELD END-STRING END-IF PATTERN-PADDING. COMPUTE WS-CONTENT-LENGTH = FUNCTION LENGTH(FUNCTION TRIM(WS-TEST-FIELD)) COMPUTE WS-TOTAL-PADDING = 20 - WS-CONTENT-LENGTH COMPUTE WS-LEFT-PADDING = WS-TOTAL-PADDING / 2 COMPUTE WS-RIGHT-PADDING = WS-TOTAL-PADDING - WS-LEFT-PADDING STRING FUNCTION REPEAT("=", WS-LEFT-PADDING) DELIMITED BY SIZE FUNCTION TRIM(WS-TEST-FIELD) DELIMITED BY SIZE FUNCTION REPEAT("=", WS-RIGHT-PADDING) DELIMITED BY SIZE INTO WS-PADDED-FIELD END-STRING