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