MainframeMaster

COBOL Tutorial

COBOL HIGH-VALUE and HIGH-VALUES

HIGH-VALUE and HIGH-VALUES represent essential figurative constants within COBOL programming environments, serving as the fundamental specification for maximum character values in data processing operations that require boundary testing, sorting algorithms, data validation routines, and comparison logic. These constants embody the highest possible character value within the character set being utilized, providing sophisticated data manipulation capabilities for establishing upper limits, creating sentinel values, implementing table search algorithms, and supporting comprehensive business logic that demands precise boundary conditions, sorting operations, and data validation mechanisms across diverse enterprise applications requiring robust data handling, predictable comparison results, and maintainable code structures with consistent maximum value representations that ensure reliable program behavior in complex data processing scenarios involving character manipulation, database operations, and file processing tasks.

Syntax and Usage

HIGH-VALUE Figurative Constant
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
*> Basic HIGH-VALUE syntax MOVE HIGH-VALUE TO data-item MOVE HIGH-VALUES TO data-item *> Character set representation *> ASCII: X'FF' (255) *> EBCDIC: X'FF' (255) *> Usage examples 01 WS-DATA-FIELDS. 05 WS-NAME PIC X(25). 05 WS-CODE PIC X(10). 05 WS-SEARCH-KEY PIC X(15). 05 WS-TABLE-ENTRY PIC X(20). *> Initialize to highest values MOVE HIGH-VALUE TO WS-NAME MOVE HIGH-VALUES TO WS-CODE MOVE HIGH-VALUE TO WS-SEARCH-KEY *> Comparison operations IF WS-NAME = HIGH-VALUE DISPLAY "Name field contains maximum value" END-IF IF WS-CODE NOT = HIGH-VALUES DISPLAY "Code field has valid data" END-IF *> Table initialization 01 SORT-TABLE. 05 SORT-ENTRY OCCURS 100 TIMES PIC X(20). PERFORM VARYING I FROM 1 BY 1 UNTIL I > 100 MOVE HIGH-VALUE TO SORT-ENTRY(I) END-PERFORM.
Figurative Constant
Data Comparison
Maximum Value

