MainframeMaster

COBOL Tutorial

COBOL LENGTH Function

The LENGTH function represents fundamental string analysis and data measurement capabilities within COBOL programming environments, providing sophisticated field size determination, character counting mechanisms, and comprehensive data validation support that enable precise string processing, dynamic field analysis, and automated data verification operations. This function embodies advanced text processing principles by supporting automated length calculation, enabling sophisticated data validation techniques, and facilitating comprehensive string manipulation requirements while maintaining data integrity, ensuring accurate size measurements, and supporting complex validation scenarios across enterprise applications requiring detailed string analysis, automated field verification, and reliable data processing with optimized performance characteristics and consistent measurement standards throughout diverse business processing environments and data validation requirements.

LENGTH Function Syntax

Basic LENGTH 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
*> Basic LENGTH function syntax FUNCTION LENGTH(data-item) FUNCTION LENGTH(literal-string) *> Examples with different data types 01 WS-NAME PIC X(30). 01 WS-ID-NUMBER PIC 9(8). 01 WS-AMOUNT PIC 9(7)V99. 01 WS-PACKED-FIELD PIC 9(6) COMP-3. 01 WS-LENGTH-RESULTS. 05 WS-NAME-LENGTH PIC 9(3). 05 WS-ID-LENGTH PIC 9(3). 05 WS-AMOUNT-LENGTH PIC 9(3). 05 WS-PACKED-LENGTH PIC 9(3). *> Calculate field lengths COMPUTE WS-NAME-LENGTH = FUNCTION LENGTH(WS-NAME) *> Result: 30 COMPUTE WS-ID-LENGTH = FUNCTION LENGTH(WS-ID-NUMBER) *> Result: 8 COMPUTE WS-AMOUNT-LENGTH = FUNCTION LENGTH(WS-AMOUNT) *> Result: 9 (includes decimal positions) COMPUTE WS-PACKED-LENGTH = FUNCTION LENGTH(WS-PACKED-FIELD) *> Result: 4 (storage length for COMP-3) *> LENGTH with literals COMPUTE WS-LITERAL-LENGTH = FUNCTION LENGTH("HELLO WORLD") *> Result: 11
Intrinsic Function
String Analysis
Data Validation

