MainframeMaster

COBOL Tutorial

COBOL ALPHABETIC-LOWER Class

The ALPHABETIC-LOWER class condition represents one of COBOL's most precise and essential character classification mechanisms, serving as the primary tool for validating lowercase alphabetic content, enforcing data quality standards, and implementing sophisticated character-based validation rules in business applications. Far more than a simple character test, the ALPHABETIC-LOWER class embodies COBOL's comprehensive approach to data validation by providing precise control over character classification, input validation, data quality assurance, and complex string analysis that enable applications to handle diverse data validation requirements while maintaining the accuracy and reliability characteristics that make COBOL ideal for enterprise data processing environments requiring rigorous character validation capabilities.

In enterprise computing environments, the ALPHABETIC-LOWER class serves as a critical foundation for advanced data validation, enabling developers to create sophisticated business applications that handle strict data entry requirements, implement character-based business rules, enforce naming conventions, and validate user input according to specific formatting standards. Its capabilities extend far beyond simple character checking to encompass sophisticated validation workflows, dynamic data classification, conditional processing logic, and integration with modern data quality systems that are essential for applications requiring comprehensive character validation and data integrity management capabilities.

ALPHABETIC-LOWER Class Usage and Syntax

Basic ALPHABETIC-LOWER Testing

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
*> Basic ALPHABETIC-LOWER validation IF INPUT-FIELD IS ALPHABETIC-LOWER DISPLAY "Field contains only lowercase letters" ELSE DISPLAY "Field contains non-lowercase characters" END-IF. *> Negative test IF INPUT-FIELD IS NOT ALPHABETIC-LOWER DISPLAY "Field validation failed" PERFORM ERROR-HANDLING END-IF. *> Combined with other conditions IF INPUT-FIELD IS ALPHABETIC-LOWER AND LENGTH OF INPUT-FIELD > 3 PERFORM PROCESS-VALID-INPUT END-IF.

Basic ALPHABETIC-LOWER testing validates that fields contain only lowercase alphabetic characters.

Data Validation Patterns

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
*> User input validation ACCEPT USER-NAME FROM CONSOLE. IF USER-NAME IS NOT ALPHABETIC-LOWER DISPLAY "Error: Name must be lowercase letters only" PERFORM GET-USER-INPUT-AGAIN END-IF. *> Field-by-field validation PERFORM VARYING WS-INDEX FROM 1 BY 1 UNTIL WS-INDEX > 10 IF CUSTOMER-NAME(WS-INDEX:1) IS NOT ALPHABETIC-LOWER MOVE "Y" TO VALIDATION-ERROR-FLAG EXIT PERFORM END-IF END-PERFORM. *> Conditional processing based on character type EVALUATE TRUE WHEN INPUT-FIELD IS ALPHABETIC-LOWER PERFORM PROCESS-LOWERCASE-DATA WHEN INPUT-FIELD IS ALPHABETIC-UPPER PERFORM PROCESS-UPPERCASE-DATA WHEN OTHER PERFORM PROCESS-MIXED-DATA END-EVALUATE.

Data validation patterns use ALPHABETIC-LOWER for input validation and character classification.

Character-by-Character Analysis

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
*> Analyze each character in a string PERFORM VARYING CHAR-POSITION FROM 1 BY 1 UNTIL CHAR-POSITION > LENGTH OF INPUT-STRING MOVE INPUT-STRING(CHAR-POSITION:1) TO CURRENT-CHAR IF CURRENT-CHAR IS ALPHABETIC-LOWER ADD 1 TO LOWERCASE-COUNT ELSE IF CURRENT-CHAR IS ALPHABETIC-UPPER ADD 1 TO UPPERCASE-COUNT ELSE IF CURRENT-CHAR IS NUMERIC ADD 1 TO NUMERIC-COUNT ELSE ADD 1 TO SPECIAL-COUNT END-IF END-PERFORM. *> Find first non-lowercase character MOVE 0 TO ERROR-POSITION. PERFORM VARYING WS-POS FROM 1 BY 1 UNTIL WS-POS > FIELD-LENGTH OR ERROR-POSITION > 0 IF INPUT-DATA(WS-POS:1) IS NOT ALPHABETIC-LOWER MOVE WS-POS TO ERROR-POSITION END-IF END-PERFORM.

