MainframeMaster

COBOL Tutorial

COBOL INSPECT Statement

The INSPECT statement represents a sophisticated character-level analysis and manipulation mechanism within COBOL programming environments, providing comprehensive string processing capabilities that enable precise character counting, selective replacement operations, and advanced text transformation. This statement embodies the principles of flexible data manipulation by supporting pattern matching, character conversion, and conditional processing while maintaining data integrity, ensuring efficient string operations, and facilitating robust text processing across enterprise applications requiring sophisticated data validation, format standardization, and comprehensive character-level operations with optimal performance and reliable execution characteristics.

INSPECT Statement Syntax

Complete INSPECT 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
*> INSPECT TALLYING - Count character occurrences INSPECT identifier-1 TALLYING { counter-1 FOR { ALL | LEADING | CHARACTERS } literal-1 } [BEFORE|AFTER] INITIAL literal-2 *> INSPECT REPLACING - Replace characters/strings INSPECT identifier-1 REPLACING { ALL | LEADING | FIRST } literal-1 BY literal-2 [BEFORE|AFTER] INITIAL literal-3 *> INSPECT CONVERTING - Character translation INSPECT identifier-1 CONVERTING literal-1 TO literal-2 [BEFORE|AFTER] INITIAL literal-3 *> Combined operations INSPECT identifier-1 TALLYING counter-1 FOR ALL literal-1 REPLACING ALL literal-2 BY literal-3 *> Basic examples 01 WS-TEXT-FIELD PIC X(50) VALUE "Hello World 123". 01 WS-COUNTER PIC 9(3) VALUE 0. PROCEDURE DIVISION. *> Count all 'l' characters INSPECT WS-TEXT-FIELD TALLYING WS-COUNTER FOR ALL "l" *> Result: WS-COUNTER = 3 *> Replace all spaces with dashes INSPECT WS-TEXT-FIELD REPLACING ALL " " BY "-" *> Result: "Hello-World-123" *> Convert lowercase to uppercase INSPECT WS-TEXT-FIELD CONVERTING "abcdefghijklmnopqrstuvwxyz" TO "ABCDEFGHIJKLMNOPQRSTUVWXYZ" *> Result: "HELLO-WORLD-123" *> Count digits MOVE 0 TO WS-COUNTER INSPECT WS-TEXT-FIELD TALLYING WS-COUNTER FOR ALL "0123456789" *> Result: WS-COUNTER = 3
Character Analysis
String Manipulation
Text Processing

