RPG Gets the ‘Splits’ with Latest TRs
May 5, 2021 Alex Woodie
The latest batch of Technology Refreshes (TRs) for IBM i 7.4 and 7.3 wasn’t a barnburner by any means. But the twice-yearly update brought a little bit of new stuff for everybody, including RPG programmers, who gain three new built-in functions, one of which is called %SPLIT.
RPG remains the most popular language on the IBM i platform, with a solid 87 percent share, according to the recent HelpSystems Marketplace Report, nearly twice the share of Java and over four times the share of COBOL. Good old Report Program Generator, for what it’s worth, is the closest thing to the default language for the platform, as it’s basically synonymous with IBM i development.
The three new built-in functions that IBM delivered with IBM i 7.4 TR4 and 7.3 TR10, as well as a new keyword, will help IBM i developers do even more with the language. These new functions include:
- %LOWER and %UPPER built-in functions to convert contents of a char variable from lowercase to uppercase or vice versa;
- %SPLIT built-in function splits a string into an array;
- %MAXARR and %MINARR return the index of the maximum or minimum element of an array.
Barbara Morris, who heads up RPG compiler development at the IBM lab in Toronto, Ontario, spelled out the specifics in a recent blog post at the RPG Café.
According to Morris’ post, the %LOWER and %UPPER functions will be useful to put entries into the proper case. For example, if a first name was originally entered with uppercase letters, the %LOWER function can convert them to lower case. To keep some of the characters uppercase, like the first character of a name, the start and stop operands can be used, Morris points out.
The new %SPLIT function can also be used to break up a string into a collection of sub-strings, or an array. By default, Morris writes, %SPLIT splits the string at blanks. The second separator parameters, she writes, can be the list of characters the developer wants to split at. Users can select any character, including commas, dashes, periods, etc.
So for a string with the value of “a bcd ef” the %SPLIT function by default would return an array with the values “a,” “bcd,” and “ef.” For The developer can use FOR-EACH to process the result of %SPLIT, Morris writes.
One other enhancement in the TRs, which Morris covers in the RPG Café but which did not appear in the IBM announcement letters, is stricter rules for keys.
“With the Control keyword EXPROPTS(*STRICTKEYS), the rules for the search arguments you can specify with a list of keys or %KDS are more strict,” Morris writes. “By default, the data type of the search argument has to match the key, but the length and CCSID can be different. For example, the length of a numeric search argument can be longer than the key, which can lead to a numeric overflow error at run time.”
With the new EXPROPTS(*STRICTKEYS) keyword, the compiler does not allow the search argument to be longer than the key, Morris writes.
The new features are being delivered in the RPG compilers, which are shipped in IBM’s Rational Development Studio (RDS) offering, or 5770-WDS. For IBM i 7.3, users need to apply PTFs SI76100 and SI76098 to get the necessary functionality for the ILE RPG compiler and the ILE RPG runtime, respectively. For IBM i 7.4, PTFs SI76101, SI76109, and SI76099 are needed for the compiler and runtimes, respectively.