Skip to Content

Using Regular Expressions to replace text in your program

Estimated Reading Time: 2 Minutes

Regular expressions can be used to replace text in your programs without changing your code. You do this by setting iscobol.compiler.regexp and compiling your code. The format is:

    iscobol.compiler.regexp=<existing-value> <new-value> <existing-value> <new-value> ...
Some common regular expression characters we use are:
+------+-------------------------------------------+------------------------------------------------+
| (?i) | Makes the following text case insensitive | (?i)STOP will catch "Stop", "STOP", and "stop" |
+------+-------------------------------------------+------------------------------------------------+
| \\s+ | Space or spaces                           | Indicates one or more spaces in the text       |
+------+-------------------------------------------+------------------------------------------------+
| .    | Period	                                   | Replaces one character                         |
+------+-------------------------------------------+------------------------------------------------+

Examples:

Comment out a line

    iscobol.compiler.regexp=" RECORD" " * RECORD"
    iscobol.compiler.regexp="RECORDING MODE" "*> RECORDING MODE"

Replace all 'STOP RUN's with 'GOBACK', ignoring letter case and spacing
    iscobol.compiler.regexp="(?i)(STOP)\\s+(RUN)" "GOBACK"

Change the name of copybooks
    iscobol.compiler.regexp="acugui.def" "isgui.def" "acucobol.def" "iscobol.def" 
Another way to do this and make it more readable is to use the line extension backslash:
    iscobol.compiler.regexp="acugui.def" "isgui.def" \
                            "acucobol.def" "iscobol.def" \
                            "crtvars.def" "iscrt.def"

Replace text with spaces
A program that uses the special names "call-convention" would need to remove this line, since isCOBOL uses a configuration variable instead.
So this regular expression replaces "call-convention is dynmaicStdCall" and "call-convention is WINAPI" with spaces.

    iscobol.compiler.regexp="(?i)(dynamicStdCall)" " " \
                            "(?i)(call-convention)\\s+(66)\\s+(is)" " " \
                            "(?i)(WINAPI)" " " \
                            "(?i)(call-convention)\\s+(74)\\s+(is)" " "
Notes: - You can only specify this configuration variable one time, passing it a string of all of the regular expressions you need. If you set it twice, the second one will overwrite the first one. This can get a bit long but remember that you can use the line continuation backslash "\" at the end of a line. - This is a compiler configuration - it requires you to compile or recompile with it set.

Using Regular Expressions to replace text in your program

Powered by PHPKB (Knowledge Base Software)