MainframeMaster

COBOL Tutorial

COBOL END-UNSTRING Statement

The END-UNSTRING statement represents a fundamental component of string parsing and data extraction operations in COBOL, serving as an explicit scope terminator that clearly defines the boundaries of UNSTRING statement blocks. This statement embodies modern text processing principles by providing unambiguous termination points for string decomposition operations, enabling sophisticated parsing algorithms for delimited data, and supporting the development of robust data processing applications that require precise control over string parsing operations and field extraction procedures.

In contemporary enterprise COBOL development, END-UNSTRING plays a vital role in creating sophisticated data parsing systems that must handle various delimiter patterns, field validation requirements, and complex data transformation scenarios. By providing explicit termination for UNSTRING blocks, this statement enables developers to implement comprehensive string parsing logic while maintaining code clarity and ensuring that decomposition operations are properly bounded and controlled within the application's data processing flow.

Understanding END-UNSTRING Architecture

The END-UNSTRING statement implements sophisticated scope management for string parsing operations. This architecture addresses the complexity inherent in modern data processing scenarios where UNSTRING statements must manage delimiter recognition, field boundary detection, overflow conditions, and data validation requirements. The explicit termination provided by END-UNSTRING ensures that all these operations are properly contained within defined boundaries.

The architectural design of END-UNSTRING reflects the evolution of COBOL toward robust text processing paradigms that emphasize data integrity, proper error handling, and maintainable code organization. When used with conditional phrases like OVERFLOW and NOT ON OVERFLOW, END-UNSTRING creates a comprehensive framework for handling both successful parsing operations and various error conditions that may arise during string decomposition processes.

END-UNSTRING also plays a crucial role in data validation and field management. Modern COBOL implementations can perform more sophisticated analysis when parsing boundaries are explicitly defined, leading to better field validation, more efficient delimiter processing, and improved data integrity management for complex string parsing scenarios.

