Character sets in COBOL define the collection of characters that can be used in text data processing. They determine valid characters, their ordering for sorting operations, and the collating sequence used for comparisons and text processing throughout COBOL applications.
Character sets define the alphabet of characters available for text processing, including alphabetic characters, numeric digits, special symbols, and their ordering relationships. Proper character set definition ensures consistent text processing and sorting behavior.
Alphabetic characters include letters of the alphabet, both uppercase and lowercase, used for text data representation.
1234567891011121314151617181920212223242526272829303132333435363738WORKING-STORAGE SECTION. 01 ALPHABETIC-CHARS. 05 UPPERCASE-LETTERS PIC X(26) VALUE 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'. 05 LOWERCASE-LETTERS PIC X(26) VALUE 'abcdefghijklmnopqrstuvwxyz'. 05 MIXED-CASE-LETTERS PIC X(52) VALUE 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'. 01 ALPHABETIC-VALIDATION. 05 CHAR-TO-VALIDATE PIC X(1). 05 IS-ALPHABETIC PIC X(1). 88 ALPHABETIC-VALID VALUE 'Y'. 88 ALPHABETIC-INVALID VALUE 'N'. PROCEDURE DIVISION. VALIDATE-ALPHABETIC-CHAR. MOVE 'N' TO IS-ALPHABETIC PERFORM CHECK-UPPERCASE IF ALPHABETIC-INVALID PERFORM CHECK-LOWERCASE END-IF. CHECK-UPPERCASE. PERFORM VARYING INDEX FROM 1 BY 1 UNTIL INDEX > 26 IF UPPERCASE-LETTERS(INDEX:1) = CHAR-TO-VALIDATE MOVE 'Y' TO IS-ALPHABETIC EXIT PERFORM END-IF END-PERFORM. CHECK-LOWERCASE. PERFORM VARYING INDEX FROM 1 BY 1 UNTIL INDEX > 26 IF LOWERCASE-LETTERS(INDEX:1) = CHAR-TO-VALIDATE MOVE 'Y' TO IS-ALPHABETIC EXIT PERFORM END-IF END-PERFORM.
Numeric characters include digits 0-9 used for numeric data representation and calculations.
12345678910111213141516171819202122WORKING-STORAGE SECTION. 01 NUMERIC-CHARS. 05 DIGITS PIC X(10) VALUE '0123456789'. 05 HEX-DIGITS PIC X(16) VALUE '0123456789ABCDEF'. 05 BINARY-DIGITS PIC X(2) VALUE '01'. 01 NUMERIC-VALIDATION. 05 CHAR-TO-CHECK PIC X(1). 05 IS-NUMERIC PIC X(1). 88 NUMERIC-VALID VALUE 'Y'. 88 NUMERIC-INVALID VALUE 'N'. PROCEDURE DIVISION. VALIDATE-NUMERIC-CHAR. MOVE 'N' TO IS-NUMERIC PERFORM VARYING INDEX FROM 1 BY 1 UNTIL INDEX > 10 IF DIGITS(INDEX:1) = CHAR-TO-CHECK MOVE 'Y' TO IS-NUMERIC EXIT PERFORM END-IF END-PERFORM.
Special characters include punctuation marks, symbols, and control characters used for formatting and data representation.
1234567891011121314151617181920212223242526272829303132WORKING-STORAGE SECTION. 01 SPECIAL-CHARS. 05 PUNCTUATION PIC X(10) VALUE '.,;:!?-()'. 05 SYMBOLS PIC X(10) VALUE '@#$%&*+=/'. 05 WHITESPACE PIC X(3) VALUE ' '. 05 CONTROL-CHARS PIC X(5) VALUE X'000D0A09'. 01 SPECIAL-VALIDATION. 05 CHAR-TO-EXAMINE PIC X(1). 05 IS-SPECIAL PIC X(1). 88 SPECIAL-VALID VALUE 'Y'. 88 SPECIAL-INVALID VALUE 'N'. PROCEDURE DIVISION. VALIDATE-SPECIAL-CHAR. MOVE 'N' TO IS-SPECIAL PERFORM CHECK-PUNCTUATION IF SPECIAL-INVALID PERFORM CHECK-SYMBOLS END-IF IF SPECIAL-INVALID PERFORM CHECK-WHITESPACE END-IF. CHECK-PUNCTUATION. PERFORM VARYING INDEX FROM 1 BY 1 UNTIL INDEX > 10 IF PUNCTUATION(INDEX:1) = CHAR-TO-EXAMINE MOVE 'Y' TO IS-SPECIAL EXIT PERFORM END-IF END-PERFORM.
Define standard collating sequences for consistent character ordering and comparison operations.
123456789101112131415161718192021222324ENVIRONMENT DIVISION. CONFIGURATION SECTION. SPECIAL-NAMES. COLLATING-SEQUENCE IS STANDARD-COLLATING ALPHABET STANDARD-COLLATING IS 'A' THROUGH 'Z' 'a' THROUGH 'z' '0' THROUGH '9' SPACE '.' ',' ';' ':' '!' '?' '-' '(' ')'. DATA DIVISION. WORKING-STORAGE SECTION. 01 COLLATING-SEQUENCE-DATA. 05 COLLATING-TABLE PIC X(100). 05 COLLATING-INDEX PIC 9(3). 05 COLLATING-ORDER PIC 9(3). PROCEDURE DIVISION. INITIALIZE-COLLATING-SEQUENCE. MOVE 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' TO COLLATING-TABLE(1:26) MOVE 'abcdefghijklmnopqrstuvwxyz' TO COLLATING-TABLE(27:26) MOVE '0123456789' TO COLLATING-TABLE(53:10) MOVE ' .,;:!?-()' TO COLLATING-TABLE(63:10).
Define custom collating sequences for specific business requirements and sorting needs.
1234567891011121314151617181920212223242526272829303132ENVIRONMENT DIVISION. CONFIGURATION SECTION. SPECIAL-NAMES. COLLATING-SEQUENCE IS CUSTOM-COLLATING ALPHABET CUSTOM-COLLATING IS '0' THROUGH '9' 'A' THROUGH 'Z' 'a' THROUGH 'z' SPACE '-' '.' ',' '(' ')'. WORKING-STORAGE SECTION. 01 CUSTOM-COLLATING-DATA. 05 CUSTOM-TABLE PIC X(100). 05 CUSTOM-ORDER PIC 9(3). 05 CUSTOM-POSITION PIC 9(3). PROCEDURE DIVISION. INITIALIZE-CUSTOM-COLLATING. MOVE '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ' TO CUSTOM-TABLE(1:36) MOVE 'abcdefghijklmnopqrstuvwxyz' TO CUSTOM-TABLE(37:26) MOVE ' -.,()' TO CUSTOM-TABLE(63:6). FIND-COLLATING-POSITION. MOVE 0 TO CUSTOM-POSITION PERFORM VARYING CUSTOM-INDEX FROM 1 BY 1 UNTIL CUSTOM-INDEX > 100 IF CUSTOM-TABLE(CUSTOM-INDEX:1) = SEARCH-CHAR MOVE CUSTOM-INDEX TO CUSTOM-POSITION EXIT PERFORM END-IF END-PERFORM.
Validate text data against complete character set definitions to ensure data integrity.
123456789101112131415161718192021222324252627282930313233343536373839404142WORKING-STORAGE SECTION. 01 COMPLETE-CHARSET. 05 VALID-CHARS PIC X(100) VALUE 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 .,;:!?-()'. 05 CHARSET-LENGTH PIC 9(3) VALUE 100. 01 VALIDATION-RESULTS. 05 VALIDATION-STATUS PIC X(1). 88 VALIDATION-PASSED VALUE 'P'. 88 VALIDATION-FAILED VALUE 'F'. 05 INVALID-COUNT PIC 9(3) VALUE 0. 05 MAX-INVALID PIC 9(3) VALUE 10. PROCEDURE DIVISION. VALIDATE-COMPLETE-CHARSET. MOVE 'P' TO VALIDATION-STATUS MOVE 0 TO INVALID-COUNT PERFORM VARYING CHAR-INDEX FROM 1 BY 1 UNTIL CHAR-INDEX > INPUT-LENGTH PERFORM VALIDATE-SINGLE-CHAR END-PERFORM IF INVALID-COUNT > MAX-INVALID MOVE 'F' TO VALIDATION-STATUS END-IF. VALIDATE-SINGLE-CHAR. MOVE INPUT-TEXT(CHAR-INDEX:1) TO CURRENT-CHAR MOVE 'N' TO CHAR-VALID-FLAG PERFORM VARYING VALID-INDEX FROM 1 BY 1 UNTIL VALID-INDEX > CHARSET-LENGTH IF VALID-CHARS(VALID-INDEX:1) = CURRENT-CHAR MOVE 'Y' TO CHAR-VALID-FLAG EXIT PERFORM END-IF END-PERFORM IF CHAR-VALID-FLAG = 'N' ADD 1 TO INVALID-COUNT END-IF.
Convert between different character sets for system interoperability and data exchange.
1234567891011121314151617181920212223242526272829303132333435363738394041WORKING-STORAGE SECTION. 01 CHARSET-CONVERSION. 05 SOURCE-CHARSET PIC X(20). 05 TARGET-CHARSET PIC X(20). 05 CONVERSION-TABLE PIC X(256). 05 CONVERSION-STATUS PIC X(1). 88 CONVERSION-SUCCESS VALUE 'S'. 88 CONVERSION-FAILED VALUE 'F'. 01 CONVERSION-DATA. 05 INPUT-TEXT PIC X(100). 05 OUTPUT-TEXT PIC X(100). 05 TEXT-LENGTH PIC 9(3). PROCEDURE DIVISION. CONVERT-CHARSET. PERFORM INITIALIZE-CONVERSION-TABLE PERFORM CONVERT-TEXT PERFORM VALIDATE-CONVERSION. INITIALIZE-CONVERSION-TABLE. IF SOURCE-CHARSET = 'EBCDIC' AND TARGET-CHARSET = 'ASCII' PERFORM INITIALIZE-EBCDIC-TO-ASCII-TABLE ELSE IF SOURCE-CHARSET = 'ASCII' AND TARGET-CHARSET = 'EBCDIC' PERFORM INITIALIZE-ASCII-TO-EBCDIC-TABLE ELSE MOVE 'F' TO CONVERSION-STATUS END-IF END-IF. CONVERT-TEXT. PERFORM VARYING CONV-INDEX FROM 1 BY 1 UNTIL CONV-INDEX > TEXT-LENGTH PERFORM CONVERT-SINGLE-CHAR END-PERFORM. CONVERT-SINGLE-CHAR. MOVE INPUT-TEXT(CONV-INDEX:1) TO SOURCE-CHAR PERFORM FIND-TARGET-CHAR MOVE TARGET-CHAR TO OUTPUT-TEXT(CONV-INDEX:1).
Implement character sets for multiple languages and international text processing requirements.
1234567891011121314151617181920212223242526272829303132WORKING-STORAGE SECTION. 01 INTERNATIONAL-CHARSETS. 05 ENGLISH-CHARSET PIC X(100) VALUE 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 .,;:!?-()'. 05 SPANISH-CHARSET PIC X(120) VALUE 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 .,;:!?-()ñÑáéíóúü'. 05 FRENCH-CHARSET PIC X(120) VALUE 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 .,;:!?-()àâäçéèêëïîôùûü'. 05 GERMAN-CHARSET PIC X(120) VALUE 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 .,;:!?-()äöüß'. 01 LANGUAGE-SELECTION. 05 CURRENT-LANGUAGE PIC X(2). 88 ENGLISH VALUE 'EN'. 88 SPANISH VALUE 'ES'. 88 FRENCH VALUE 'FR'. 88 GERMAN VALUE 'DE'. PROCEDURE DIVISION. SELECT-LANGUAGE-CHARSET. EVALUATE CURRENT-LANGUAGE WHEN 'EN' MOVE ENGLISH-CHARSET TO ACTIVE-CHARSET WHEN 'ES' MOVE SPANISH-CHARSET TO ACTIVE-CHARSET WHEN 'FR' MOVE FRENCH-CHARSET TO ACTIVE-CHARSET WHEN 'DE' MOVE GERMAN-CHARSET TO ACTIVE-CHARSET WHEN OTHER MOVE ENGLISH-CHARSET TO ACTIVE-CHARSET END-EVALUATE.