Comprehensive LENGTH 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
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
IDENTIFICATION DIVISION. PROGRAM-ID. LENGTH-FUNCTION-DEMO. DATA DIVISION. WORKING-STORAGE SECTION. *> Test data with various field types 01 WS-TEST-FIELDS. 05 WS-CUSTOMER-NAME PIC X(40) VALUE "JOHN SMITH". 05 WS-ACCOUNT-NUMBER PIC X(15) VALUE "123456789012345". 05 WS-PHONE-NUMBER PIC X(12) VALUE "555-123-4567". 05 WS-EMAIL-ADDRESS PIC X(50) VALUE "john.smith@company.com". 05 WS-PRODUCT-CODE PIC X(20) VALUE "PROD-ABC-12345". *> Numeric field examples 01 WS-NUMERIC-FIELDS. 05 WS-EMPLOYEE-ID PIC 9(6) VALUE 123456. 05 WS-SALARY PIC 9(7)V99 VALUE 75000.50. 05 WS-PERCENTAGE PIC 9(3)V99 VALUE 15.75. 05 WS-COUNTER PIC 9(4) VALUE 1234. *> Computational fields 01 WS-COMP-FIELDS. 05 WS-BINARY-NUMBER PIC 9(8) COMP VALUE 12345678. 05 WS-PACKED-DECIMAL PIC 9(6) COMP-3 VALUE 123456. 05 WS-COMP-1-FIELD COMP-1 VALUE 123.45. 05 WS-COMP-2-FIELD COMP-2 VALUE 12345.6789. *> Length calculation results 01 WS-LENGTH-RESULTS. 05 WS-NAME-LEN PIC 9(3) VALUE 0. 05 WS-ACCOUNT-LEN PIC 9(3) VALUE 0. 05 WS-PHONE-LEN PIC 9(3) VALUE 0. 05 WS-EMAIL-LEN PIC 9(3) VALUE 0. 05 WS-PRODUCT-LEN PIC 9(3) VALUE 0. 05 WS-EMP-ID-LEN PIC 9(3) VALUE 0. 05 WS-SALARY-LEN PIC 9(3) VALUE 0. 05 WS-BINARY-LEN PIC 9(3) VALUE 0. 05 WS-PACKED-LEN PIC 9(3) VALUE 0. *> Dynamic string processing 01 WS-DYNAMIC-STRINGS. 05 WS-INPUT-STRING PIC X(100). 05 WS-PROCESSED-STRING PIC X(100). 05 WS-INPUT-LENGTH PIC 9(3). 05 WS-ACTUAL-LENGTH PIC 9(3). *> Validation variables 01 WS-VALIDATION-VARS. 05 WS-MIN-LENGTH PIC 9(3). 05 WS-MAX-LENGTH PIC 9(3). 05 WS-VALIDATION-RESULT PIC X VALUE 'N'. *> String trimming support 01 WS-TRIMMING-VARS. 05 WS-TRIM-INDEX PIC 9(3). 05 WS-LAST-NON-SPACE PIC 9(3) VALUE 0. 05 WS-TRIMMED-LENGTH PIC 9(3) VALUE 0. *> Business validation examples 01 WS-BUSINESS-DATA. 05 WS-SSN PIC X(11) VALUE "123-45-6789". 05 WS-CREDIT-CARD PIC X(19) VALUE "1234-5678-9012-3456". 05 WS-ZIP-CODE PIC X(10) VALUE "12345-6789". 05 WS-PASSWORD PIC X(20) VALUE "MySecretPass123". PROCEDURE DIVISION. MAIN-PROCESSING. DISPLAY "=== COBOL LENGTH FUNCTION DEMONSTRATION ===" DISPLAY SPACES PERFORM DEMONSTRATE-BASIC-LENGTH PERFORM DEMONSTRATE-NUMERIC-LENGTH PERFORM DEMONSTRATE-COMPUTATIONAL-LENGTH PERFORM DEMONSTRATE-DYNAMIC-PROCESSING PERFORM DEMONSTRATE-DATA-VALIDATION PERFORM DEMONSTRATE-STRING-TRIMMING PERFORM DEMONSTRATE-BUSINESS-VALIDATION DISPLAY "=== LENGTH FUNCTION PROCESSING COMPLETE ===" STOP RUN. DEMONSTRATE-BASIC-LENGTH. DISPLAY "=== BASIC LENGTH FUNCTION EXAMPLES ===" DISPLAY SPACES *> Calculate lengths of alphanumeric fields COMPUTE WS-NAME-LEN = FUNCTION LENGTH(WS-CUSTOMER-NAME) DISPLAY "Customer name: '" WS-CUSTOMER-NAME "'" DISPLAY "Field length: " WS-NAME-LEN " characters" DISPLAY SPACES COMPUTE WS-ACCOUNT-LEN = FUNCTION LENGTH(WS-ACCOUNT-NUMBER) DISPLAY "Account number: '" WS-ACCOUNT-NUMBER "'" DISPLAY "Field length: " WS-ACCOUNT-LEN " characters" DISPLAY SPACES COMPUTE WS-PHONE-LEN = FUNCTION LENGTH(WS-PHONE-NUMBER) DISPLAY "Phone number: '" WS-PHONE-NUMBER "'" DISPLAY "Field length: " WS-PHONE-LEN " characters" DISPLAY SPACES COMPUTE WS-EMAIL-LEN = FUNCTION LENGTH(WS-EMAIL-ADDRESS) DISPLAY "Email address: '" WS-EMAIL-ADDRESS "'" DISPLAY "Field length: " WS-EMAIL-LEN " characters" DISPLAY SPACES COMPUTE WS-PRODUCT-LEN = FUNCTION LENGTH(WS-PRODUCT-CODE) DISPLAY "Product code: '" WS-PRODUCT-CODE "'" DISPLAY "Field length: " WS-PRODUCT-LEN " characters" DISPLAY SPACES *> Demonstrate LENGTH with literals DISPLAY "Literal string lengths:" DISPLAY " LENGTH('HELLO') = " FUNCTION LENGTH("HELLO") DISPLAY " LENGTH('WORLD!') = " FUNCTION LENGTH("WORLD!") DISPLAY " LENGTH('') = " FUNCTION LENGTH("") DISPLAY " LENGTH(' ') = " FUNCTION LENGTH(" ") DISPLAY SPACES. DEMONSTRATE-NUMERIC-LENGTH. DISPLAY "=== NUMERIC FIELD LENGTH EXAMPLES ===" DISPLAY SPACES COMPUTE WS-EMP-ID-LEN = FUNCTION LENGTH(WS-EMPLOYEE-ID) DISPLAY "Employee ID (PIC 9(6)): " WS-EMPLOYEE-ID DISPLAY "Field length: " WS-EMP-ID-LEN " positions" DISPLAY SPACES COMPUTE WS-SALARY-LEN = FUNCTION LENGTH(WS-SALARY) DISPLAY "Salary (PIC 9(7)V99): " WS-SALARY DISPLAY "Field length: " WS-SALARY-LEN " positions (includes V99)" DISPLAY SPACES DISPLAY "Percentage (PIC 9(3)V99): " WS-PERCENTAGE DISPLAY "Field length: " FUNCTION LENGTH(WS-PERCENTAGE) " positions" DISPLAY SPACES DISPLAY "Counter (PIC 9(4)): " WS-COUNTER DISPLAY "Field length: " FUNCTION LENGTH(WS-COUNTER) " positions" DISPLAY SPACES. DEMONSTRATE-COMPUTATIONAL-LENGTH. DISPLAY "=== COMPUTATIONAL FIELD LENGTH EXAMPLES ===" DISPLAY SPACES COMPUTE WS-BINARY-LEN = FUNCTION LENGTH(WS-BINARY-NUMBER) DISPLAY "Binary field (PIC 9(8) COMP): " WS-BINARY-NUMBER DISPLAY "Storage length: " WS-BINARY-LEN " bytes" DISPLAY SPACES COMPUTE WS-PACKED-LEN = FUNCTION LENGTH(WS-PACKED-DECIMAL) DISPLAY "Packed decimal (PIC 9(6) COMP-3): " WS-PACKED-DECIMAL DISPLAY "Storage length: " WS-PACKED-LEN " bytes" DISPLAY SPACES DISPLAY "COMP-1 field: " WS-COMP-1-FIELD DISPLAY "Storage length: " FUNCTION LENGTH(WS-COMP-1-FIELD) " bytes" DISPLAY SPACES DISPLAY "COMP-2 field: " WS-COMP-2-FIELD DISPLAY "Storage length: " FUNCTION LENGTH(WS-COMP-2-FIELD) " bytes" DISPLAY SPACES. DEMONSTRATE-DYNAMIC-PROCESSING. DISPLAY "=== DYNAMIC STRING PROCESSING WITH LENGTH ===" DISPLAY SPACES *> Process different input strings MOVE "DYNAMIC STRING PROCESSING TEST" TO WS-INPUT-STRING PERFORM PROCESS-DYNAMIC-STRING MOVE "SHORT" TO WS-INPUT-STRING PERFORM PROCESS-DYNAMIC-STRING MOVE "THIS IS A VERY LONG STRING FOR TESTING LENGTH CALCULATIONS" TO WS-INPUT-STRING PERFORM PROCESS-DYNAMIC-STRING MOVE SPACES TO WS-INPUT-STRING PERFORM PROCESS-DYNAMIC-STRING. PROCESS-DYNAMIC-STRING. COMPUTE WS-INPUT-LENGTH = FUNCTION LENGTH(WS-INPUT-STRING) DISPLAY "Input string: '" WS-INPUT-STRING "'" DISPLAY "Defined length: " WS-INPUT-LENGTH " characters" *> Calculate actual data length (trimmed) PERFORM CALCULATE-ACTUAL-LENGTH DISPLAY "Actual data length: " WS-ACTUAL-LENGTH " characters" *> Process based on length IF WS-ACTUAL-LENGTH > 50 DISPLAY " Status: Long string - consider truncation" ELSE IF WS-ACTUAL-LENGTH > 20 DISPLAY " Status: Medium string - normal processing" ELSE IF WS-ACTUAL-LENGTH > 0 DISPLAY " Status: Short string - padding may be needed" ELSE DISPLAY " Status: Empty string - default processing" END-IF END-IF END-IF DISPLAY SPACES. CALCULATE-ACTUAL-LENGTH. MOVE 0 TO WS-LAST-NON-SPACE *> Find last non-space character PERFORM VARYING WS-TRIM-INDEX FROM WS-INPUT-LENGTH BY -1 UNTIL WS-TRIM-INDEX < 1 OR WS-LAST-NON-SPACE > 0 IF WS-INPUT-STRING(WS-TRIM-INDEX:1) NOT = SPACE MOVE WS-TRIM-INDEX TO WS-LAST-NON-SPACE END-IF END-PERFORM MOVE WS-LAST-NON-SPACE TO WS-ACTUAL-LENGTH. DEMONSTRATE-DATA-VALIDATION. DISPLAY "=== DATA VALIDATION WITH LENGTH ===" DISPLAY SPACES *> Validate customer name length MOVE 2 TO WS-MIN-LENGTH MOVE 35 TO WS-MAX-LENGTH MOVE WS-CUSTOMER-NAME TO WS-INPUT-STRING PERFORM VALIDATE-STRING-LENGTH DISPLAY "Customer name validation: " WS-VALIDATION-RESULT DISPLAY SPACES *> Validate email address length MOVE 5 TO WS-MIN-LENGTH MOVE 50 TO WS-MAX-LENGTH MOVE WS-EMAIL-ADDRESS TO WS-INPUT-STRING PERFORM VALIDATE-STRING-LENGTH DISPLAY "Email address validation: " WS-VALIDATION-RESULT DISPLAY SPACES *> Validate product code length MOVE 5 TO WS-MIN-LENGTH MOVE 15 TO WS-MAX-LENGTH MOVE WS-PRODUCT-CODE TO WS-INPUT-STRING PERFORM VALIDATE-STRING-LENGTH DISPLAY "Product code validation: " WS-VALIDATION-RESULT DISPLAY SPACES. VALIDATE-STRING-LENGTH. PERFORM CALCULATE-ACTUAL-LENGTH DISPLAY "Validating: '" WS-INPUT-STRING "'" DISPLAY "Actual length: " WS-ACTUAL-LENGTH DISPLAY "Required range: " WS-MIN-LENGTH " to " WS-MAX-LENGTH IF WS-ACTUAL-LENGTH >= WS-MIN-LENGTH AND WS-ACTUAL-LENGTH <= WS-MAX-LENGTH MOVE 'Y' TO WS-VALIDATION-RESULT DISPLAY "Result: VALID" ELSE MOVE 'N' TO WS-VALIDATION-RESULT IF WS-ACTUAL-LENGTH < WS-MIN-LENGTH DISPLAY "Result: TOO SHORT" ELSE DISPLAY "Result: TOO LONG" END-IF END-IF. DEMONSTRATE-STRING-TRIMMING. DISPLAY "=== STRING TRIMMING WITH LENGTH ===" DISPLAY SPACES *> Test different strings with trailing spaces MOVE "TRIMMED STRING " TO WS-INPUT-STRING PERFORM TRIM-AND-DISPLAY MOVE " LEADING SPACES" TO WS-INPUT-STRING PERFORM TRIM-AND-DISPLAY MOVE " BOTH SIDES " TO WS-INPUT-STRING PERFORM TRIM-AND-DISPLAY MOVE "NOSPACES" TO WS-INPUT-STRING PERFORM TRIM-AND-DISPLAY. TRIM-AND-DISPLAY. COMPUTE WS-INPUT-LENGTH = FUNCTION LENGTH(WS-INPUT-STRING) PERFORM CALCULATE-ACTUAL-LENGTH DISPLAY "Original: '" WS-INPUT-STRING "'" DISPLAY "Original length: " WS-INPUT-LENGTH DISPLAY "Trimmed length: " WS-ACTUAL-LENGTH *> Create trimmed version IF WS-ACTUAL-LENGTH > 0 MOVE WS-INPUT-STRING(1:WS-ACTUAL-LENGTH) TO WS-PROCESSED-STRING DISPLAY "Trimmed: '" WS-PROCESSED-STRING(1:WS-ACTUAL-LENGTH) "'" ELSE DISPLAY "Trimmed: (empty string)" END-IF DISPLAY SPACES. DEMONSTRATE-BUSINESS-VALIDATION. DISPLAY "=== BUSINESS DATA VALIDATION ===" DISPLAY SPACES PERFORM VALIDATE-SSN PERFORM VALIDATE-CREDIT-CARD PERFORM VALIDATE-ZIP-CODE PERFORM VALIDATE-PASSWORD. VALIDATE-SSN. DISPLAY "SSN Validation:" DISPLAY " SSN: '" WS-SSN "'" DISPLAY " Length: " FUNCTION LENGTH(WS-SSN) IF FUNCTION LENGTH(WS-SSN) = 11 DISPLAY " Result: Valid SSN format length" ELSE DISPLAY " Result: Invalid SSN format length (should be 11)" END-IF DISPLAY SPACES. VALIDATE-CREDIT-CARD. DISPLAY "Credit Card Validation:" DISPLAY " Card number: '" WS-CREDIT-CARD "'" DISPLAY " Length: " FUNCTION LENGTH(WS-CREDIT-CARD) IF FUNCTION LENGTH(WS-CREDIT-CARD) >= 15 AND FUNCTION LENGTH(WS-CREDIT-CARD) <= 19 DISPLAY " Result: Valid credit card format length" ELSE DISPLAY " Result: Invalid credit card format length" END-IF DISPLAY SPACES. VALIDATE-ZIP-CODE. DISPLAY "ZIP Code Validation:" DISPLAY " ZIP code: '" WS-ZIP-CODE "'" DISPLAY " Length: " FUNCTION LENGTH(WS-ZIP-CODE) EVALUATE FUNCTION LENGTH(WS-ZIP-CODE) WHEN 5 DISPLAY " Result: Valid 5-digit ZIP code" WHEN 10 DISPLAY " Result: Valid ZIP+4 code" WHEN OTHER DISPLAY " Result: Invalid ZIP code length" END-EVALUATE DISPLAY SPACES. VALIDATE-PASSWORD. 01 WS-PASSWORD-LENGTH PIC 9(3). DISPLAY "Password Validation:" DISPLAY " Password: '" WS-PASSWORD "'" COMPUTE WS-PASSWORD-LENGTH = FUNCTION LENGTH(WS-PASSWORD) DISPLAY " Defined length: " WS-PASSWORD-LENGTH *> Calculate actual password length (without trailing spaces) MOVE WS-PASSWORD TO WS-INPUT-STRING PERFORM CALCULATE-ACTUAL-LENGTH DISPLAY " Actual length: " WS-ACTUAL-LENGTH IF WS-ACTUAL-LENGTH >= 8 AND WS-ACTUAL-LENGTH <= 16 DISPLAY " Result: Valid password length" ELSE IF WS-ACTUAL-LENGTH < 8 DISPLAY " Result: Password too short (minimum 8 characters)" ELSE DISPLAY " Result: Password too long (maximum 16 characters)" END-IF END-IF DISPLAY SPACES. *> Advanced LENGTH applications ADVANCED-LENGTH-APPLICATIONS. DISPLAY "=== ADVANCED LENGTH APPLICATIONS ===" DISPLAY SPACES PERFORM DYNAMIC-FIELD-FORMATTING PERFORM LENGTH-BASED-PROCESSING PERFORM COMPARATIVE-LENGTH-ANALYSIS. DYNAMIC-FIELD-FORMATTING. 01 WS-FORMAT-FIELDS. 05 WS-FIELD-1 PIC X(10) VALUE "SHORT". 05 WS-FIELD-2 PIC X(25) VALUE "MEDIUM LENGTH FIELD". 05 WS-FIELD-3 PIC X(40) VALUE "THIS IS A LONGER FIELD FOR TESTING". 01 WS-FIELD-INDEX PIC 9(2). 01 WS-CURRENT-FIELD PIC X(40). 01 WS-FIELD-LENGTH PIC 9(3). DISPLAY "Dynamic field formatting based on length:" PERFORM VARYING WS-FIELD-INDEX FROM 1 BY 1 UNTIL WS-FIELD-INDEX > 3 EVALUATE WS-FIELD-INDEX WHEN 1 MOVE WS-FIELD-1 TO WS-CURRENT-FIELD WHEN 2 MOVE WS-FIELD-2 TO WS-CURRENT-FIELD WHEN 3 MOVE WS-FIELD-3 TO WS-CURRENT-FIELD END-EVALUATE COMPUTE WS-FIELD-LENGTH = FUNCTION LENGTH(WS-CURRENT-FIELD) DISPLAY " Field " WS-FIELD-INDEX ":" DISPLAY " Content: '" WS-CURRENT-FIELD "'" DISPLAY " Defined length: " WS-FIELD-LENGTH *> Format based on length IF WS-FIELD-LENGTH <= 15 DISPLAY " Format: Compact display" ELSE IF WS-FIELD-LENGTH <= 30 DISPLAY " Format: Standard display" ELSE DISPLAY " Format: Extended display" END-IF END-IF DISPLAY SPACES END-PERFORM. LENGTH-BASED-PROCESSING. 01 WS-PROCESSING-DATA. 05 WS-SHORT-DATA PIC X(10) VALUE "ABC". 05 WS-MEDIUM-DATA PIC X(30) VALUE "MEDIUM LENGTH DATA". 05 WS-LONG-DATA PIC X(60) VALUE "THIS IS VERY LONG DATA FOR PROCESSING". 01 WS-DATA-INDEX PIC 9(2). 01 WS-PROCESSING-FIELD PIC X(60). 01 WS-PROCESSING-LENGTH PIC 9(3). DISPLAY "Length-based processing decisions:" PERFORM VARYING WS-DATA-INDEX FROM 1 BY 1 UNTIL WS-DATA-INDEX > 3 EVALUATE WS-DATA-INDEX WHEN 1 MOVE WS-SHORT-DATA TO WS-PROCESSING-FIELD WHEN 2 MOVE WS-MEDIUM-DATA TO WS-PROCESSING-FIELD WHEN 3 MOVE WS-LONG-DATA TO WS-PROCESSING-FIELD END-EVALUATE COMPUTE WS-PROCESSING-LENGTH = FUNCTION LENGTH(WS-PROCESSING-FIELD) DISPLAY " Data set " WS-DATA-INDEX ":" DISPLAY " Length: " WS-PROCESSING-LENGTH *> Choose processing method based on length EVALUATE WS-PROCESSING-LENGTH WHEN 1 THRU 15 DISPLAY " Processing: Fast track" WHEN 16 THRU 40 DISPLAY " Processing: Standard workflow" WHEN 41 THRU 999 DISPLAY " Processing: Batch processing recommended" END-EVALUATE DISPLAY SPACES END-PERFORM. COMPARATIVE-LENGTH-ANALYSIS. 01 WS-COMPARISON-FIELDS. 05 WS-NAME-A PIC X(30) VALUE "JOHN SMITH". 05 WS-NAME-B PIC X(25) VALUE "ELIZABETH JOHNSON". 05 WS-ADDRESS-A PIC X(40) VALUE "123 MAIN STREET". 05 WS-ADDRESS-B PIC X(45) VALUE "456 VERY LONG AVENUE NAME STREET". DISPLAY "Comparative length analysis:" DISPLAY " Name comparison:" DISPLAY " Name A length: " FUNCTION LENGTH(WS-NAME-A) DISPLAY " Name B length: " FUNCTION LENGTH(WS-NAME-B) IF FUNCTION LENGTH(WS-NAME-A) > FUNCTION LENGTH(WS-NAME-B) DISPLAY " Name A field is longer" ELSE IF FUNCTION LENGTH(WS-NAME-A) < FUNCTION LENGTH(WS-NAME-B) DISPLAY " Name B field is longer" ELSE DISPLAY " Both name fields are equal length" END-IF END-IF DISPLAY SPACES DISPLAY " Address comparison:" DISPLAY " Address A length: " FUNCTION LENGTH(WS-ADDRESS-A) DISPLAY " Address B length: " FUNCTION LENGTH(WS-ADDRESS-B) IF FUNCTION LENGTH(WS-ADDRESS-A) > FUNCTION LENGTH(WS-ADDRESS-B) DISPLAY " Address A field is longer" ELSE IF FUNCTION LENGTH(WS-ADDRESS-A) < FUNCTION LENGTH(WS-ADDRESS-B) DISPLAY " Address B field is longer" ELSE DISPLAY " Both address fields are equal length" END-IF END-IF DISPLAY SPACES.