Basic END-UNSTRING 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
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
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
IDENTIFICATION DIVISION. PROGRAM-ID. END-UNSTRING-DEMO. DATA DIVISION. WORKING-STORAGE SECTION. 01 STRING-PARSING-AREAS. 05 INPUT-DATA-RECORDS. 10 CSV-RECORD PIC X(200) VALUE 'JOHN,SMITH,ENGINEER,75000,IT,2022-01-15'. 10 PIPE-DELIMITED PIC X(150) VALUE 'JANE|DOE|MANAGER|85000|HR|2021-05-20'. 10 MIXED-DELIMITED PIC X(180) VALUE 'BOB;JOHNSON,ANALYST:65000|FINANCE;2023-03-10'. 10 FIXED-WIDTH-DATA PIC X(120) VALUE 'ALICE BROWN DIRECTOR 95000SALES '. 05 PARSED-OUTPUT-FIELDS. 10 EMPLOYEE-FIRST-NAME PIC X(20). 10 EMPLOYEE-LAST-NAME PIC X(25). 10 EMPLOYEE-TITLE PIC X(20). 10 EMPLOYEE-SALARY PIC 9(7). 10 EMPLOYEE-DEPARTMENT PIC X(15). 10 EMPLOYEE-HIRE-DATE PIC X(10). 01 PARSING-CONTROLS. 05 PARSING-STATISTICS. 10 FIELDS-EXTRACTED PIC 9(3) VALUE 0. 10 PARSING-OPERATIONS PIC 9(5) VALUE 0. 10 SUCCESSFUL-PARSES PIC 9(5) VALUE 0. 10 OVERFLOW-ERRORS PIC 9(3) VALUE 0. 10 DELIMITER-ERRORS PIC 9(3) VALUE 0. 05 FIELD-COUNTERS. 10 FIELD-COUNT PIC 9(2) VALUE 0. 10 EXPECTED-FIELDS PIC 9(2) VALUE 6. 10 ACTUAL-FIELDS PIC 9(2) VALUE 0. 05 PARSING-FLAGS. 10 PARSING-SUCCESS PIC X VALUE 'N'. 88 PARSE-OK VALUE 'Y'. 88 PARSE-FAILED VALUE 'N'. 01 ADVANCED-PARSING-CONTROLS. 05 DELIMITER-MANAGEMENT. 10 PRIMARY-DELIMITER PIC X VALUE ','. 10 SECONDARY-DELIMITER PIC X VALUE '|'. 10 TERTIARY-DELIMITER PIC X VALUE ';'. 10 SPACE-DELIMITER PIC X VALUE ' '. 10 COLON-DELIMITER PIC X VALUE ':'. 05 FIELD-VALIDATION. 10 MIN-FIELD-LENGTH PIC 9(2) VALUE 1. 10 MAX-FIELD-LENGTH PIC 9(2) VALUE 50. 10 NUMERIC-VALIDATION PIC X VALUE 'N'. 88 VALIDATE-NUMERIC VALUE 'Y'. 88 SKIP-VALIDATION VALUE 'N'. 01 ERROR-HANDLING-SYSTEM. 05 ERROR-TRACKING. 10 ERROR-COUNT PIC 9(3) VALUE 0. 10 LAST-ERROR-TYPE PIC X(10). 10 ERROR-FIELD-NUMBER PIC 9(2) VALUE 0. 10 ERROR-DESCRIPTION PIC X(80). PROCEDURE DIVISION. MAIN-PROCESSING. PERFORM INITIALIZE-PARSING-SYSTEM PERFORM DEMONSTRATE-BASIC-CSV-PARSING PERFORM DEMONSTRATE-PIPE-DELIMITED-PARSING PERFORM DEMONSTRATE-MIXED-DELIMITER-PARSING PERFORM DEMONSTRATE-ADVANCED-PARSING-TECHNIQUES PERFORM DEMONSTRATE-ERROR-HANDLING-SCENARIOS PERFORM DISPLAY-PARSING-STATISTICS STOP RUN. INITIALIZE-PARSING-SYSTEM. DISPLAY 'Initializing string parsing system...' MOVE 0 TO FIELDS-EXTRACTED MOVE 0 TO PARSING-OPERATIONS MOVE 0 TO SUCCESSFUL-PARSES MOVE 0 TO OVERFLOW-ERRORS MOVE 0 TO ERROR-COUNT DISPLAY 'Parsing system initialized successfully'. DEMONSTRATE-BASIC-CSV-PARSING. DISPLAY 'Demonstrating basic CSV parsing...' MOVE 0 TO FIELD-COUNT SET PARSE-FAILED TO TRUE UNSTRING CSV-RECORD DELIMITED BY PRIMARY-DELIMITER INTO EMPLOYEE-FIRST-NAME EMPLOYEE-LAST-NAME EMPLOYEE-TITLE EMPLOYEE-SALARY EMPLOYEE-DEPARTMENT EMPLOYEE-HIRE-DATE WITH POINTER FIELD-COUNT TALLYING IN ACTUAL-FIELDS ON OVERFLOW DISPLAY 'CSV parsing overflow occurred' MOVE 'OVERFLOW' TO LAST-ERROR-TYPE MOVE 'Too many fields in CSV record' TO ERROR-DESCRIPTION ADD 1 TO OVERFLOW-ERRORS ADD 1 TO ERROR-COUNT NOT ON OVERFLOW DISPLAY 'CSV parsing successful' DISPLAY 'Fields extracted: ' ACTUAL-FIELDS DISPLAY 'Employee: ' EMPLOYEE-FIRST-NAME ' ' EMPLOYEE-LAST-NAME DISPLAY 'Title: ' EMPLOYEE-TITLE DISPLAY 'Salary: ' EMPLOYEE-SALARY DISPLAY 'Department: ' EMPLOYEE-DEPARTMENT DISPLAY 'Hire Date: ' EMPLOYEE-HIRE-DATE SET PARSE-OK TO TRUE ADD 1 TO SUCCESSFUL-PARSES ADD ACTUAL-FIELDS TO FIELDS-EXTRACTED END-UNSTRING ADD 1 TO PARSING-OPERATIONS PERFORM VALIDATE-PARSED-DATA. DEMONSTRATE-PIPE-DELIMITED-PARSING. DISPLAY 'Demonstrating pipe-delimited parsing...' PERFORM CLEAR-OUTPUT-FIELDS MOVE 0 TO FIELD-COUNT MOVE 0 TO ACTUAL-FIELDS SET PARSE-FAILED TO TRUE UNSTRING PIPE-DELIMITED DELIMITED BY SECONDARY-DELIMITER INTO EMPLOYEE-FIRST-NAME EMPLOYEE-LAST-NAME EMPLOYEE-TITLE EMPLOYEE-SALARY EMPLOYEE-DEPARTMENT EMPLOYEE-HIRE-DATE TALLYING IN ACTUAL-FIELDS ON OVERFLOW DISPLAY 'Pipe-delimited parsing overflow' MOVE 'OVERFLOW' TO LAST-ERROR-TYPE MOVE 'Field capacity exceeded in pipe parsing' TO ERROR-DESCRIPTION ADD 1 TO OVERFLOW-ERRORS ADD 1 TO ERROR-COUNT NOT ON OVERFLOW DISPLAY 'Pipe-delimited parsing successful' DISPLAY 'Fields parsed: ' ACTUAL-FIELDS DISPLAY 'Employee: ' EMPLOYEE-FIRST-NAME ' ' EMPLOYEE-LAST-NAME DISPLAY 'Title: ' EMPLOYEE-TITLE DISPLAY 'Salary: ' EMPLOYEE-SALARY DISPLAY 'Department: ' EMPLOYEE-DEPARTMENT DISPLAY 'Hire Date: ' EMPLOYEE-HIRE-DATE SET PARSE-OK TO TRUE ADD 1 TO SUCCESSFUL-PARSES ADD ACTUAL-FIELDS TO FIELDS-EXTRACTED END-UNSTRING ADD 1 TO PARSING-OPERATIONS PERFORM VALIDATE-PARSED-DATA. DEMONSTRATE-MIXED-DELIMITER-PARSING. DISPLAY 'Demonstrating mixed delimiter parsing...' PERFORM CLEAR-OUTPUT-FIELDS MOVE 0 TO FIELD-COUNT MOVE 0 TO ACTUAL-FIELDS SET PARSE-FAILED TO TRUE *> Parse with multiple delimiters UNSTRING MIXED-DELIMITED DELIMITED BY TERTIARY-DELIMITER OR PRIMARY-DELIMITER OR COLON-DELIMITER OR SECONDARY-DELIMITER INTO EMPLOYEE-FIRST-NAME EMPLOYEE-LAST-NAME EMPLOYEE-TITLE EMPLOYEE-SALARY EMPLOYEE-DEPARTMENT EMPLOYEE-HIRE-DATE TALLYING IN ACTUAL-FIELDS ON OVERFLOW DISPLAY 'Mixed delimiter parsing overflow' MOVE 'OVERFLOW' TO LAST-ERROR-TYPE MOVE 'Multiple delimiter parsing capacity exceeded' TO ERROR-DESCRIPTION ADD 1 TO OVERFLOW-ERRORS ADD 1 TO ERROR-COUNT NOT ON OVERFLOW DISPLAY 'Mixed delimiter parsing successful' DISPLAY 'Fields extracted: ' ACTUAL-FIELDS DISPLAY 'Employee: ' EMPLOYEE-FIRST-NAME ' ' EMPLOYEE-LAST-NAME DISPLAY 'Title: ' EMPLOYEE-TITLE DISPLAY 'Salary: ' EMPLOYEE-SALARY DISPLAY 'Department: ' EMPLOYEE-DEPARTMENT DISPLAY 'Hire Date: ' EMPLOYEE-HIRE-DATE SET PARSE-OK TO TRUE ADD 1 TO SUCCESSFUL-PARSES ADD ACTUAL-FIELDS TO FIELDS-EXTRACTED END-UNSTRING ADD 1 TO PARSING-OPERATIONS PERFORM VALIDATE-PARSED-DATA. DEMONSTRATE-ADVANCED-PARSING-TECHNIQUES. DISPLAY 'Demonstrating advanced parsing techniques...' PERFORM PARSE-WITH-LEADING-DELIMITER PERFORM PARSE-WITH-TRAILING-DELIMITER PERFORM PARSE-WITH-CONSECUTIVE-DELIMITERS PERFORM PARSE-WITH-QUOTED-FIELDS DISPLAY 'Advanced parsing techniques completed'. PARSE-WITH-LEADING-DELIMITER. DISPLAY 'Parsing with leading delimiter handling...' *> Simulate data with leading delimiter MOVE ',LEADING,DELIMITER,TEST,DATA,RECORD' TO CSV-RECORD PERFORM CLEAR-OUTPUT-FIELDS MOVE 0 TO ACTUAL-FIELDS UNSTRING CSV-RECORD DELIMITED BY PRIMARY-DELIMITER INTO EMPLOYEE-FIRST-NAME EMPLOYEE-LAST-NAME EMPLOYEE-TITLE EMPLOYEE-SALARY EMPLOYEE-DEPARTMENT EMPLOYEE-HIRE-DATE TALLYING IN ACTUAL-FIELDS ON OVERFLOW DISPLAY 'Leading delimiter parsing overflow' ADD 1 TO OVERFLOW-ERRORS NOT ON OVERFLOW DISPLAY 'Leading delimiter parsing successful' DISPLAY 'Fields found: ' ACTUAL-FIELDS DISPLAY 'First field (empty): "' EMPLOYEE-FIRST-NAME '"' DISPLAY 'Second field: "' EMPLOYEE-LAST-NAME '"' ADD 1 TO SUCCESSFUL-PARSES END-UNSTRING ADD 1 TO PARSING-OPERATIONS. PARSE-WITH-TRAILING-DELIMITER. DISPLAY 'Parsing with trailing delimiter handling...' *> Simulate data with trailing delimiter MOVE 'TRAILING,DELIMITER,TEST,DATA,RECORD,' TO CSV-RECORD PERFORM CLEAR-OUTPUT-FIELDS MOVE 0 TO ACTUAL-FIELDS UNSTRING CSV-RECORD DELIMITED BY PRIMARY-DELIMITER INTO EMPLOYEE-FIRST-NAME EMPLOYEE-LAST-NAME EMPLOYEE-TITLE EMPLOYEE-SALARY EMPLOYEE-DEPARTMENT EMPLOYEE-HIRE-DATE TALLYING IN ACTUAL-FIELDS ON OVERFLOW DISPLAY 'Trailing delimiter parsing overflow' ADD 1 TO OVERFLOW-ERRORS NOT ON OVERFLOW DISPLAY 'Trailing delimiter parsing successful' DISPLAY 'Fields found: ' ACTUAL-FIELDS DISPLAY 'First field: "' EMPLOYEE-FIRST-NAME '"' DISPLAY 'Last field: "' EMPLOYEE-HIRE-DATE '"' ADD 1 TO SUCCESSFUL-PARSES END-UNSTRING ADD 1 TO PARSING-OPERATIONS. PARSE-WITH-CONSECUTIVE-DELIMITERS. DISPLAY 'Parsing with consecutive delimiters...' *> Simulate data with consecutive delimiters MOVE 'FIELD1,,FIELD3,,,FIELD6' TO CSV-RECORD PERFORM CLEAR-OUTPUT-FIELDS MOVE 0 TO ACTUAL-FIELDS UNSTRING CSV-RECORD DELIMITED BY PRIMARY-DELIMITER INTO EMPLOYEE-FIRST-NAME EMPLOYEE-LAST-NAME EMPLOYEE-TITLE EMPLOYEE-SALARY EMPLOYEE-DEPARTMENT EMPLOYEE-HIRE-DATE TALLYING IN ACTUAL-FIELDS ON OVERFLOW DISPLAY 'Consecutive delimiter parsing overflow' ADD 1 TO OVERFLOW-ERRORS NOT ON OVERFLOW DISPLAY 'Consecutive delimiter parsing successful' DISPLAY 'Fields found: ' ACTUAL-FIELDS DISPLAY 'Field 1: "' EMPLOYEE-FIRST-NAME '"' DISPLAY 'Field 2 (empty): "' EMPLOYEE-LAST-NAME '"' DISPLAY 'Field 3: "' EMPLOYEE-TITLE '"' DISPLAY 'Fields 4-5 (empty): "' EMPLOYEE-SALARY '" "' EMPLOYEE-DEPARTMENT '"' DISPLAY 'Field 6: "' EMPLOYEE-HIRE-DATE '"' ADD 1 TO SUCCESSFUL-PARSES END-UNSTRING ADD 1 TO PARSING-OPERATIONS. PARSE-WITH-QUOTED-FIELDS. DISPLAY 'Parsing with quoted field simulation...' *> Simulate CSV with quoted fields (simplified handling) MOVE 'JOHN SMITH,SENIOR ENGINEER,75000,IT DEPARTMENT,2022-01-15' TO CSV-RECORD PERFORM CLEAR-OUTPUT-FIELDS MOVE 0 TO ACTUAL-FIELDS UNSTRING CSV-RECORD DELIMITED BY PRIMARY-DELIMITER INTO EMPLOYEE-FIRST-NAME EMPLOYEE-TITLE EMPLOYEE-SALARY EMPLOYEE-DEPARTMENT EMPLOYEE-HIRE-DATE TALLYING IN ACTUAL-FIELDS ON OVERFLOW DISPLAY 'Quoted field parsing overflow' ADD 1 TO OVERFLOW-ERRORS NOT ON OVERFLOW DISPLAY 'Quoted field parsing successful' DISPLAY 'Name: "' EMPLOYEE-FIRST-NAME '"' DISPLAY 'Title: "' EMPLOYEE-TITLE '"' DISPLAY 'Salary: "' EMPLOYEE-SALARY '"' DISPLAY 'Department: "' EMPLOYEE-DEPARTMENT '"' DISPLAY 'Hire Date: "' EMPLOYEE-HIRE-DATE '"' ADD 1 TO SUCCESSFUL-PARSES END-UNSTRING ADD 1 TO PARSING-OPERATIONS. DEMONSTRATE-ERROR-HANDLING-SCENARIOS. DISPLAY 'Demonstrating error handling scenarios...' PERFORM HANDLE-INSUFFICIENT-FIELDS PERFORM HANDLE-EXCESSIVE-FIELDS PERFORM HANDLE-MALFORMED-DATA DISPLAY 'Error handling demonstrations completed'. HANDLE-INSUFFICIENT-FIELDS. DISPLAY 'Handling insufficient fields scenario...' *> Simulate data with fewer fields than expected MOVE 'JOHN,SMITH,ENGINEER' TO CSV-RECORD PERFORM CLEAR-OUTPUT-FIELDS MOVE 0 TO ACTUAL-FIELDS UNSTRING CSV-RECORD DELIMITED BY PRIMARY-DELIMITER INTO EMPLOYEE-FIRST-NAME EMPLOYEE-LAST-NAME EMPLOYEE-TITLE EMPLOYEE-SALARY EMPLOYEE-DEPARTMENT EMPLOYEE-HIRE-DATE TALLYING IN ACTUAL-FIELDS ON OVERFLOW DISPLAY 'Insufficient fields - overflow should not occur' ADD 1 TO OVERFLOW-ERRORS NOT ON OVERFLOW DISPLAY 'Insufficient fields handled successfully' DISPLAY 'Fields found: ' ACTUAL-FIELDS DISPLAY 'Expected: ' EXPECTED-FIELDS IF ACTUAL-FIELDS < EXPECTED-FIELDS DISPLAY 'Warning: Missing fields detected' MOVE 'MISSING' TO LAST-ERROR-TYPE MOVE 'Insufficient fields in input data' TO ERROR-DESCRIPTION ADD 1 TO DELIMITER-ERRORS ADD 1 TO ERROR-COUNT END-IF ADD 1 TO SUCCESSFUL-PARSES END-UNSTRING ADD 1 TO PARSING-OPERATIONS. HANDLE-EXCESSIVE-FIELDS. DISPLAY 'Handling excessive fields scenario...' *> Simulate data with more fields than target variables MOVE 'A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T' TO CSV-RECORD PERFORM CLEAR-OUTPUT-FIELDS MOVE 0 TO ACTUAL-FIELDS UNSTRING CSV-RECORD DELIMITED BY PRIMARY-DELIMITER INTO EMPLOYEE-FIRST-NAME EMPLOYEE-LAST-NAME EMPLOYEE-TITLE EMPLOYEE-SALARY EMPLOYEE-DEPARTMENT EMPLOYEE-HIRE-DATE TALLYING IN ACTUAL-FIELDS ON OVERFLOW DISPLAY 'Excessive fields caused overflow' MOVE 'OVERFLOW' TO LAST-ERROR-TYPE MOVE 'Too many fields for available variables' TO ERROR-DESCRIPTION ADD 1 TO OVERFLOW-ERRORS ADD 1 TO ERROR-COUNT NOT ON OVERFLOW DISPLAY 'Excessive fields handled (partial parsing)' DISPLAY 'Fields processed: ' ACTUAL-FIELDS ADD 1 TO SUCCESSFUL-PARSES END-UNSTRING ADD 1 TO PARSING-OPERATIONS. HANDLE-MALFORMED-DATA. DISPLAY 'Handling malformed data scenario...' *> Simulate malformed data with unusual characters MOVE 'JOHN' TO CSV-RECORD STRING CSV-RECORD DELIMITED BY SIZE X'00' DELIMITED BY SIZE *> Null character 'SMITH,ENGINEER' DELIMITED BY SIZE INTO CSV-RECORD END-STRING PERFORM CLEAR-OUTPUT-FIELDS MOVE 0 TO ACTUAL-FIELDS UNSTRING CSV-RECORD DELIMITED BY PRIMARY-DELIMITER INTO EMPLOYEE-FIRST-NAME EMPLOYEE-LAST-NAME EMPLOYEE-TITLE EMPLOYEE-SALARY EMPLOYEE-DEPARTMENT EMPLOYEE-HIRE-DATE TALLYING IN ACTUAL-FIELDS ON OVERFLOW DISPLAY 'Malformed data caused overflow' ADD 1 TO OVERFLOW-ERRORS NOT ON OVERFLOW DISPLAY 'Malformed data processed' DISPLAY 'Fields extracted: ' ACTUAL-FIELDS DISPLAY 'First field: "' EMPLOYEE-FIRST-NAME '"' DISPLAY 'Second field: "' EMPLOYEE-LAST-NAME '"' ADD 1 TO SUCCESSFUL-PARSES END-UNSTRING ADD 1 TO PARSING-OPERATIONS. VALIDATE-PARSED-DATA. IF PARSE-OK PERFORM VALIDATE-FIELD-LENGTHS PERFORM VALIDATE-NUMERIC-FIELDS PERFORM VALIDATE-REQUIRED-FIELDS END-IF. VALIDATE-FIELD-LENGTHS. *> Validate field lengths are within acceptable ranges IF FUNCTION LENGTH(FUNCTION TRIM(EMPLOYEE-FIRST-NAME)) < MIN-FIELD-LENGTH DISPLAY 'Warning: First name too short' MOVE 'LENGTH' TO LAST-ERROR-TYPE ADD 1 TO ERROR-COUNT END-IF IF FUNCTION LENGTH(FUNCTION TRIM(EMPLOYEE-LAST-NAME)) < MIN-FIELD-LENGTH DISPLAY 'Warning: Last name too short' MOVE 'LENGTH' TO LAST-ERROR-TYPE ADD 1 TO ERROR-COUNT END-IF. VALIDATE-NUMERIC-FIELDS. *> Validate salary is numeric IF EMPLOYEE-SALARY IS NOT NUMERIC DISPLAY 'Warning: Salary is not numeric: ' EMPLOYEE-SALARY MOVE 'NUMERIC' TO LAST-ERROR-TYPE ADD 1 TO ERROR-COUNT END-IF. VALIDATE-REQUIRED-FIELDS. *> Check for required fields IF EMPLOYEE-FIRST-NAME = SPACES DISPLAY 'Error: First name is required' MOVE 'REQUIRED' TO LAST-ERROR-TYPE ADD 1 TO ERROR-COUNT END-IF IF EMPLOYEE-LAST-NAME = SPACES DISPLAY 'Error: Last name is required' MOVE 'REQUIRED' TO LAST-ERROR-TYPE ADD 1 TO ERROR-COUNT END-IF. CLEAR-OUTPUT-FIELDS. MOVE SPACES TO EMPLOYEE-FIRST-NAME MOVE SPACES TO EMPLOYEE-LAST-NAME MOVE SPACES TO EMPLOYEE-TITLE MOVE ZEROS TO EMPLOYEE-SALARY MOVE SPACES TO EMPLOYEE-DEPARTMENT MOVE SPACES TO EMPLOYEE-HIRE-DATE. DISPLAY-PARSING-STATISTICS. DISPLAY 'String Parsing Statistics:' DISPLAY '=========================' DISPLAY 'Total parsing operations: ' PARSING-OPERATIONS DISPLAY 'Successful parses: ' SUCCESSFUL-PARSES DISPLAY 'Total fields extracted: ' FIELDS-EXTRACTED DISPLAY 'Overflow errors: ' OVERFLOW-ERRORS DISPLAY 'Delimiter errors: ' DELIMITER-ERRORS DISPLAY 'Total errors: ' ERROR-COUNT DISPLAY '' DISPLAY 'Error Analysis:' DISPLAY 'Last error type: ' LAST-ERROR-TYPE DISPLAY 'Last error description: ' ERROR-DESCRIPTION DISPLAY '' DISPLAY 'Performance Metrics:' IF PARSING-OPERATIONS > 0 COMPUTE SUCCESSFUL-PARSES = (SUCCESSFUL-PARSES / PARSING-OPERATIONS) * 100 DISPLAY 'Success rate: ' SUCCESSFUL-PARSES '%' COMPUTE FIELDS-EXTRACTED = FIELDS-EXTRACTED / PARSING-OPERATIONS DISPLAY 'Average fields per operation: ' FIELDS-EXTRACTED END-IF.

Best Practices and FAQ

Best Practices
  • • Always use END-UNSTRING with overflow handling
  • • Validate parsed data immediately
  • • Use TALLYING to track field counts
  • • Handle multiple delimiter scenarios
  • • Implement proper error recovery
Common Mistakes
  • • Omitting END-UNSTRING in complex structures
  • • Not handling overflow conditions
  • • Poor delimiter management
  • • Missing field validation
  • • Inadequate error handling