MainframeMaster

COBOL Tutorial

COBOL INITIALIZE Statement

The INITIALIZE statement represents a sophisticated data initialization mechanism within COBOL programming environments, providing automatic value assignment capabilities that enable efficient data structure preparation, consistent variable initialization, and comprehensive memory management. This statement embodies the principles of predictable data handling by supporting type-aware initialization, selective field processing, and bulk data operations while maintaining data integrity, ensuring consistent starting states, and facilitating robust application development across enterprise systems requiring reliable data initialization, efficient memory utilization, and comprehensive data structure management with optimal performance characteristics.

INITIALIZE Statement Syntax

Basic INITIALIZE Usage
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
*> Basic INITIALIZE syntax INITIALIZE identifier-1 [, identifier-2, ...] *> INITIALIZE with REPLACING clause INITIALIZE identifier-1 REPLACING { ALPHABETIC } { ALPHANUMERIC } DATA BY value-1 { NUMERIC } { ALPHABETIC-EDITED } { ALPHANUMERIC-EDITED } { NUMERIC-EDITED } *> Examples of basic INITIALIZE 01 EMPLOYEE-RECORD. 05 EMP-ID PIC 9(6). 05 EMP-NAME PIC X(30). 05 EMP-SALARY PIC 9(7)V99. 05 EMP-DEPT PIC X(10). 01 COUNTERS. 05 RECORD-COUNT PIC 9(5). 05 ERROR-COUNT PIC 9(3). 05 TOTAL-AMOUNT PIC 9(10)V99. PROCEDURE DIVISION. *> Initialize entire record to defaults INITIALIZE EMPLOYEE-RECORD *> Result: EMP-ID = 0, EMP-NAME = spaces, EMP-SALARY = 0, EMP-DEPT = spaces *> Initialize multiple items INITIALIZE COUNTERS, EMPLOYEE-RECORD *> Initialize with selective replacement INITIALIZE EMPLOYEE-RECORD REPLACING NUMERIC DATA BY 999 ALPHABETIC DATA BY "UNKNOWN" *> Initialize only specific data types INITIALIZE EMPLOYEE-RECORD REPLACING ALPHANUMERIC DATA BY SPACES.
Data Initialization
Type Aware
Bulk Operations