LENGTH Function Applications

Data Validation
  • • Field length verification
  • • Input format validation
  • • String size checking
  • • Data integrity verification
  • • Format compliance testing
Dynamic Processing
  • • Conditional string processing
  • • Buffer size calculations
  • • Memory allocation decisions
  • • Report formatting control
  • • Performance optimization

Interactive Tutorial

Hands-On Exercise: Field Validation with LENGTH
Practice using LENGTH function for data validation and processing

Exercise 1: Password Validation

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
01 WS-PASSWORD PIC X(20). 01 WS-MIN-LENGTH PIC 9(2) VALUE 8. 01 WS-MAX-LENGTH PIC 9(2) VALUE 16. 01 WS-ACTUAL-LENGTH PIC 9(2). 01 WS-VALID-FLAG PIC X VALUE 'N'. PROCEDURE DIVISION. VALIDATE-PASSWORD. MOVE "MySecret123" TO WS-PASSWORD *> Calculate actual length (trim trailing spaces) PERFORM CALCULATE-ACTUAL-LENGTH DISPLAY "Password: '" WS-PASSWORD "'" DISPLAY "Length: " WS-ACTUAL-LENGTH IF WS-ACTUAL-LENGTH >= WS-MIN-LENGTH AND WS-ACTUAL-LENGTH <= WS-MAX-LENGTH MOVE 'Y' TO WS-VALID-FLAG DISPLAY "Password length is valid" ELSE DISPLAY "Password length is invalid" END-IF. CALCULATE-ACTUAL-LENGTH. MOVE FUNCTION LENGTH(WS-PASSWORD) TO WS-ACTUAL-LENGTH PERFORM VARYING WS-INDEX FROM WS-ACTUAL-LENGTH BY -1 UNTIL WS-INDEX < 1 IF WS-PASSWORD(WS-INDEX:1) NOT = SPACE MOVE WS-INDEX TO WS-ACTUAL-LENGTH EXIT PERFORM END-IF END-PERFORM.