Basic HIGH-VALUE 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
IDENTIFICATION DIVISION. PROGRAM-ID. HIGH-VALUE-EXAMPLES. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-VARIABLES. 05 WS-INPUT-FIELD PIC X(20). 05 WS-COMPARISON-FIELD PIC X(20). 05 WS-COUNTER PIC 9(3). 05 WS-FOUND-FLAG PIC X VALUE 'N'. 01 WS-EMPLOYEE-TABLE. 05 WS-EMPLOYEE OCCURS 50 TIMES. 10 WS-EMP-NAME PIC X(25). 10 WS-EMP-ID PIC 9(6). 10 WS-EMP-SALARY PIC 9(6)V99. 01 WS-SEARCH-TABLE. 05 WS-SEARCH-ENTRY OCCURS 100 TIMES PIC X(15). PROCEDURE DIVISION. MAIN-PROCESSING. PERFORM DEMONSTRATE-HIGH-VALUE-USAGE PERFORM DEMONSTRATE-TABLE-OPERATIONS PERFORM DEMONSTRATE-COMPARISON-LOGIC PERFORM DEMONSTRATE-SORTING-APPLICATIONS STOP RUN. DEMONSTRATE-HIGH-VALUE-USAGE. DISPLAY "=== HIGH-VALUE BASIC USAGE ===" *> Initialize field to HIGH-VALUE MOVE HIGH-VALUE TO WS-INPUT-FIELD DISPLAY "Field initialized to HIGH-VALUE: " WS-INPUT-FIELD *> Check if field contains HIGH-VALUE IF WS-INPUT-FIELD = HIGH-VALUE DISPLAY "Field contains HIGH-VALUE" ELSE DISPLAY "Field does not contain HIGH-VALUE" END-IF *> Move regular data and test MOVE "JOHN SMITH" TO WS-INPUT-FIELD IF WS-INPUT-FIELD = HIGH-VALUE DISPLAY "Field still contains HIGH-VALUE" ELSE DISPLAY "Field now contains: " WS-INPUT-FIELD END-IF DISPLAY SPACES. DEMONSTRATE-TABLE-OPERATIONS. DISPLAY "=== TABLE INITIALIZATION WITH HIGH-VALUE ===" *> Initialize entire table to HIGH-VALUE PERFORM VARYING WS-COUNTER FROM 1 BY 1 UNTIL WS-COUNTER > 100 MOVE HIGH-VALUE TO WS-SEARCH-ENTRY(WS-COUNTER) END-PERFORM DISPLAY "Table initialized with HIGH-VALUE entries" *> Add some real data MOVE "APPLE" TO WS-SEARCH-ENTRY(1) MOVE "BANANA" TO WS-SEARCH-ENTRY(2) MOVE "CHERRY" TO WS-SEARCH-ENTRY(3) MOVE "DATE" TO WS-SEARCH-ENTRY(4) *> Find first HIGH-VALUE entry (indicates end of data) PERFORM VARYING WS-COUNTER FROM 1 BY 1 UNTIL WS-COUNTER > 100 OR WS-SEARCH-ENTRY(WS-COUNTER) = HIGH-VALUE END-PERFORM SUBTRACT 1 FROM WS-COUNTER DISPLAY "Number of actual entries: " WS-COUNTER DISPLAY SPACES. DEMONSTRATE-COMPARISON-LOGIC. DISPLAY "=== COMPARISON OPERATIONS WITH HIGH-VALUE ===" *> Demonstrate comparison behaviors MOVE "ZEBRA" TO WS-COMPARISON-FIELD IF WS-COMPARISON-FIELD < HIGH-VALUE DISPLAY "'" WS-COMPARISON-FIELD "' is less than HIGH-VALUE" ELSE DISPLAY "'" WS-COMPARISON-FIELD "' is not less than HIGH-VALUE" END-IF MOVE HIGH-VALUE TO WS-COMPARISON-FIELD IF WS-COMPARISON-FIELD = HIGH-VALUE DISPLAY "Field equals HIGH-VALUE" END-IF IF WS-COMPARISON-FIELD > "ZZZZZ" DISPLAY "HIGH-VALUE is greater than 'ZZZZZ'" ELSE DISPLAY "HIGH-VALUE is not greater than 'ZZZZZ'" END-IF DISPLAY SPACES. DEMONSTRATE-SORTING-APPLICATIONS. DISPLAY "=== SORTING WITH HIGH-VALUE ===" *> Initialize employee table MOVE "SMITH, JOHN" TO WS-EMP-NAME(1) MOVE "JONES, MARY" TO WS-EMP-NAME(2) MOVE "WILLIAMS, BOB" TO WS-EMP-NAME(3) MOVE "BROWN, SUSAN" TO WS-EMP-NAME(4) *> Fill remaining entries with HIGH-VALUE PERFORM VARYING WS-COUNTER FROM 5 BY 1 UNTIL WS-COUNTER > 50 MOVE HIGH-VALUE TO WS-EMP-NAME(WS-COUNTER) END-PERFORM DISPLAY "Employees in table:" PERFORM VARYING WS-COUNTER FROM 1 BY 1 UNTIL WS-COUNTER > 50 OR WS-EMP-NAME(WS-COUNTER) = HIGH-VALUE DISPLAY " " WS-COUNTER ": " WS-EMP-NAME(WS-COUNTER) END-PERFORM DISPLAY SPACES. *> Demonstrate HIGH-VALUE in data validation VALIDATE-INPUT-DATA. DISPLAY "=== DATA VALIDATION WITH HIGH-VALUE ===" MOVE "VALID DATA" TO WS-INPUT-FIELD PERFORM CHECK-FIELD-VALIDITY MOVE HIGH-VALUE TO WS-INPUT-FIELD PERFORM CHECK-FIELD-VALIDITY MOVE SPACES TO WS-INPUT-FIELD PERFORM CHECK-FIELD-VALIDITY. CHECK-FIELD-VALIDITY. IF WS-INPUT-FIELD = HIGH-VALUE DISPLAY "Field contains HIGH-VALUE (uninitialized or max)" ELSE IF WS-INPUT-FIELD = SPACES DISPLAY "Field contains spaces (empty)" ELSE DISPLAY "Field contains valid data: " WS-INPUT-FIELD END-IF. *> Demonstrate boundary testing BOUNDARY-TESTING. DISPLAY "=== BOUNDARY TESTING WITH HIGH-VALUE ===" *> Test various character comparisons MOVE "A" TO WS-COMPARISON-FIELD PERFORM TEST-CHARACTER-BOUNDARY MOVE "Z" TO WS-COMPARISON-FIELD PERFORM TEST-CHARACTER-BOUNDARY MOVE "9" TO WS-COMPARISON-FIELD PERFORM TEST-CHARACTER-BOUNDARY MOVE HIGH-VALUE TO WS-COMPARISON-FIELD PERFORM TEST-CHARACTER-BOUNDARY. TEST-CHARACTER-BOUNDARY. IF WS-COMPARISON-FIELD = HIGH-VALUE DISPLAY "Character is at maximum boundary" ELSE DISPLAY "Character '" WS-COMPARISON-FIELD(1:1) "' is below maximum boundary" END-IF.

