MainframeMaster

COBOL Tutorial

COBOL PADDING

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.

Basic Padding Techniques

Fundamental Padding Operations
cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
*> 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 "'"
Character Filling
Field Alignment
Data Formatting

Advanced Padding Functions

Custom Padding Implementation
cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
*> 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 "*"

Comprehensive PADDING Examples

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
IDENTIFICATION 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

PADDING Features and Applications

Character Types
  • • SPACES for general alignment
  • • ZEROS for numeric formatting
  • • ASTERISKS for check protection
  • • Custom characters for special needs
Padding Directions
  • • Left padding for numeric alignment
  • • Right padding for text fields
  • • Center padding for titles
  • • Custom positioning as needed
Business Uses
  • • Report formatting and alignment
  • • Check and form protection
  • • Fixed-length record preparation
  • • Screen display formatting
Security Applications
  • • Check amount protection
  • • Sensitive data masking
  • • Document fraud prevention
  • • Financial form security

Best Practices

Related Pages