Comprehensive INSPECT 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
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
IDENTIFICATION DIVISION. PROGRAM-ID. INSPECT-DEMONSTRATION. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-TEST-DATA. 05 WS-CUSTOMER-NAME PIC X(30) VALUE "John P. Smith Jr.". 05 WS-PHONE-NUMBER PIC X(15) VALUE "(555) 123-4567". 05 WS-EMAIL-ADDRESS PIC X(50) VALUE "john.smith@company.com". 05 WS-PRODUCT-CODE PIC X(12) VALUE "ABC-123-XYZ". 05 WS-DESCRIPTION PIC X(100) VALUE "High-Quality Product with Multiple Features". 01 WS-VALIDATION-DATA. 05 WS-CREDIT-CARD PIC X(20) VALUE "1234-5678-9012-3456". 05 WS-SSN PIC X(11) VALUE "123-45-6789". 05 WS-ZIP-CODE PIC X(10) VALUE "12345-6789". 05 WS-INPUT-DATA PIC X(100). 01 WS-COUNTERS. 05 WS-CHAR-COUNT PIC 9(4) VALUE 0. 05 WS-DIGIT-COUNT PIC 9(3) VALUE 0. 05 WS-ALPHA-COUNT PIC 9(3) VALUE 0. 05 WS-SPACE-COUNT PIC 9(3) VALUE 0. 05 WS-SPECIAL-COUNT PIC 9(3) VALUE 0. 05 WS-DASH-COUNT PIC 9(2) VALUE 0. 05 WS-DOT-COUNT PIC 9(2) VALUE 0. 01 WS-FORMATTING-WORK. 05 WS-FORMATTED-PHONE PIC X(15). 05 WS-FORMATTED-SSN PIC X(11). 05 WS-CLEAN-DATA PIC X(100). 05 WS-UPPERCASE-DATA PIC X(100). 05 WS-LOWERCASE-DATA PIC X(100). 01 WS-VALIDATION-RESULTS. 05 WS-VALID-EMAIL PIC X VALUE 'N'. 88 EMAIL-VALID VALUE 'Y'. 88 EMAIL-INVALID VALUE 'N'. 05 WS-VALID-PHONE PIC X VALUE 'N'. 88 PHONE-VALID VALUE 'Y'. 88 PHONE-INVALID VALUE 'N'. 05 WS-VALID-CARD PIC X VALUE 'N'. 88 CARD-VALID VALUE 'Y'. 88 CARD-INVALID VALUE 'N'. 01 WS-CONVERSION-TABLES. 05 WS-LOWERCASE-CHARS PIC X(26) VALUE "abcdefghijklmnopqrstuvwxyz". 05 WS-UPPERCASE-CHARS PIC X(26) VALUE "ABCDEFGHIJKLMNOPQRSTUVWXYZ". 05 WS-DIGITS PIC X(10) VALUE "0123456789". 05 WS-SPECIAL-CHARS PIC X(20) VALUE "!@#$%^&*()_+-=[]{}|;:,.<>?". PROCEDURE DIVISION. MAIN-PROCESSING. PERFORM DEMONSTRATE-TALLYING PERFORM DEMONSTRATE-REPLACING PERFORM DEMONSTRATE-CONVERTING PERFORM DEMONSTRATE-COMBINED-OPERATIONS PERFORM DEMONSTRATE-DATA-VALIDATION PERFORM DEMONSTRATE-DATA-FORMATTING PERFORM DEMONSTRATE-ADVANCED-TECHNIQUES STOP RUN. DEMONSTRATE-TALLYING. DISPLAY "=== INSPECT TALLYING DEMONSTRATIONS ===" *> Count specific characters DISPLAY "Original customer name: '" WS-CUSTOMER-NAME "'" MOVE 0 TO WS-SPACE-COUNT INSPECT WS-CUSTOMER-NAME TALLYING WS-SPACE-COUNT FOR ALL " " DISPLAY "Number of spaces: " WS-SPACE-COUNT MOVE 0 TO WS-DOT-COUNT INSPECT WS-CUSTOMER-NAME TALLYING WS-DOT-COUNT FOR ALL "." DISPLAY "Number of periods: " WS-DOT-COUNT *> Count leading characters MOVE 0 TO WS-CHAR-COUNT INSPECT WS-CUSTOMER-NAME TALLYING WS-CHAR-COUNT FOR LEADING "J" DISPLAY "Leading 'J' characters: " WS-CHAR-COUNT *> Count characters before a delimiter MOVE 0 TO WS-CHAR-COUNT INSPECT WS-CUSTOMER-NAME TALLYING WS-CHAR-COUNT FOR ALL "o" BEFORE INITIAL " " DISPLAY "Letter 'o' before first space: " WS-CHAR-COUNT *> Count total characters (non-space) MOVE 0 TO WS-CHAR-COUNT INSPECT WS-CUSTOMER-NAME TALLYING WS-CHAR-COUNT FOR CHARACTERS DISPLAY "Total character positions: " WS-CHAR-COUNT DISPLAY SPACES. DEMONSTRATE-REPLACING. DISPLAY "=== INSPECT REPLACING DEMONSTRATIONS ===" *> Phone number formatting MOVE WS-PHONE-NUMBER TO WS-FORMATTED-PHONE DISPLAY "Original phone: '" WS-FORMATTED-PHONE "'" *> Remove parentheses and spaces INSPECT WS-FORMATTED-PHONE REPLACING ALL "(" BY SPACES INSPECT WS-FORMATTED-PHONE REPLACING ALL ")" BY SPACES INSPECT WS-FORMATTED-PHONE REPLACING ALL " " BY SPACES DISPLAY "After removing brackets: '" WS-FORMATTED-PHONE "'" *> Replace dashes with dots INSPECT WS-FORMATTED-PHONE REPLACING ALL "-" BY "." DISPLAY "With dots instead of dashes: '" WS-FORMATTED-PHONE "'" *> Replace first occurrence only MOVE WS-PRODUCT-CODE TO WS-CLEAN-DATA DISPLAY "Original product code: '" WS-CLEAN-DATA "'" INSPECT WS-CLEAN-DATA REPLACING FIRST "-" BY "_" DISPLAY "After replacing first dash: '" WS-CLEAN-DATA "'" *> Replace all occurrences MOVE WS-PRODUCT-CODE TO WS-CLEAN-DATA INSPECT WS-CLEAN-DATA REPLACING ALL "-" BY "_" DISPLAY "After replacing all dashes: '" WS-CLEAN-DATA "'" *> Conditional replacement (before initial character) MOVE WS-EMAIL-ADDRESS TO WS-CLEAN-DATA DISPLAY "Original email: '" WS-CLEAN-DATA "'" INSPECT WS-CLEAN-DATA REPLACING ALL "." BY "_" BEFORE INITIAL "@" DISPLAY "Dots to underscores before @: '" WS-CLEAN-DATA "'" DISPLAY SPACES. DEMONSTRATE-CONVERTING. DISPLAY "=== INSPECT CONVERTING DEMONSTRATIONS ===" *> Convert to uppercase MOVE WS-CUSTOMER-NAME TO WS-UPPERCASE-DATA DISPLAY "Original: '" WS-UPPERCASE-DATA "'" INSPECT WS-UPPERCASE-DATA CONVERTING WS-LOWERCASE-CHARS TO WS-UPPERCASE-CHARS DISPLAY "Uppercase: '" WS-UPPERCASE-DATA "'" *> Convert to lowercase MOVE WS-DESCRIPTION TO WS-LOWERCASE-DATA DISPLAY "Original description: '" WS-DESCRIPTION "'" INSPECT WS-LOWERCASE-DATA CONVERTING WS-UPPERCASE-CHARS TO WS-LOWERCASE-CHARS DISPLAY "Lowercase: '" WS-LOWERCASE-DATA "'" *> Character substitution with custom table MOVE "HELLO WORLD 123" TO WS-CLEAN-DATA DISPLAY "Before substitution: '" WS-CLEAN-DATA "'" INSPECT WS-CLEAN-DATA CONVERTING "HELO WRD123" TO "helo_wrd456" DISPLAY "After substitution: '" WS-CLEAN-DATA "'" *> Convert special characters MOVE "Price: $19.99 (Tax: 5%)" TO WS-CLEAN-DATA DISPLAY "Before symbol conversion: '" WS-CLEAN-DATA "'" INSPECT WS-CLEAN-DATA CONVERTING "$()%" TO "SDPX" DISPLAY "After symbol conversion: '" WS-CLEAN-DATA "'" DISPLAY SPACES. DEMONSTRATE-COMBINED-OPERATIONS. DISPLAY "=== COMBINED INSPECT OPERATIONS ===" *> Count and replace in one operation MOVE WS-PHONE-NUMBER TO WS-FORMATTED-PHONE MOVE 0 TO WS-DASH-COUNT DISPLAY "Phone before processing: '" WS-FORMATTED-PHONE "'" INSPECT WS-FORMATTED-PHONE TALLYING WS-DASH-COUNT FOR ALL "-" REPLACING ALL "-" BY "." DISPLAY "Dashes found: " WS-DASH-COUNT DISPLAY "Phone after processing: '" WS-FORMATTED-PHONE "'" *> Multiple tallying operations MOVE WS-DESCRIPTION TO WS-CLEAN-DATA MOVE 0 TO WS-ALPHA-COUNT MOVE 0 TO WS-SPACE-COUNT MOVE 0 TO WS-DASH-COUNT INSPECT WS-CLEAN-DATA TALLYING WS-ALPHA-COUNT FOR ALL WS-UPPERCASE-CHARS TALLYING WS-SPACE-COUNT FOR ALL " " TALLYING WS-DASH-COUNT FOR ALL "-" DISPLAY "Analysis of description:" DISPLAY " Uppercase letters: " WS-ALPHA-COUNT DISPLAY " Spaces: " WS-SPACE-COUNT DISPLAY " Dashes: " WS-DASH-COUNT DISPLAY SPACES. DEMONSTRATE-DATA-VALIDATION. DISPLAY "=== DATA VALIDATION WITH INSPECT ===" PERFORM VALIDATE-EMAIL-FORMAT PERFORM VALIDATE-PHONE-FORMAT PERFORM VALIDATE-CREDIT-CARD-FORMAT DISPLAY "Validation Results:" IF EMAIL-VALID DISPLAY " Email: VALID" ELSE DISPLAY " Email: INVALID" END-IF IF PHONE-VALID DISPLAY " Phone: VALID" ELSE DISPLAY " Phone: INVALID" END-IF IF CARD-VALID DISPLAY " Credit Card: VALID" ELSE DISPLAY " Credit Card: INVALID" END-IF DISPLAY SPACES. VALIDATE-EMAIL-FORMAT. *> Check for @ symbol MOVE 0 TO WS-CHAR-COUNT INSPECT WS-EMAIL-ADDRESS TALLYING WS-CHAR-COUNT FOR ALL "@" IF WS-CHAR-COUNT = 1 *> Check for . after @ MOVE 0 TO WS-DOT-COUNT INSPECT WS-EMAIL-ADDRESS TALLYING WS-DOT-COUNT FOR ALL "." AFTER INITIAL "@" IF WS-DOT-COUNT >= 1 SET EMAIL-VALID TO TRUE ELSE SET EMAIL-INVALID TO TRUE END-IF ELSE SET EMAIL-INVALID TO TRUE END-IF. VALIDATE-PHONE-FORMAT. *> Count digits in phone number MOVE 0 TO WS-DIGIT-COUNT INSPECT WS-PHONE-NUMBER TALLYING WS-DIGIT-COUNT FOR ALL WS-DIGITS IF WS-DIGIT-COUNT = 10 SET PHONE-VALID TO TRUE ELSE SET PHONE-INVALID TO TRUE END-IF. VALIDATE-CREDIT-CARD-FORMAT. *> Count digits (should be 16) MOVE 0 TO WS-DIGIT-COUNT INSPECT WS-CREDIT-CARD TALLYING WS-DIGIT-COUNT FOR ALL WS-DIGITS *> Count dashes (should be 3) MOVE 0 TO WS-DASH-COUNT INSPECT WS-CREDIT-CARD TALLYING WS-DASH-COUNT FOR ALL "-" IF WS-DIGIT-COUNT = 16 AND WS-DASH-COUNT = 3 SET CARD-VALID TO TRUE ELSE SET CARD-INVALID TO TRUE END-IF. DEMONSTRATE-DATA-FORMATTING. DISPLAY "=== DATA FORMATTING WITH INSPECT ===" PERFORM FORMAT-SSN PERFORM FORMAT-PHONE-NUMBER PERFORM CLEAN-INPUT-DATA DISPLAY "Formatted SSN: '" WS-FORMATTED-SSN "'" DISPLAY "Formatted Phone: '" WS-FORMATTED-PHONE "'" DISPLAY "Cleaned Data: '" WS-CLEAN-DATA "'" DISPLAY SPACES. FORMAT-SSN. *> Remove existing formatting MOVE WS-SSN TO WS-FORMATTED-SSN INSPECT WS-FORMATTED-SSN REPLACING ALL "-" BY SPACES *> Add standard formatting (XXX-XX-XXXX) INSPECT WS-FORMATTED-SSN REPLACING FIRST SPACES BY "-" AFTER INITIAL " " INSPECT WS-FORMATTED-SSN REPLACING FIRST SPACES BY "-" AFTER INITIAL " ". FORMAT-PHONE-NUMBER. *> Start with clean phone number MOVE "(555) 123-4567" TO WS-FORMATTED-PHONE *> Convert to XXX.XXX.XXXX format INSPECT WS-FORMATTED-PHONE REPLACING ALL "(" BY SPACES INSPECT WS-FORMATTED-PHONE REPLACING ALL ")" BY SPACES INSPECT WS-FORMATTED-PHONE REPLACING ALL " " BY SPACES INSPECT WS-FORMATTED-PHONE REPLACING ALL "-" BY "." *> Clean up extra spaces INSPECT WS-FORMATTED-PHONE REPLACING ALL " " BY " ". CLEAN-INPUT-DATA. *> Simulate user input with extra spaces and mixed case MOVE " Hello World 123 " TO WS-CLEAN-DATA *> Remove leading spaces INSPECT WS-CLEAN-DATA REPLACING LEADING " " BY LOW-VALUES *> Replace multiple spaces with single space INSPECT WS-CLEAN-DATA REPLACING ALL " " BY " " INSPECT WS-CLEAN-DATA REPLACING ALL " " BY " " *> Convert to standard case INSPECT WS-CLEAN-DATA CONVERTING WS-LOWERCASE-CHARS TO WS-UPPERCASE-CHARS. DEMONSTRATE-ADVANCED-TECHNIQUES. DISPLAY "=== ADVANCED INSPECT TECHNIQUES ===" PERFORM ADVANCED-STRING-ANALYSIS PERFORM CONDITIONAL-CHARACTER-PROCESSING PERFORM PATTERN-MATCHING-SIMULATION DISPLAY "Advanced processing completed" DISPLAY SPACES. ADVANCED-STRING-ANALYSIS. DISPLAY "Advanced String Analysis:" MOVE "Product-Code: ABC-123-XYZ (Version 2.1)" TO WS-INPUT-DATA DISPLAY " Analyzing: '" WS-INPUT-DATA "'" *> Count different character types MOVE 0 TO WS-ALPHA-COUNT MOVE 0 TO WS-DIGIT-COUNT MOVE 0 TO WS-SPECIAL-COUNT INSPECT WS-INPUT-DATA TALLYING WS-ALPHA-COUNT FOR ALL WS-UPPERCASE-CHARS INSPECT WS-INPUT-DATA TALLYING WS-DIGIT-COUNT FOR ALL WS-DIGITS INSPECT WS-INPUT-DATA TALLYING WS-SPECIAL-COUNT FOR ALL ".-():/" DISPLAY " Uppercase letters: " WS-ALPHA-COUNT DISPLAY " Digits: " WS-DIGIT-COUNT DISPLAY " Special characters: " WS-SPECIAL-COUNT. CONDITIONAL-CHARACTER-PROCESSING. DISPLAY "Conditional Character Processing:" MOVE "First-Part|Second-Part|Third-Part" TO WS-INPUT-DATA DISPLAY " Before: '" WS-INPUT-DATA "'" *> Replace characters only before first delimiter INSPECT WS-INPUT-DATA REPLACING ALL "-" BY "_" BEFORE INITIAL "|" DISPLAY " After conditional replace: '" WS-INPUT-DATA "'" *> Count characters after specific point MOVE 0 TO WS-CHAR-COUNT INSPECT WS-INPUT-DATA TALLYING WS-CHAR-COUNT FOR ALL "a" AFTER INITIAL "|" DISPLAY " Letter 'a' after first |: " WS-CHAR-COUNT. PATTERN-MATCHING-SIMULATION. DISPLAY "Pattern Matching Simulation:" *> Simulate finding patterns using INSPECT MOVE "Error-Code-404-Not-Found" TO WS-INPUT-DATA DISPLAY " Checking: '" WS-INPUT-DATA "'" *> Check for error pattern MOVE 0 TO WS-CHAR-COUNT INSPECT WS-INPUT-DATA TALLYING WS-CHAR-COUNT FOR ALL "Error" IF WS-CHAR-COUNT > 0 DISPLAY " Pattern 'Error' found" *> Extract error code (simulate) MOVE 0 TO WS-DIGIT-COUNT INSPECT WS-INPUT-DATA TALLYING WS-DIGIT-COUNT FOR ALL WS-DIGITS AFTER INITIAL "Code-" DISPLAY " Digits after 'Code-': " WS-DIGIT-COUNT ELSE DISPLAY " No error pattern found" END-IF. *> Utility paragraphs for advanced processing DATA-SANITIZATION. DISPLAY "=== DATA SANITIZATION ===" *> Remove potentially harmful characters MOVE "UserInput" TO WS-INPUT-DATA DISPLAY "Before sanitization: " WS-INPUT-DATA INSPECT WS-INPUT-DATA REPLACING ALL "<" BY "[" INSPECT WS-INPUT-DATA REPLACING ALL ">" BY "]" INSPECT WS-INPUT-DATA REPLACING ALL "'" BY "" INSPECT WS-INPUT-DATA REPLACING ALL '"' BY "" DISPLAY "After sanitization: " WS-INPUT-DATA. PERFORMANCE-OPTIMIZATION. DISPLAY "=== PERFORMANCE OPTIMIZATION TIPS ===" *> Single INSPECT with multiple operations is more efficient MOVE "Sample Data 123 with Various Characters!" TO WS-INPUT-DATA *> Efficient: Combined operations MOVE 0 TO WS-ALPHA-COUNT MOVE 0 TO WS-DIGIT-COUNT MOVE 0 TO WS-SPACE-COUNT INSPECT WS-INPUT-DATA TALLYING WS-ALPHA-COUNT FOR ALL WS-UPPERCASE-CHARS TALLYING WS-DIGIT-COUNT FOR ALL WS-DIGITS TALLYING WS-SPACE-COUNT FOR ALL " " REPLACING ALL "!" BY "." DISPLAY "Combined operation results:" DISPLAY " Alpha: " WS-ALPHA-COUNT DISPLAY " Digits: " WS-DIGIT-COUNT DISPLAY " Spaces: " WS-SPACE-COUNT DISPLAY " Modified data: " WS-INPUT-DATA. ERROR-HANDLING-WITH-INSPECT. DISPLAY "=== ERROR HANDLING PATTERNS ===" *> Validate data before processing MOVE "Test Data" TO WS-INPUT-DATA IF WS-INPUT-DATA NOT = SPACES PERFORM PROCESS-VALID-DATA ELSE DISPLAY "Error: Empty input data" END-IF. PROCESS-VALID-DATA. *> Safe processing with validation MOVE 0 TO WS-CHAR-COUNT INSPECT WS-INPUT-DATA TALLYING WS-CHAR-COUNT FOR CHARACTERS IF WS-CHAR-COUNT > 0 DISPLAY "Processing " WS-CHAR-COUNT " characters" INSPECT WS-INPUT-DATA CONVERTING WS-LOWERCASE-CHARS TO WS-UPPERCASE-CHARS DISPLAY "Result: " WS-INPUT-DATA ELSE DISPLAY "No valid characters to process" END-IF.