HIGH-VALUE Applications

Data Validation
  • • Boundary value testing
  • • Invalid data detection
  • • Maximum value validation
  • • Field initialization checking
Sorting and Searching
  • • Table sentinel values
  • • Sort boundary markers
  • • Search termination conditions
  • • Maximum value comparisons

Advanced HIGH-VALUE 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
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
IDENTIFICATION DIVISION. PROGRAM-ID. ADVANCED-HIGH-VALUE-PATTERNS. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-SEARCH-CONTROL. 05 WS-TABLE-SIZE PIC 9(4) VALUE 1000. 05 WS-ENTRIES-LOADED PIC 9(4) VALUE 0. 05 WS-SEARCH-KEY PIC X(20). 05 WS-FOUND-INDEX PIC 9(4) VALUE 0. 01 WS-CUSTOMER-TABLE. 05 WS-CUSTOMER OCCURS 1000 TIMES INDEXED BY CUST-IDX. 10 WS-CUST-ID PIC X(10). 10 WS-CUST-NAME PIC X(30). 10 WS-CUST-STATUS PIC X. 01 WS-SORT-ARRAY. 05 WS-SORT-ITEM OCCURS 500 TIMES INDEXED BY SORT-IDX. 10 WS-SORT-KEY PIC X(15). 10 WS-SORT-DATA PIC X(50). 01 WS-VALIDATION-FIELDS. 05 WS-MIN-VALUE PIC X(20). 05 WS-MAX-VALUE PIC X(20). 05 WS-TEST-VALUE PIC X(20). 05 WS-VALIDATION-RESULT PIC X(10). PROCEDURE DIVISION. ADVANCED-PROCESSING. PERFORM INITIALIZE-CUSTOMER-TABLE PERFORM DEMONSTRATE-BINARY-SEARCH PERFORM DEMONSTRATE-MERGE-OPERATIONS PERFORM DEMONSTRATE-RANGE-VALIDATION PERFORM DEMONSTRATE-DYNAMIC-SORTING STOP RUN. INITIALIZE-CUSTOMER-TABLE. DISPLAY "=== ADVANCED TABLE INITIALIZATION ===" *> Initialize all entries to HIGH-VALUE for sentinel values PERFORM VARYING CUST-IDX FROM 1 BY 1 UNTIL CUST-IDX > 1000 MOVE HIGH-VALUE TO WS-CUST-ID(CUST-IDX) MOVE HIGH-VALUE TO WS-CUST-NAME(CUST-IDX) MOVE HIGH-VALUE TO WS-CUST-STATUS(CUST-IDX) END-PERFORM *> Load sample data (in sorted order) MOVE "CUST000001" TO WS-CUST-ID(1) MOVE "ANDERSON, JAMES" TO WS-CUST-NAME(1) MOVE "A" TO WS-CUST-STATUS(1) MOVE "CUST000015" TO WS-CUST-ID(2) MOVE "BROWN, PATRICIA" TO WS-CUST-NAME(2) MOVE "A" TO WS-CUST-STATUS(2) MOVE "CUST000027" TO WS-CUST-ID(3) MOVE "DAVIS, MICHAEL" TO WS-CUST-NAME(3) MOVE "I" TO WS-CUST-STATUS(3) MOVE "CUST000043" TO WS-CUST-ID(4) MOVE "JOHNSON, LINDA" TO WS-CUST-NAME(4) MOVE "A" TO WS-CUST-STATUS(4) MOVE "CUST000089" TO WS-CUST-ID(5) MOVE "WILLIAMS, ROBERT" TO WS-CUST-NAME(5) MOVE "A" TO WS-CUST-STATUS(5) MOVE 5 TO WS-ENTRIES-LOADED DISPLAY "Customer table initialized with " WS-ENTRIES-LOADED " entries". DEMONSTRATE-BINARY-SEARCH. DISPLAY "=== BINARY SEARCH WITH HIGH-VALUE SENTINELS ===" MOVE "CUST000027" TO WS-SEARCH-KEY PERFORM BINARY-SEARCH-CUSTOMER MOVE "CUST000999" TO WS-SEARCH-KEY PERFORM BINARY-SEARCH-CUSTOMER. BINARY-SEARCH-CUSTOMER. MOVE 0 TO WS-FOUND-INDEX SET CUST-IDX TO 1 *> Binary search with HIGH-VALUE boundary checking PERFORM VARYING CUST-IDX FROM 1 BY 1 UNTIL CUST-IDX > WS-ENTRIES-LOADED OR WS-CUST-ID(CUST-IDX) = HIGH-VALUE OR WS-CUST-ID(CUST-IDX) = WS-SEARCH-KEY OR WS-CUST-ID(CUST-IDX) > WS-SEARCH-KEY END-PERFORM IF CUST-IDX <= WS-ENTRIES-LOADED AND WS-CUST-ID(CUST-IDX) = WS-SEARCH-KEY MOVE CUST-IDX TO WS-FOUND-INDEX DISPLAY "Found customer: " WS-SEARCH-KEY " at position " WS-FOUND-INDEX DISPLAY " Name: " WS-CUST-NAME(CUST-IDX) ELSE DISPLAY "Customer " WS-SEARCH-KEY " not found" END-IF. DEMONSTRATE-MERGE-OPERATIONS. DISPLAY "=== MERGE OPERATIONS WITH HIGH-VALUE ===" *> Initialize sort array with HIGH-VALUE PERFORM VARYING SORT-IDX FROM 1 BY 1 UNTIL SORT-IDX > 500 MOVE HIGH-VALUE TO WS-SORT-KEY(SORT-IDX) MOVE HIGH-VALUE TO WS-SORT-DATA(SORT-IDX) END-PERFORM *> Add data from customer table to sort array PERFORM VARYING CUST-IDX FROM 1 BY 1 UNTIL CUST-IDX > WS-ENTRIES-LOADED OR WS-CUST-ID(CUST-IDX) = HIGH-VALUE MOVE WS-CUST-NAME(CUST-IDX) TO WS-SORT-KEY(CUST-IDX) STRING "ID:" WS-CUST-ID(CUST-IDX) " STATUS:" WS-CUST-STATUS(CUST-IDX) DELIMITED BY SIZE INTO WS-SORT-DATA(CUST-IDX) END-PERFORM *> Add additional data for merge SET SORT-IDX TO 6 MOVE "GARCIA, MARIA" TO WS-SORT-KEY(SORT-IDX) MOVE "ID:CUST000055 STATUS:A" TO WS-SORT-DATA(SORT-IDX) SET SORT-IDX TO 7 MOVE "MARTINEZ, CARLOS" TO WS-SORT-KEY(SORT-IDX) MOVE "ID:CUST000067 STATUS:A" TO WS-SORT-DATA(SORT-IDX) DISPLAY "Merge operation completed with HIGH-VALUE boundaries". DEMONSTRATE-RANGE-VALIDATION. DISPLAY "=== RANGE VALIDATION WITH HIGH-VALUE ===" *> Set up validation range MOVE LOW-VALUE TO WS-MIN-VALUE MOVE HIGH-VALUE TO WS-MAX-VALUE *> Test various values MOVE "MIDDLE VALUE" TO WS-TEST-VALUE PERFORM VALIDATE-RANGE MOVE HIGH-VALUE TO WS-TEST-VALUE PERFORM VALIDATE-RANGE MOVE LOW-VALUE TO WS-TEST-VALUE PERFORM VALIDATE-RANGE. VALIDATE-RANGE. IF WS-TEST-VALUE >= WS-MIN-VALUE AND WS-TEST-VALUE <= WS-MAX-VALUE IF WS-TEST-VALUE = HIGH-VALUE MOVE "MAX-BOUND" TO WS-VALIDATION-RESULT ELSE IF WS-TEST-VALUE = LOW-VALUE MOVE "MIN-BOUND" TO WS-VALIDATION-RESULT ELSE MOVE "VALID" TO WS-VALIDATION-RESULT END-IF ELSE MOVE "INVALID" TO WS-VALIDATION-RESULT END-IF DISPLAY "Validation result: " WS-VALIDATION-RESULT. DEMONSTRATE-DYNAMIC-SORTING. DISPLAY "=== DYNAMIC SORTING WITH HIGH-VALUE MARKERS ===" *> Implement bubble sort with HIGH-VALUE awareness PERFORM BUBBLE-SORT-WITH-HIGH-VALUE DISPLAY "Sorted customer names:" PERFORM VARYING SORT-IDX FROM 1 BY 1 UNTIL SORT-IDX > 10 OR WS-SORT-KEY(SORT-IDX) = HIGH-VALUE DISPLAY " " SORT-IDX ": " WS-SORT-KEY(SORT-IDX) END-PERFORM. BUBBLE-SORT-WITH-HIGH-VALUE. *> Simple bubble sort that respects HIGH-VALUE boundaries PERFORM VARYING I FROM 1 BY 1 UNTIL I > 9 PERFORM VARYING J FROM 1 BY 1 UNTIL J > (10 - I) *> Stop if we hit HIGH-VALUE (end of data) IF WS-SORT-KEY(J) = HIGH-VALUE OR WS-SORT-KEY(J + 1) = HIGH-VALUE EXIT PERFORM END-IF IF WS-SORT-KEY(J) > WS-SORT-KEY(J + 1) PERFORM SWAP-SORT-ENTRIES END-IF END-PERFORM END-PERFORM. SWAP-SORT-ENTRIES. MOVE WS-SORT-KEY(J) TO TEMP-KEY MOVE WS-SORT-DATA(J) TO TEMP-DATA MOVE WS-SORT-KEY(J + 1) TO WS-SORT-KEY(J) MOVE WS-SORT-DATA(J + 1) TO WS-SORT-DATA(J) MOVE TEMP-KEY TO WS-SORT-KEY(J + 1) MOVE TEMP-DATA TO WS-SORT-DATA(J + 1). *> Advanced HIGH-VALUE utility functions CHECK-TABLE-BOUNDARIES. *> Check if table has reached HIGH-VALUE boundary SET CUST-IDX TO 1 PERFORM UNTIL CUST-IDX > WS-TABLE-SIZE OR WS-CUST-ID(CUST-IDX) = HIGH-VALUE SET CUST-IDX UP BY 1 END-PERFORM IF CUST-IDX <= WS-TABLE-SIZE DISPLAY "Table has available space at position " CUST-IDX ELSE DISPLAY "Table is full (no HIGH-VALUE markers found)" END-IF. COMPRESS-TABLE. *> Remove HIGH-VALUE entries from middle of table MOVE 1 TO WRITE-INDEX PERFORM VARYING READ-INDEX FROM 1 BY 1 UNTIL READ-INDEX > WS-TABLE-SIZE IF WS-CUST-ID(READ-INDEX) NOT = HIGH-VALUE IF WRITE-INDEX NOT = READ-INDEX MOVE WS-CUSTOMER(READ-INDEX) TO WS-CUSTOMER(WRITE-INDEX) END-IF ADD 1 TO WRITE-INDEX END-IF END-PERFORM *> Fill remaining positions with HIGH-VALUE PERFORM VARYING CUST-IDX FROM WRITE-INDEX BY 1 UNTIL CUST-IDX > WS-TABLE-SIZE MOVE HIGH-VALUE TO WS-CUST-ID(CUST-IDX) MOVE HIGH-VALUE TO WS-CUST-NAME(CUST-IDX) MOVE HIGH-VALUE TO WS-CUST-STATUS(CUST-IDX) END-PERFORM SUBTRACT 1 FROM WRITE-INDEX MOVE WRITE-INDEX TO WS-ENTRIES-LOADED DISPLAY "Table compressed. Active entries: " WS-ENTRIES-LOADED.

