IBM DOS/VS COBOL has a TRANSFORM statement with the following syntax:
TRANSFORM identifier-1 CHARACTERS FROM pattern-1 TO pattern-2
Each pattern is one of the following:
ZERO ZEROS ZEROES SPACE SPACES QUOTE QUOTES LOW-VALUE LOW-VALUES HIGH-VALUE HIGH-VALUES nonnumeric-literal identifier-2
identifier-2 must not be more than 255 characters long. If it is more than 255 characters long, the results in IBM DOS/VS COBOL are undefined; in ACUCOBOL-GT only the first 255 characters are used.
Each figurative constant (ZERO, ZEROS, ZEROES, SPACE, SPACES, QUOTE, QUOTES, LOW-VALUE, LOW-VALUES, HIGH-VALUE and HIGH-VALUES) is equivalent to a one-character nonnumeric literal containing the associated character. For example, ZERO is equivalent to 0 and HIGH-VALUE is equivalent to xFF.
One of the following conditions must hold:
The effect of the TRANSFORM statement on the contents of identifier-1 is undefined if neither of these conditions holds. The effect on the contents of identifier-1 is also undefined if pattern-1 contains duplicate characters. However, the statement finishes in a reasonable time and control passes normally to the next statement in any case.
At run time, every character in identifier-1 that matches a character in pattern-1 is replaced by the character in the corresponding position in pattern-2. If there is no corresponding position, because pattern-2 is shorter than pattern-1, then it is replaced by the sole character in pattern-2.