INSPECT Operation Types

TALLYING
  • • ALL: Count all occurrences
  • • LEADING: Count leading characters
  • • CHARACTERS: Count total positions
  • • BEFORE/AFTER INITIAL: Conditional counting
REPLACING
  • • ALL: Replace all occurrences
  • • LEADING: Replace leading characters
  • • FIRST: Replace first occurrence only
  • • BEFORE/AFTER INITIAL: Conditional replacement
CONVERTING
  • • Character-to-character mapping
  • • Case conversion (upper/lower)
  • • Symbol substitution
  • • Custom translation tables

Interactive Tutorial

Hands-On Exercise: Text Processing
Practice using INSPECT for various string manipulation tasks

Exercise 1: Data Validation

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
01 WS-EMAIL PIC X(50). 01 WS-AT-COUNT PIC 9(2). 01 WS-DOT-COUNT PIC 9(2). PROCEDURE DIVISION. MOVE "user@domain.com" TO WS-EMAIL *> Count @ symbols (should be exactly 1) INSPECT WS-EMAIL TALLYING WS-AT-COUNT FOR ALL "@" *> Count dots after @ (should be at least 1) INSPECT WS-EMAIL TALLYING WS-DOT-COUNT FOR ALL "." AFTER INITIAL "@" IF WS-AT-COUNT = 1 AND WS-DOT-COUNT >= 1 DISPLAY "Valid email format" ELSE DISPLAY "Invalid email format" END-IF.