Interactive Tutorial

Hands-On Exercise: HIGH-VALUE Operations
Practice using HIGH-VALUE in various data processing scenarios

Exercise 1: Table Initialization and Search

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
*> Initialize a product table with HIGH-VALUE sentinels 01 PRODUCT-TABLE. 05 PRODUCT-ENTRY OCCURS 50 TIMES. 10 PRODUCT-CODE PIC X(10). 10 PRODUCT-NAME PIC X(25). 10 PRODUCT-PRICE PIC 9(5)V99. *> Initialize table PERFORM VARYING I FROM 1 BY 1 UNTIL I > 50 MOVE HIGH-VALUE TO PRODUCT-CODE(I) MOVE HIGH-VALUE TO PRODUCT-NAME(I) MOVE 0 TO PRODUCT-PRICE(I) END-PERFORM. *> Add sample data MOVE "PROD001" TO PRODUCT-CODE(1) MOVE "LAPTOP COMPUTER" TO PRODUCT-NAME(1) MOVE 1299.99 TO PRODUCT-PRICE(1) MOVE "PROD002" TO PRODUCT-CODE(2) MOVE "WIRELESS MOUSE" TO PRODUCT-NAME(2) MOVE 29.99 TO PRODUCT-PRICE(2) *> Search for end of data PERFORM VARYING I FROM 1 BY 1 UNTIL I > 50 OR PRODUCT-CODE(I) = HIGH-VALUE END-PERFORM. SUBTRACT 1 FROM I. DISPLAY "Number of products: " I.