Comprehensive INITIALIZE 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
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
IDENTIFICATION DIVISION. PROGRAM-ID. INITIALIZE-DEMONSTRATION. DATA DIVISION. WORKING-STORAGE SECTION. 01 CUSTOMER-MASTER-RECORD. 05 CUST-HEADER. 10 CUST-ID PIC 9(8). 10 CUST-TYPE PIC X(10). 10 DATE-CREATED PIC 9(8). 10 STATUS-CODE PIC X. 05 PERSONAL-INFO. 10 FIRST-NAME PIC X(20). 10 LAST-NAME PIC X(25). 10 MIDDLE-INITIAL PIC X. 10 DATE-OF-BIRTH PIC 9(8). 10 SSN PIC 9(9). 05 ADDRESS-INFO. 10 STREET-ADDRESS PIC X(40). 10 CITY PIC X(25). 10 STATE PIC X(2). 10 ZIP-CODE PIC 9(5). 10 COUNTRY-CODE PIC X(3). 05 FINANCIAL-INFO. 10 CREDIT-LIMIT PIC 9(8)V99. 10 CURRENT-BALANCE PIC S9(8)V99. 10 PAYMENT-DUE PIC 9(6)V99. 10 LAST-PAYMENT PIC 9(8). 01 TRANSACTION-RECORD. 05 TRANS-HEADER. 10 TRANS-ID PIC X(12). 10 TRANS-DATE PIC 9(8). 10 TRANS-TIME PIC 9(6). 10 TRANS-TYPE PIC X(4). 05 TRANS-AMOUNTS. 10 PRINCIPAL PIC 9(8)V99. 10 INTEREST PIC 9(6)V99. 10 FEES PIC 9(4)V99. 10 TOTAL-AMOUNT PIC 9(9)V99. 05 TRANS-REFERENCE. 10 CHECK-NUMBER PIC 9(8). 10 REFERENCE-NUM PIC X(20). 10 BATCH-ID PIC X(10). 01 STATISTICAL-COUNTERS. 05 PROCESSING-STATS. 10 RECORDS-READ PIC 9(8). 10 RECORDS-PROCESSED PIC 9(8). 10 RECORDS-REJECTED PIC 9(6). 10 ERRORS-FOUND PIC 9(5). 05 FINANCIAL-TOTALS. 10 TOTAL-DEBITS PIC 9(12)V99. 10 TOTAL-CREDITS PIC 9(12)V99. 10 NET-AMOUNT PIC S9(12)V99. 10 RUNNING-BALANCE PIC S9(15)V99. 01 CONTROL-FLAGS. 05 PROCESSING-FLAGS. 10 FIRST-RECORD PIC X VALUE 'Y'. 88 FIRST-TIME VALUE 'Y'. 88 NOT-FIRST VALUE 'N'. 10 EOF-FLAG PIC X VALUE 'N'. 88 END-OF-FILE VALUE 'Y'. 88 MORE-DATA VALUE 'N'. 10 ERROR-FLAG PIC X VALUE 'N'. 88 ERROR-FOUND VALUE 'Y'. 88 NO-ERROR VALUE 'N'. 05 VALIDATION-FLAGS. 10 VALID-CUSTOMER PIC X VALUE 'N'. 10 VALID-AMOUNT PIC X VALUE 'N'. 10 VALID-DATE PIC X VALUE 'N'. PROCEDURE DIVISION. MAIN-PROCESSING. PERFORM DEMONSTRATE-BASIC-INITIALIZE PERFORM DEMONSTRATE-SELECTIVE-INITIALIZE PERFORM DEMONSTRATE-REPLACING-CLAUSES PERFORM DEMONSTRATE-COMPLEX-STRUCTURES PERFORM DEMONSTRATE-PRACTICAL-USAGE STOP RUN. DEMONSTRATE-BASIC-INITIALIZE. DISPLAY "=== BASIC INITIALIZE OPERATIONS ===" *> Show original values (uninitialized) DISPLAY "Before INITIALIZE:" DISPLAY " Customer ID: '" CUST-ID "'" DISPLAY " First Name: '" FIRST-NAME "'" DISPLAY " Credit Limit: " CREDIT-LIMIT DISPLAY " Current Balance: " CURRENT-BALANCE *> Basic initialize - sets defaults based on data types INITIALIZE CUSTOMER-MASTER-RECORD DISPLAY "After basic INITIALIZE:" DISPLAY " Customer ID: '" CUST-ID "'" DISPLAY " First Name: '" FIRST-NAME "'" DISPLAY " Credit Limit: " CREDIT-LIMIT DISPLAY " Current Balance: " CURRENT-BALANCE *> Initialize multiple items at once INITIALIZE TRANSACTION-RECORD, STATISTICAL-COUNTERS DISPLAY "Transaction and Statistics initialized:" DISPLAY " Transaction ID: '" TRANS-ID "'" DISPLAY " Principal: " PRINCIPAL DISPLAY " Records Read: " RECORDS-READ DISPLAY " Total Debits: " TOTAL-DEBITS DISPLAY SPACES. DEMONSTRATE-SELECTIVE-INITIALIZE. DISPLAY "=== SELECTIVE INITIALIZATION ===" *> Set up some test data first MOVE 12345678 TO CUST-ID MOVE "JOHN DOE" TO FIRST-NAME MOVE "PREMIUM" TO CUST-TYPE MOVE 15000.00 TO CREDIT-LIMIT MOVE -250.75 TO CURRENT-BALANCE DISPLAY "Before selective initialization:" DISPLAY " Customer ID: " CUST-ID DISPLAY " First Name: '" FIRST-NAME "'" DISPLAY " Customer Type: '" CUST-TYPE "'" DISPLAY " Credit Limit: " CREDIT-LIMIT DISPLAY " Current Balance: " CURRENT-BALANCE *> Initialize only numeric fields INITIALIZE CUSTOMER-MASTER-RECORD REPLACING NUMERIC DATA BY ZERO DISPLAY "After initializing only NUMERIC data:" DISPLAY " Customer ID: " CUST-ID DISPLAY " First Name: '" FIRST-NAME "'" DISPLAY " Customer Type: '" CUST-TYPE "'" DISPLAY " Credit Limit: " CREDIT-LIMIT DISPLAY " Current Balance: " CURRENT-BALANCE *> Reset data MOVE 12345678 TO CUST-ID MOVE "JANE SMITH" TO FIRST-NAME MOVE "STANDARD" TO CUST-TYPE MOVE 5000.00 TO CREDIT-LIMIT *> Initialize only alphanumeric fields INITIALIZE CUSTOMER-MASTER-RECORD REPLACING ALPHANUMERIC DATA BY SPACES DISPLAY "After initializing only ALPHANUMERIC data:" DISPLAY " Customer ID: " CUST-ID DISPLAY " First Name: '" FIRST-NAME "'" DISPLAY " Customer Type: '" CUST-TYPE "'" DISPLAY " Credit Limit: " CREDIT-LIMIT DISPLAY SPACES. DEMONSTRATE-REPLACING-CLAUSES. DISPLAY "=== INITIALIZE WITH REPLACING CLAUSES ===" *> Initialize with specific replacement values INITIALIZE CUSTOMER-MASTER-RECORD REPLACING NUMERIC DATA BY 999999 ALPHANUMERIC DATA BY "INIT" DISPLAY "After REPLACING with specific values:" DISPLAY " Customer ID: " CUST-ID DISPLAY " First Name: '" FIRST-NAME "'" DISPLAY " Customer Type: '" CUST-TYPE "'" DISPLAY " Credit Limit: " CREDIT-LIMIT DISPLAY " Current Balance: " CURRENT-BALANCE *> Initialize transaction with business-appropriate values INITIALIZE TRANSACTION-RECORD REPLACING NUMERIC DATA BY ZERO ALPHANUMERIC DATA BY "UNKNOWN" DISPLAY "Transaction initialized with business defaults:" DISPLAY " Transaction ID: '" TRANS-ID "'" DISPLAY " Transaction Type: '" TRANS-TYPE "'" DISPLAY " Principal: " PRINCIPAL DISPLAY " Reference Number: '" REFERENCE-NUM "'" *> Initialize financial totals with starting balances INITIALIZE FINANCIAL-TOTALS REPLACING NUMERIC DATA BY ZERO DISPLAY "Financial totals reset:" DISPLAY " Total Debits: " TOTAL-DEBITS DISPLAY " Total Credits: " TOTAL-CREDITS DISPLAY " Net Amount: " NET-AMOUNT DISPLAY " Running Balance: " RUNNING-BALANCE DISPLAY SPACES. DEMONSTRATE-COMPLEX-STRUCTURES. DISPLAY "=== COMPLEX STRUCTURE INITIALIZATION ===" *> Initialize nested group items INITIALIZE PERSONAL-INFO DISPLAY "Personal info initialized:" DISPLAY " First Name: '" FIRST-NAME "'" DISPLAY " Last Name: '" LAST-NAME "'" DISPLAY " Date of Birth: " DATE-OF-BIRTH DISPLAY " SSN: " SSN *> Initialize address with default values INITIALIZE ADDRESS-INFO REPLACING ALPHANUMERIC DATA BY "TBD" NUMERIC DATA BY 99999 DISPLAY "Address info with defaults:" DISPLAY " Street: '" STREET-ADDRESS "'" DISPLAY " City: '" CITY "'" DISPLAY " State: '" STATE "'" DISPLAY " ZIP: " ZIP-CODE DISPLAY " Country: '" COUNTRY-CODE "'" *> Initialize control flags appropriately INITIALIZE CONTROL-FLAGS REPLACING ALPHANUMERIC DATA BY "N" DISPLAY "Control flags initialized:" DISPLAY " First Record: '" FIRST-RECORD "'" DISPLAY " EOF Flag: '" EOF-FLAG "'" DISPLAY " Error Flag: '" ERROR-FLAG "'" DISPLAY " Valid Customer: '" VALID-CUSTOMER "'" DISPLAY SPACES. DEMONSTRATE-PRACTICAL-USAGE. DISPLAY "=== PRACTICAL USAGE SCENARIOS ===" *> Scenario 1: Preparing record for new customer entry DISPLAY "Scenario 1: New customer record preparation" INITIALIZE CUSTOMER-MASTER-RECORD REPLACING ALPHANUMERIC DATA BY SPACES NUMERIC DATA BY ZERO *> Set required initial values ACCEPT DATE-CREATED FROM DATE YYYYMMDD MOVE 'A' TO STATUS-CODE MOVE "USA" TO COUNTRY-CODE DISPLAY " Record prepared for new customer" DISPLAY " Date Created: " DATE-CREATED DISPLAY " Status: " STATUS-CODE DISPLAY " Country: " COUNTRY-CODE *> Scenario 2: Reset counters for new batch DISPLAY "Scenario 2: Batch processing reset" INITIALIZE STATISTICAL-COUNTERS DISPLAY " All counters reset to zero" DISPLAY " Records Read: " RECORDS-READ DISPLAY " Records Processed: " RECORDS-PROCESSED DISPLAY " Errors Found: " ERRORS-FOUND *> Scenario 3: Transaction template initialization DISPLAY "Scenario 3: Transaction template" INITIALIZE TRANSACTION-RECORD REPLACING ALPHANUMERIC DATA BY SPACES NUMERIC DATA BY ZERO *> Set transaction defaults ACCEPT TRANS-DATE FROM DATE YYYYMMDD ACCEPT TRANS-TIME FROM TIME MOVE "UNKN" TO TRANS-TYPE DISPLAY " Transaction template ready" DISPLAY " Date: " TRANS-DATE DISPLAY " Time: " TRANS-TIME DISPLAY " Type: " TRANS-TYPE DISPLAY SPACES. *> Advanced initialization patterns ADVANCED-INITIALIZATION-PATTERNS. DISPLAY "=== ADVANCED INITIALIZATION PATTERNS ===" *> Pattern 1: Conditional initialization IF CUSTOMER-MASTER-RECORD = SPACES INITIALIZE CUSTOMER-MASTER-RECORD DISPLAY "Customer record was empty - initialized" ELSE DISPLAY "Customer record contains data - not initialized" END-IF *> Pattern 2: Partial record reset INITIALIZE FINANCIAL-INFO REPLACING NUMERIC DATA BY ZERO DISPLAY "Only financial information reset" *> Pattern 3: Loop initialization for arrays PERFORM VARYING WS-INDEX FROM 1 BY 1 UNTIL WS-INDEX > 100 INITIALIZE TABLE-ENTRY(WS-INDEX) END-PERFORM. VALIDATION-AND-INITIALIZATION. DISPLAY "=== VALIDATION WITH INITIALIZATION ===" *> Initialize validation flags INITIALIZE VALIDATION-FLAGS REPLACING ALPHANUMERIC DATA BY "N" *> Validate and initialize customer data IF CUST-ID = ZERO INITIALIZE CUSTOMER-MASTER-RECORD MOVE "N" TO VALID-CUSTOMER DISPLAY "Customer ID zero - record initialized" ELSE MOVE "Y" TO VALID-CUSTOMER DISPLAY "Customer ID valid: " CUST-ID END-IF *> Initialize error handling structures IF ERROR-FOUND INITIALIZE STATISTICAL-COUNTERS SET NO-ERROR TO TRUE DISPLAY "Error condition cleared - counters reset" END-IF. BULK-INITIALIZATION-OPERATIONS. DISPLAY "=== BULK INITIALIZATION OPERATIONS ===" *> Initialize multiple structures for batch processing INITIALIZE CUSTOMER-MASTER-RECORD, TRANSACTION-RECORD, STATISTICAL-COUNTERS, CONTROL-FLAGS DISPLAY "All major structures initialized for batch processing" *> Initialize with consistent business defaults INITIALIZE CUSTOMER-MASTER-RECORD REPLACING ALPHANUMERIC DATA BY "PENDING" NUMERIC DATA BY 999999999 INITIALIZE TRANSACTION-RECORD REPLACING ALPHANUMERIC DATA BY "NEW" NUMERIC DATA BY ZERO DISPLAY "Business-specific initialization completed" *> Performance-optimized initialization INITIALIZE FINANCIAL-TOTALS *> Only numeric fields INITIALIZE PROCESSING-STATS *> Only numeric fields DISPLAY "Performance-critical counters initialized". MEMORY-CLEANUP-WITH-INITIALIZE. DISPLAY "=== MEMORY CLEANUP OPERATIONS ===" *> Clean up before program termination INITIALIZE CUSTOMER-MASTER-RECORD, TRANSACTION-RECORD, STATISTICAL-COUNTERS DISPLAY "Memory structures cleaned up" *> Selective cleanup of sensitive data INITIALIZE PERSONAL-INFO REPLACING ALPHANUMERIC DATA BY SPACES NUMERIC DATA BY ZERO INITIALIZE FINANCIAL-INFO REPLACING NUMERIC DATA BY ZERO DISPLAY "Sensitive data fields cleared for security".