Exercise 2: Data Cleaning

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
01 WS-INPUT-DATA PIC X(100). 01 WS-CLEAN-DATA PIC X(100). PROCEDURE DIVISION. MOVE " Hello World " TO WS-INPUT-DATA MOVE WS-INPUT-DATA TO WS-CLEAN-DATA *> Remove leading spaces INSPECT WS-CLEAN-DATA REPLACING LEADING " " BY LOW-VALUES *> Replace multiple spaces with single space INSPECT WS-CLEAN-DATA REPLACING ALL " " BY " " *> Convert to uppercase INSPECT WS-CLEAN-DATA CONVERTING "abcdefghijklmnopqrstuvwxyz" TO "ABCDEFGHIJKLMNOPQRSTUVWXYZ".

Best Practices

Knowledge Check

Test Your Understanding

Question 1: Operation Types

What are the three main types of INSPECT operations?

Answer: The three main INSPECT operations are TALLYING (counting character occurrences), REPLACING (substituting characters or strings), and CONVERTING (character-to-character translation using conversion tables).

Question 2: BEFORE/AFTER INITIAL

How do BEFORE and AFTER INITIAL clauses affect INSPECT operations?

Answer: BEFORE INITIAL limits the operation to characters appearing before the first occurrence of a specified character, while AFTER INITIAL limits the operation to characters appearing after the first occurrence of a specified character.

Question 3: CONVERTING vs REPLACING

When should you use CONVERTING instead of REPLACING?

Answer: Use CONVERTING when you need to translate multiple characters according to a mapping table (like case conversion). Use REPLACING when you need to substitute specific character strings or when the replacement doesn't follow a simple one-to-one character mapping.

Related Pages