Exercise 2: Data Validation with Boundaries

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
*> Validate input against HIGH-VALUE boundary 01 INPUT-VALIDATION. 05 USER-INPUT PIC X(20). 05 VALIDATION-FLAG PIC X. PROCEDURE DIVISION. VALIDATE-INPUT. ACCEPT USER-INPUT IF USER-INPUT = HIGH-VALUE DISPLAY "Error: Input contains maximum value" MOVE 'N' TO VALIDATION-FLAG ELSE IF USER-INPUT = LOW-VALUE DISPLAY "Error: Input contains minimum value" MOVE 'N' TO VALIDATION-FLAG ELSE IF USER-INPUT = SPACES DISPLAY "Error: Input is empty" MOVE 'N' TO VALIDATION-FLAG ELSE DISPLAY "Input is valid: " USER-INPUT MOVE 'Y' TO VALIDATION-FLAG END-IF.

Character Set Considerations

Character Set Values

ASCII Character Set

In ASCII systems, HIGH-VALUE typically represents character 255 (X'FF')

cobol
1
2
3
4
5
*> ASCII HIGH-VALUE MOVE HIGH-VALUE TO WS-FIELD *> Sets to X'FF' IF WS-FIELD = X'FF' DISPLAY "Field contains ASCII HIGH-VALUE" END-IF

