MainframeMaster

COBOL Tutorial

COBOL FUNCTION Keyword

The FUNCTION keyword represents a sophisticated built-in operation access mechanism within COBOL programming environments, serving as the primary gateway for utilizing intrinsic functions that provide comprehensive mathematical computations, string manipulation capabilities, date and time processing operations, and data conversion utilities. This keyword embodies the principles of modular programming by offering pre-built, tested, and optimized functionality that eliminates the need for custom implementation of common operations while ensuring consistent behavior across different COBOL implementations and maintaining high performance standards in enterprise applications that require reliable computational services and data processing capabilities.

Syntax and Usage

FUNCTION Keyword Syntax
cobol
1
2
3
4
5
6
7
8
FUNCTION function-name FUNCTION function-name(argument1) FUNCTION function-name(argument1, argument2, ...) *> Examples: MOVE FUNCTION CURRENT-DATE TO WS-DATE COMPUTE WS-RESULT = FUNCTION SQRT(WS-NUMBER) MOVE FUNCTION UPPER-CASE(WS-STRING) TO WS-UPPER-STRING
Built-in Functions
Mathematical
String Processing

Common Intrinsic Functions

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
IDENTIFICATION DIVISION. PROGRAM-ID. FUNCTION-EXAMPLES. DATA DIVISION. WORKING-STORAGE SECTION. 01 NUMERIC-VALUES. 05 WS-NUMBER-1 PIC 9(5)V99 VALUE 123.45. 05 WS-NUMBER-2 PIC 9(5)V99 VALUE 678.90. 05 WS-RESULT PIC 9(7)V99. 05 WS-INTEGER PIC 9(5). 01 STRING-VALUES. 05 WS-INPUT-STRING PIC X(50) VALUE 'Hello World'. 05 WS-UPPER-STRING PIC X(50). 05 WS-LOWER-STRING PIC X(50). 05 WS-STRING-LENGTH PIC 9(3). 01 DATE-TIME-VALUES. 05 WS-CURRENT-DATE PIC X(21). 05 WS-CURRENT-TIME PIC X(8). 05 WS-JULIAN-DATE PIC 9(7). PROCEDURE DIVISION. MAIN-PROCESSING. *> Mathematical Functions COMPUTE WS-RESULT = FUNCTION MAX(WS-NUMBER-1, WS-NUMBER-2) DISPLAY 'Maximum value: ' WS-RESULT COMPUTE WS-RESULT = FUNCTION MIN(WS-NUMBER-1, WS-NUMBER-2) DISPLAY 'Minimum value: ' WS-RESULT COMPUTE WS-RESULT = FUNCTION SQRT(WS-NUMBER-1) DISPLAY 'Square root of ' WS-NUMBER-1 ': ' WS-RESULT COMPUTE WS-INTEGER = FUNCTION INTEGER(WS-NUMBER-1) DISPLAY 'Integer part of ' WS-NUMBER-1 ': ' WS-INTEGER COMPUTE WS-RESULT = FUNCTION ABS(-456.78) DISPLAY 'Absolute value: ' WS-RESULT *> String Functions MOVE FUNCTION UPPER-CASE(WS-INPUT-STRING) TO WS-UPPER-STRING DISPLAY 'Uppercase: ' WS-UPPER-STRING MOVE FUNCTION LOWER-CASE(WS-INPUT-STRING) TO WS-LOWER-STRING DISPLAY 'Lowercase: ' WS-LOWER-STRING COMPUTE WS-STRING-LENGTH = FUNCTION LENGTH(WS-INPUT-STRING) DISPLAY 'String length: ' WS-STRING-LENGTH *> Date and Time Functions MOVE FUNCTION CURRENT-DATE TO WS-CURRENT-DATE DISPLAY 'Current date: ' WS-CURRENT-DATE MOVE FUNCTION WHEN-COMPILED TO WS-CURRENT-TIME DISPLAY 'Compilation time: ' WS-CURRENT-TIME COMPUTE WS-JULIAN-DATE = FUNCTION DATE-OF-INTEGER(2024001) DISPLAY 'Julian date: ' WS-JULIAN-DATE STOP RUN.

Function Categories

Mathematical Functions
  • • ABS - Absolute value
  • • MAX - Maximum value
  • • MIN - Minimum value
  • • MOD - Modulo operation
  • • SQRT - Square root
  • • SIN, COS, TAN - Trigonometric
  • • LOG, LOG10 - Logarithms
  • • INTEGER - Integer part
String Functions
  • • UPPER-CASE - Convert to uppercase
  • • LOWER-CASE - Convert to lowercase
  • • LENGTH - String length
  • • REVERSE - Reverse string
  • • TRIM - Remove spaces
  • • CHAR - Character from code
  • • ORD - Character code
  • • NUMVAL - Numeric value

Interactive Tutorial

Hands-On Exercise: Function Applications
Practice using intrinsic functions for common programming tasks

Exercise 1: Data Validation

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
01 INPUT-DATA. 05 USER-INPUT PIC X(20). 05 NUMERIC-VALUE PIC 9(8)V99. 05 VALIDATION-RESULT PIC X(10). PROCEDURE DIVISION. *> Validate and convert input IF FUNCTION TEST-NUMVAL(USER-INPUT) = 0 COMPUTE NUMERIC-VALUE = FUNCTION NUMVAL(USER-INPUT) MOVE 'VALID' TO VALIDATION-RESULT ELSE MOVE 'INVALID' TO VALIDATION-RESULT END-IF *> Check range using MAX/MIN IF NUMERIC-VALUE = FUNCTION MAX(NUMERIC-VALUE, 1000) AND NUMERIC-VALUE = FUNCTION MIN(NUMERIC-VALUE, 9999) DISPLAY 'Value is within acceptable range' END-IF.

