Many times I have had the occasion to center text in file field for printing or displaying purposes. I now use the following RPG IV code to achieve this end.
* * Declares D Centered S Like(Field) Inz D X S 3P 0 Inz * * * Center field C Eval X = (%Len(Field)-%Len(%Trim(Field)))/2+1 C Eval %Subst(Centered:X) = Field C Eval Field = Centered *
In an ILE environment this can be made into a prototype in the following. This works for any size text up to a max of 1000 bytes. In the below example text is centered in a 50 byte field.
***********************************************************************
** The following prototype describes a procedure that centers text within
a character field
** with a size of 1000 bytes or less.
***********************************************************************
*
* Centering procedure
D Center PR 1000A
D AnyText 1000A Const
D AnyTextLen 5U 0 Value
*
* Sample text to center
D Text S 50A Inz('Center this text')
*
* Use of prototype to center text
C Eval Text = Center(Text:%Len(Text))
*
* Return program
C Return
***********************************************************************
** Centering prototype
***********************************************************************
P Center B Export
D Center PI Like(Centered)
D Field 1000A Const
D FldLength 5U 0 Value
*
* Procedure variables
D Centered S Like(Field)
D ReturnCent S Like(Field)
D X S 5U 0 Inz
*
* Calculate start position for centered text
C Eval X = (FldLength-
C %Len(%Trim(%Subst(Field:1:FldLength))))/2+1
*
* Place the text into position
C Eval %Subst(Centered:X) =
C %Trim(%Subst(Field:1:FldLength))
*
* Populate and return variable
C Eval ReturnCent = Centered
C Return ReturnCent
*
P Center E
This was first published in November 2001