EBCDIC Character Set

In EBCDIC systems, HIGH-VALUE represents character 255 (X'FF')

cobol
1
2
3
4
5
*> EBCDIC HIGH-VALUE MOVE HIGH-VALUES TO WS-FIELD *> Sets to X'FF' IF WS-FIELD = X'FF' DISPLAY "Field contains EBCDIC HIGH-VALUE" END-IF

Best Practices

Knowledge Check

Test Your Understanding

Question 1: Purpose

What is the primary purpose of HIGH-VALUE in COBOL programming?

Answer: HIGH-VALUE represents the highest possible character value in the character set, used for boundary testing, table initialization, data validation, and establishing upper limits in comparisons and sorting operations.

Question 2: Usage

How can HIGH-VALUE be used in table processing?

Answer: HIGH-VALUE can initialize table entries as sentinels, mark the end of valid data, facilitate binary searches, and serve as boundary markers for sorting and merging operations.

Question 3: Comparison

How does HIGH-VALUE compare to other character values?

Answer: HIGH-VALUE is greater than all other character values in the character set. Any comparison with HIGH-VALUE will show that HIGH-VALUE is the maximum possible value.

Common Patterns

Sentinel Value Pattern
cobol
1
2
3
4
5
6
*> Use HIGH-VALUE as table sentinel PERFORM VARYING I FROM 1 BY 1 UNTIL I > TABLE-SIZE OR TABLE-ENTRY(I) = HIGH-VALUE PROCESS TABLE-ENTRY(I) END-PERFORM.
Boundary Testing Pattern
cobol
1
2
3
4
5
6
7
8
*> Validate against maximum value IF INPUT-VALUE = HIGH-VALUE DISPLAY "Error: Maximum value detected" ELSE IF INPUT-VALUE > VALID-MAX DISPLAY "Error: Value exceeds maximum" ELSE PERFORM PROCESS-VALID-INPUT END-IF.

Frequently Asked Questions