Character-by-character analysis enables detailed string validation and error reporting.

Comprehensive Example

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
IDENTIFICATION DIVISION. PROGRAM-ID. ALPHABETIC-LOWER-DEMO. DATA DIVISION. WORKING-STORAGE SECTION. *> Input data for testing 01 TEST-DATA-TABLE. 05 TEST-ENTRIES OCCURS 15 TIMES. 10 TEST-STRING PIC X(20). 10 EXPECTED-RESULT PIC X(10). *> Validation results 01 VALIDATION-RESULTS. 05 TOTAL-TESTS PIC 9(3) VALUE 0. 05 PASSED-TESTS PIC 9(3) VALUE 0. 05 FAILED-TESTS PIC 9(3) VALUE 0. *> Character analysis counters 01 CHARACTER-ANALYSIS. 05 LOWERCASE-COUNT PIC 9(3) VALUE 0. 05 UPPERCASE-COUNT PIC 9(3) VALUE 0. 05 NUMERIC-COUNT PIC 9(3) VALUE 0. 05 SPECIAL-COUNT PIC 9(3) VALUE 0. 05 SPACE-COUNT PIC 9(3) VALUE 0. 05 TOTAL-CHARS PIC 9(3) VALUE 0. *> Detailed validation fields 01 DETAILED-VALIDATION. 05 FIELD-NAME PIC X(20). 05 FIELD-VALUE PIC X(50). 05 VALIDATION-STATUS PIC X(10). 05 ERROR-POSITION PIC 9(3) VALUE 0. 05 ERROR-CHARACTER PIC X(1). 05 VALIDATION-MESSAGE PIC X(100). *> Sample business data 01 CUSTOMER-DATA. 05 CUSTOMER-ID PIC X(10). 05 FIRST-NAME PIC X(20). 05 LAST-NAME PIC X(25). 05 MIDDLE-INITIAL PIC X(1). 05 DEPARTMENT-CODE PIC X(15). 05 USER-ID PIC X(12). *> Control variables 01 CONTROL-VARIABLES. 05 WS-COUNTER PIC 9(3) VALUE 0. 05 WS-INDEX PIC 9(3) VALUE 0. 05 WS-POSITION PIC 9(3) VALUE 0. 05 CURRENT-CHAR PIC X(1). 05 FIELD-LENGTH PIC 9(3) VALUE 0. *> Business rule flags 01 BUSINESS-RULES. 05 STRICT-VALIDATION PIC X(1) VALUE "Y". 88 STRICT-MODE VALUE "Y". 88 LENIENT-MODE VALUE "N". 05 ALLOW-SPACES PIC X(1) VALUE "N". 88 SPACES-ALLOWED VALUE "Y". 88 SPACES-NOT-ALLOWED VALUE "N". PROCEDURE DIVISION. MAIN-PROCESSING. DISPLAY "=== ALPHABETIC-LOWER Class Demonstration ===". DISPLAY " ". PERFORM INITIALIZE-TEST-DATA PERFORM DEMONSTRATE-BASIC-VALIDATION PERFORM DEMONSTRATE-CHARACTER-ANALYSIS PERFORM DEMONSTRATE-BUSINESS-VALIDATION PERFORM DEMONSTRATE-ERROR-REPORTING PERFORM DISPLAY-VALIDATION-SUMMARY DISPLAY " ". DISPLAY "ALPHABETIC-LOWER demonstration completed". STOP RUN. INITIALIZE-TEST-DATA. DISPLAY "1. Initializing Test Data:". DISPLAY " =======================". *> Initialize test strings with various character combinations MOVE "hello" TO TEST-STRING(1). MOVE "VALID" TO EXPECTED-RESULT(1). MOVE "world" TO TEST-STRING(2). MOVE "VALID" TO EXPECTED-RESULT(2). MOVE "Hello" TO TEST-STRING(3). MOVE "INVALID" TO EXPECTED-RESULT(3). MOVE "WORLD" TO TEST-STRING(4). MOVE "INVALID" TO EXPECTED-RESULT(4). MOVE "test123" TO TEST-STRING(5). MOVE "INVALID" TO EXPECTED-RESULT(5). MOVE "hello world" TO TEST-STRING(6). MOVE "INVALID" TO EXPECTED-RESULT(6). MOVE "abc" TO TEST-STRING(7). MOVE "VALID" TO EXPECTED-RESULT(7). MOVE "xyz" TO TEST-STRING(8). MOVE "VALID" TO EXPECTED-RESULT(8). MOVE "test!" TO TEST-STRING(9). MOVE "INVALID" TO EXPECTED-RESULT(9). MOVE "programming" TO TEST-STRING(10). MOVE "VALID" TO EXPECTED-RESULT(10). MOVE "data-entry" TO TEST-STRING(11). MOVE "INVALID" TO EXPECTED-RESULT(11). MOVE "validation" TO TEST-STRING(12). MOVE "VALID" TO EXPECTED-RESULT(12). MOVE "" TO TEST-STRING(13). MOVE "INVALID" TO EXPECTED-RESULT(13). MOVE "a" TO TEST-STRING(14). MOVE "VALID" TO EXPECTED-RESULT(14). MOVE "Test@Case" TO TEST-STRING(15). MOVE "INVALID" TO EXPECTED-RESULT(15). DISPLAY " Test data initialized with 15 test cases". DISPLAY " ". DEMONSTRATE-BASIC-VALIDATION. DISPLAY "2. Basic ALPHABETIC-LOWER Validation:". DISPLAY " ===================================". PERFORM VARYING WS-COUNTER FROM 1 BY 1 UNTIL WS-COUNTER > 15 MOVE TEST-STRING(WS-COUNTER) TO FIELD-VALUE IF FIELD-VALUE IS ALPHABETIC-LOWER MOVE "VALID" TO VALIDATION-STATUS ELSE MOVE "INVALID" TO VALIDATION-STATUS END-IF ADD 1 TO TOTAL-TESTS IF VALIDATION-STATUS = EXPECTED-RESULT(WS-COUNTER) ADD 1 TO PASSED-TESTS DISPLAY " Test " WS-COUNTER ": '" FIELD-VALUE "' - " VALIDATION-STATUS " (CORRECT)" ELSE ADD 1 TO FAILED-TESTS DISPLAY " Test " WS-COUNTER ": '" FIELD-VALUE "' - " VALIDATION-STATUS " (WRONG - Expected: " EXPECTED-RESULT(WS-COUNTER) ")" END-IF END-PERFORM. DISPLAY " ". DISPLAY " Basic validation completed". DISPLAY " Total tests: " TOTAL-TESTS. DISPLAY " Passed: " PASSED-TESTS. DISPLAY " Failed: " FAILED-TESTS. DISPLAY " ". DEMONSTRATE-CHARACTER-ANALYSIS. DISPLAY "3. Character Analysis:". DISPLAY " ===================". MOVE "Hello World 123!" TO FIELD-VALUE. MOVE 0 TO LOWERCASE-COUNT UPPERCASE-COUNT NUMERIC-COUNT SPECIAL-COUNT SPACE-COUNT. COMPUTE FIELD-LENGTH = FUNCTION LENGTH(FUNCTION TRIM(FIELD-VALUE)). DISPLAY " Analyzing string: '" FIELD-VALUE "'". PERFORM VARYING WS-POSITION FROM 1 BY 1 UNTIL WS-POSITION > FIELD-LENGTH MOVE FIELD-VALUE(WS-POSITION:1) TO CURRENT-CHAR EVALUATE TRUE WHEN CURRENT-CHAR IS ALPHABETIC-LOWER ADD 1 TO LOWERCASE-COUNT WHEN CURRENT-CHAR IS ALPHABETIC-UPPER ADD 1 TO UPPERCASE-COUNT WHEN CURRENT-CHAR IS NUMERIC ADD 1 TO NUMERIC-COUNT WHEN CURRENT-CHAR = SPACE ADD 1 TO SPACE-COUNT WHEN OTHER ADD 1 TO SPECIAL-COUNT END-EVALUATE END-PERFORM. COMPUTE TOTAL-CHARS = LOWERCASE-COUNT + UPPERCASE-COUNT + NUMERIC-COUNT + SPECIAL-COUNT + SPACE-COUNT. DISPLAY " Character breakdown:". DISPLAY " Lowercase letters: " LOWERCASE-COUNT. DISPLAY " Uppercase letters: " UPPERCASE-COUNT. DISPLAY " Numeric digits: " NUMERIC-COUNT. DISPLAY " Spaces: " SPACE-COUNT. DISPLAY " Special characters: " SPECIAL-COUNT. DISPLAY " Total characters: " TOTAL-CHARS. IF LOWERCASE-COUNT = TOTAL-CHARS DISPLAY " Result: String is ALL LOWERCASE" ELSE IF UPPERCASE-COUNT = TOTAL-CHARS DISPLAY " Result: String is ALL UPPERCASE" ELSE DISPLAY " Result: String is MIXED CASE" END-IF. DISPLAY " ". DEMONSTRATE-BUSINESS-VALIDATION. DISPLAY "4. Business Data Validation:". DISPLAY " ==========================". *> Initialize sample customer data MOVE "CUST001" TO CUSTOMER-ID. MOVE "john" TO FIRST-NAME. MOVE "smith" TO LAST-NAME. MOVE "a" TO MIDDLE-INITIAL. MOVE "engineering" TO DEPARTMENT-CODE. MOVE "johnsmith" TO USER-ID. DISPLAY " Customer Data Validation Rules:". DISPLAY " - First name must be lowercase letters only". DISPLAY " - Last name must be lowercase letters only". DISPLAY " - Middle initial must be lowercase letter". DISPLAY " - Department code must be lowercase letters". DISPLAY " - User ID must be lowercase letters only". DISPLAY " ". *> Validate first name MOVE "FIRST-NAME" TO FIELD-NAME. MOVE FIRST-NAME TO FIELD-VALUE. PERFORM VALIDATE-ALPHABETIC-LOWER-FIELD. *> Validate last name MOVE "LAST-NAME" TO FIELD-NAME. MOVE LAST-NAME TO FIELD-VALUE. PERFORM VALIDATE-ALPHABETIC-LOWER-FIELD. *> Validate middle initial MOVE "MIDDLE-INITIAL" TO FIELD-NAME. MOVE MIDDLE-INITIAL TO FIELD-VALUE. PERFORM VALIDATE-ALPHABETIC-LOWER-FIELD. *> Validate department code MOVE "DEPARTMENT-CODE" TO FIELD-NAME. MOVE DEPARTMENT-CODE TO FIELD-VALUE. PERFORM VALIDATE-ALPHABETIC-LOWER-FIELD. *> Validate user ID MOVE "USER-ID" TO FIELD-NAME. MOVE USER-ID TO FIELD-VALUE. PERFORM VALIDATE-ALPHABETIC-LOWER-FIELD. DISPLAY " ". VALIDATE-ALPHABETIC-LOWER-FIELD. MOVE 0 TO ERROR-POSITION. MOVE SPACES TO ERROR-CHARACTER VALIDATION-MESSAGE. IF FIELD-VALUE IS ALPHABETIC-LOWER MOVE "VALID" TO VALIDATION-STATUS MOVE "Field contains only lowercase letters" TO VALIDATION-MESSAGE ELSE MOVE "INVALID" TO VALIDATION-STATUS PERFORM FIND-FIRST-INVALID-CHARACTER STRING "Invalid character '" ERROR-CHARACTER "' at position " ERROR-POSITION DELIMITED BY SIZE INTO VALIDATION-MESSAGE END-IF. DISPLAY " " FIELD-NAME ": '" FIELD-VALUE "' - " VALIDATION-STATUS. DISPLAY " " VALIDATION-MESSAGE. FIND-FIRST-INVALID-CHARACTER. COMPUTE FIELD-LENGTH = FUNCTION LENGTH(FUNCTION TRIM(FIELD-VALUE)). PERFORM VARYING WS-POSITION FROM 1 BY 1 UNTIL WS-POSITION > FIELD-LENGTH OR ERROR-POSITION > 0 MOVE FIELD-VALUE(WS-POSITION:1) TO CURRENT-CHAR IF CURRENT-CHAR IS NOT ALPHABETIC-LOWER MOVE WS-POSITION TO ERROR-POSITION MOVE CURRENT-CHAR TO ERROR-CHARACTER END-IF END-PERFORM. DEMONSTRATE-ERROR-REPORTING. DISPLAY "5. Error Reporting and Detailed Analysis:". DISPLAY " =======================================". *> Test problematic inputs MOVE "Test123" TO FIELD-VALUE. DISPLAY " Analyzing: '" FIELD-VALUE "'". PERFORM DETAILED-CHARACTER-VALIDATION. MOVE "HELLO" TO FIELD-VALUE. DISPLAY " Analyzing: '" FIELD-VALUE "'". PERFORM DETAILED-CHARACTER-VALIDATION. MOVE "hello world" TO FIELD-VALUE. DISPLAY " Analyzing: '" FIELD-VALUE "'". PERFORM DETAILED-CHARACTER-VALIDATION. MOVE "data-entry" TO FIELD-VALUE. DISPLAY " Analyzing: '" FIELD-VALUE "'". PERFORM DETAILED-CHARACTER-VALIDATION. DISPLAY " ". DETAILED-CHARACTER-VALIDATION. COMPUTE FIELD-LENGTH = FUNCTION LENGTH(FUNCTION TRIM(FIELD-VALUE)). MOVE 0 TO WS-POSITION. IF FIELD-VALUE IS ALPHABETIC-LOWER DISPLAY " Status: VALID (all lowercase letters)" ELSE DISPLAY " Status: INVALID" DISPLAY " Issues found:". PERFORM VARYING WS-POSITION FROM 1 BY 1 UNTIL WS-POSITION > FIELD-LENGTH MOVE FIELD-VALUE(WS-POSITION:1) TO CURRENT-CHAR IF CURRENT-CHAR IS NOT ALPHABETIC-LOWER EVALUATE TRUE WHEN CURRENT-CHAR IS ALPHABETIC-UPPER DISPLAY " Position " WS-POSITION ": '" CURRENT-CHAR "' is uppercase" WHEN CURRENT-CHAR IS NUMERIC DISPLAY " Position " WS-POSITION ": '" CURRENT-CHAR "' is numeric" WHEN CURRENT-CHAR = SPACE DISPLAY " Position " WS-POSITION ": space character" WHEN OTHER DISPLAY " Position " WS-POSITION ": '" CURRENT-CHAR "' is special character" END-EVALUATE END-IF END-PERFORM END-IF. DISPLAY-VALIDATION-SUMMARY. DISPLAY "6. Validation Summary:". DISPLAY " ===================". DISPLAY " ALPHABETIC-LOWER class characteristics:". DISPLAY " - Tests for lowercase letters a-z only". DISPLAY " - Returns TRUE only if ALL characters are lowercase". DISPLAY " - Spaces, numbers, and special chars make it FALSE". DISPLAY " - Empty fields return FALSE". DISPLAY " - Case-sensitive validation". DISPLAY " ". DISPLAY " Common use cases:". DISPLAY " - User input validation". DISPLAY " - Data quality checking". DISPLAY " - Business rule enforcement". DISPLAY " - Character classification". DISPLAY " - Format validation".

Best Practices and Guidelines

Recommended Practices

  • Use ALPHABETIC-LOWER for strict lowercase validation
  • Combine with length checks for comprehensive validation
  • Implement clear error messages for validation failures
  • Use character-by-character analysis for detailed reporting
  • Apply consistent validation rules across applications
  • Test with edge cases including empty and single characters
  • Document validation requirements and business rules
  • Consider locale-specific character requirements

Common Pitfalls

  • Forgetting that spaces and punctuation invalidate the test
  • Not handling empty fields which return FALSE
  • Inconsistent validation between related fields
  • Poor error reporting without position information
  • Not considering international lowercase characters
  • Overly restrictive validation for business names
  • Missing validation on data conversion operations
  • Not testing validation logic with representative data

Related COBOL Concepts

  • ALPHABETIC - Class condition for any alphabetic characters
  • ALPHABETIC-UPPER - Class condition for uppercase characters
  • NUMERIC - Class condition for numeric characters
  • CLASS - User-defined character classes
  • IF statement - Conditional testing using class conditions
  • EVALUATE - Multi-way branching with class conditions
  • INSPECT - Character examination and analysis
  • FUNCTION UPPER-CASE - Case conversion functions