INITIALIZE Data Type Behavior

Default Values by Data Type

Numeric Types

  • • PIC 9 → Zero
  • • PIC S9 → Zero
  • • PIC 9V99 → Zero
  • • COMP fields → Zero

Character Types

  • • PIC X → Spaces
  • • PIC A → Spaces
  • • Group items → Spaces
  • • Edited fields → Spaces/Zero

Interactive Tutorial

Hands-On Exercise: Data Initialization
Practice using INITIALIZE for different scenarios and data types

Exercise 1: Record Preparation

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
01 EMPLOYEE-RECORD. 05 EMP-NUMBER PIC 9(6). 05 EMP-NAME PIC X(30). 05 DEPARTMENT PIC X(15). 05 SALARY PIC 9(7)V99. 05 HIRE-DATE PIC 9(8). *> Initialize for new employee entry INITIALIZE EMPLOYEE-RECORD REPLACING ALPHANUMERIC DATA BY SPACES NUMERIC DATA BY ZERO. *> Set default values ACCEPT HIRE-DATE FROM DATE YYYYMMDD.

Exercise 2: Selective Reset

cobol
1
2
3
4
5
6
7
8
9
10
11
12
01 ORDER-TOTALS. 05 ITEM-COUNT PIC 9(4). 05 SUBTOTAL PIC 9(8)V99. 05 TAX-AMOUNT PIC 9(6)V99. 05 TOTAL PIC 9(9)V99. 05 STATUS PIC X(10). *> Reset only financial amounts INITIALIZE ORDER-TOTALS REPLACING NUMERIC DATA BY ZERO. *> Keep STATUS and ITEM-COUNT unchanged

Best Practices

Knowledge Check

Test Your Understanding

Question 1: Default Behavior

What values does INITIALIZE set for numeric and alphanumeric fields?

Answer: INITIALIZE sets numeric fields to zero and alphanumeric fields to spaces. It automatically determines the appropriate default based on the data type.

Question 2: REPLACING Clause

How can you customize the values set by INITIALIZE?

Answer: Use the REPLACING clause to specify custom values for different data types: REPLACING NUMERIC DATA BY value or REPLACING ALPHANUMERIC DATA BY value.

Related Pages