Exercise 2: Dynamic String Processing

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
01 WS-INPUT-DATA PIC X(50). 01 WS-FIELD-LENGTH PIC 9(3). 01 WS-PROCESS-TYPE PIC X(10). PROCEDURE DIVISION. PROCESS-BY-LENGTH. MOVE "SAMPLE DATA FOR PROCESSING" TO WS-INPUT-DATA COMPUTE WS-FIELD-LENGTH = FUNCTION LENGTH(WS-INPUT-DATA) DISPLAY "Input: '" WS-INPUT-DATA "'" DISPLAY "Field length: " WS-FIELD-LENGTH *> Choose processing method based on length EVALUATE WS-FIELD-LENGTH WHEN 1 THRU 20 MOVE "QUICK" TO WS-PROCESS-TYPE WHEN 21 THRU 40 MOVE "STANDARD" TO WS-PROCESS-TYPE WHEN 41 THRU 999 MOVE "BATCH" TO WS-PROCESS-TYPE END-EVALUATE DISPLAY "Processing type: " WS-PROCESS-TYPE.

Best Practices

Knowledge Check

Test Your Understanding

Question 1: LENGTH vs Actual Data

What's the difference between FUNCTION LENGTH and actual data length?

Answer: FUNCTION LENGTH returns the defined field size, while actual data length refers to the number of meaningful characters (usually excluding trailing spaces). A PIC X(20) field always has LENGTH of 20, regardless of content.

Question 2: Computational Fields

How does LENGTH work with computational fields?

Answer: For computational fields, LENGTH returns the storage length in bytes, not the display length. For example, a PIC 9(6) COMP-3 field has a LENGTH of 4 bytes (packed decimal storage).

Question 3: Validation Applications

What are common validation uses for the LENGTH function?

Answer: Common uses include password length validation, field format checking (SSN, phone numbers), input size verification, and ensuring data fits in target fields before processing or database storage.