There are two operations codes (RPG/400) or built-in functions (RPG IV) that some of us don't realize are there. For RPG/400 they are XFOOT and XLATE, and in RPG IV they are %XFOOT and %XLATE.
These two operations codes or functions can provide you with powerful functionality with only few lines of code. I have found them very useful and want to take this opportunity to explain each of these "X" factors in more detail.
First, lets take the XFOOT / %XFOOT function. This function takes the elements of an array in your program and totals all the elements. Say we're creating a report for a rolling 12 months to print the customers' revenue. We want to display each month's total revenue across 12 columns and then print the grand total in the thirteenth column. In RPG/400 we could code this as follows:
E REV 12 9 2 Revenue C KLCP SETLLCUST C X DOUEQ12 C *IN81 OREQ *ON C KLCP READECUST 81 C *IN81 IFEQ *OFF C* C** Load the customer array C* C ADD 1 Y 30 C Z-ADDCUREVN REV,Y C ENDIF C ENDDO C* C** Now sum the total for this customer C* C XFOOTREV @TOTR 92
The value in @TOTR is now the grand total for the past 12 months or as many months the customer had. This is a much simpler way than adding to a grand total field inside the do loop.
The second function in the "X" factor is XLATE / %XLATE. This function has saved countless hours of frustration when used. What the function does is translate data in an alpha field when found in the "From" set to the "To" set.
As an example, lets say we want to convert a string from mixed or lower case to upper case. By defining the "from" value and the "to" value as constants, a single line of code will translate the string for you. Only characters found within the string that match characters found in the "From" set will be translated.
Lets look at an RPG IV example on translating a string from lower or mixed space to upper case. Our code would look as follows:
D UPPER C 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' D LOWER C 'abcdefghijklmnopqrstuvwxyz' D DATA S 10A inz('Mixed Case') /FREE DATA = %XLATE(LOWER:UPPER:DATA) // DATA now contains "MIXED CASE" DATA = %LATE(UPPER:LOWER:DATA:7) // DATA now contains "MIXED case" /END-FREE
The 7 in the third parameter is the starting position of the %XLATE function. The starting position is optional.
As another example, lets create a coma-delimitated file that will export to the IFS from our customer file. It would be challenging if some of the data within the customer file contained comas. This would cause the data to break columns where you don't expect.
If we wanted to remove any comas found in the customer address file to a "-" we would enter the following code:
/FREE // DATA Contains "Rochester,MN 02546" DATA = %XLATE(',':'-':DATA) // DATA now contains "Rochester-MN 02546" /END-FREE
As you can see, the "X" factors are very powerful functions to incorporate into your programs. They are easy to use and simple to maintain.
For more information on the above functions, please refer to http://www-1.ibm.com/servers/eserver/iseries/library/.
About the author: John Kohan is a senior programmer analyst at CT Codeworks. He is also an adjunct instructor teaching AS/400 classes at his local state collage. As one of search400's site expert John also participates in our Ask the Expert feature. If you have a question for him, you may submit it.
- The Best Web Links on Development: Tips, tutorials and more.
- Ask your programmer questions -- or help out your peers by answering them -- in our live discussion forums.
- Ask the Experts yourself: Our programmer gurus are waiting to answer your technical questions.
- What do you think of this tip? Send us your comments -- good or bad -- to firstname.lastname@example.org