Problem solve Get help with specific problems with your technologies, process and projects.

The "X" factor

Discover the powerful functionality of the "X" factors -- XFOOT and XLATE in RPG/400 and %XFOOT and %XLATE in RPG IV.

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** Load the customer array
C                     	  ADD  1         Y       30 
C                         Z-ADDCUREVN    REV,Y     
C                         ENDIF                        
C                         ENDDO
C** Now sum the total for this customer
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 LOWER		C		'abcdefghijklmnopqrstuvwxyz'
D DATA		S	10A	inz('Mixed Case')


	// DATA now contains "MIXED CASE"
	// DATA now contains "MIXED case"

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:

	// DATA Contains "Rochester,MN 02546"
	DATA = %XLATE(',':'-':DATA)
	// DATA now contains "Rochester-MN 02546"

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

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.


Dig Deeper on iSeries CL programming

Start the conversation

Send me notifications when other members comment.

Please create a username to comment.