Exercise 2: Text Processing

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
01 TEXT-PROCESSING. 05 INPUT-TEXT PIC X(100). 05 PROCESSED-TEXT PIC X(100). 05 WORD-COUNT PIC 9(3) VALUE 0. PROCEDURE DIVISION. *> Normalize text case MOVE FUNCTION UPPER-CASE( FUNCTION TRIM(INPUT-TEXT)) TO PROCESSED-TEXT *> Count words (simplified) PERFORM VARYING WS-INDEX FROM 1 BY 1 UNTIL WS-INDEX > FUNCTION LENGTH(PROCESSED-TEXT) IF PROCESSED-TEXT(WS-INDEX:1) = SPACE AND PROCESSED-TEXT(WS-INDEX + 1:1) NOT = SPACE ADD 1 TO WORD-COUNT END-IF END-PERFORM.

Advanced Function 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
IDENTIFICATION DIVISION. PROGRAM-ID. ADVANCED-FUNCTIONS. DATA DIVISION. WORKING-STORAGE SECTION. 01 STATISTICAL-DATA. 05 VALUES-ARRAY OCCURS 10 TIMES PIC 9(5)V99. 05 ARRAY-INDEX PIC 9(2). 05 TOTAL-SUM PIC 9(7)V99. 05 AVERAGE-VALUE PIC 9(5)V99. 05 VARIANCE PIC 9(7)V99. 01 DATE-CALCULATIONS. 05 START-DATE PIC 9(8). 05 END-DATE PIC 9(8). 05 DAYS-DIFFERENCE PIC 9(5). 05 BUSINESS-DAYS PIC 9(5). PROCEDURE DIVISION. ADVANCED-PROCESSING. *> Statistical calculations using functions COMPUTE TOTAL-SUM = FUNCTION SUM(VALUES-ARRAY(ALL)) COMPUTE AVERAGE-VALUE = TOTAL-SUM / 10 *> Find maximum and minimum values DISPLAY 'Maximum value: ' FUNCTION MAX(VALUES-ARRAY(ALL)) DISPLAY 'Minimum value: ' FUNCTION MIN(VALUES-ARRAY(ALL)) *> Calculate variance PERFORM VARYING ARRAY-INDEX FROM 1 BY 1 UNTIL ARRAY-INDEX > 10 COMPUTE VARIANCE = VARIANCE + FUNCTION ABS(VALUES-ARRAY(ARRAY-INDEX) - AVERAGE-VALUE) ** 2 END-PERFORM COMPUTE VARIANCE = VARIANCE / 10 *> Date arithmetic MOVE FUNCTION CURRENT-DATE(1:8) TO START-DATE COMPUTE END-DATE = FUNCTION INTEGER-OF-DATE( FUNCTION DATE-OF-INTEGER(START-DATE) + 30) COMPUTE DAYS-DIFFERENCE = FUNCTION INTEGER-OF-DATE(END-DATE) - FUNCTION INTEGER-OF-DATE(START-DATE) DISPLAY 'Days between dates: ' DAYS-DIFFERENCE STOP RUN.

Best Practices

Knowledge Check

Test Your Understanding

Question 1: Function Syntax

What's the correct syntax to get the length of a string variable?

Answer: FUNCTION LENGTH(string-variable) returns the length of the string including trailing spaces.

Question 2: Mathematical Functions

How do you find the maximum value between three numbers?

Answer: FUNCTION MAX(number1, number2, number3) or use nested MAX functions: FUNCTION MAX(FUNCTION MAX(number1, number2), number3).

Question 3: Date Functions

What function provides the current system date and time?

Answer: FUNCTION CURRENT-DATE returns a 21-character string containing current date, time, and time zone information.

Common Patterns

Data Validation
cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
01 INPUT-VALIDATION. 05 USER-INPUT PIC X(20). 05 CLEAN-INPUT PIC X(20). PROCEDURE DIVISION. *> Clean and validate input MOVE FUNCTION TRIM( FUNCTION UPPER-CASE(USER-INPUT)) TO CLEAN-INPUT IF FUNCTION TEST-NUMVAL(CLEAN-INPUT) = 0 DISPLAY 'Valid numeric input' ELSE DISPLAY 'Invalid input' END-IF.
Statistical Analysis
cobol
1
2
3
4
5
6
7
8
9
10
11
01 SALES-DATA OCCURS 12 TIMES PIC 9(7)V99. 01 STATISTICS. 05 TOTAL-SALES PIC 9(9)V99. 05 AVERAGE-SALES PIC 9(7)V99. PROCEDURE DIVISION. COMPUTE TOTAL-SALES = FUNCTION SUM(SALES-DATA(ALL)) COMPUTE AVERAGE-SALES = TOTAL-SALES / 12 DISPLAY 'Highest month: ' FUNCTION MAX(SALES-DATA(ALL)) DISPLAY 'Lowest month: ' FUNCTION MIN(SALES-DATA(ALL)).

Frequently Asked Questions