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

Centering text in a file field

Learn how to center text in a file field for printing or displaying purposes. end.

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 

Dig Deeper on iSeries CL programming