|
One way to go would be using a varying lengt
field - the actual field length is sort of a "built-in" length parameter
and is easily retrieved in the subprocedure:
**-- Compilation
spec:
-------------------------------------------------**
** ** CrtRpgMod Module( FNC031MR ) ** CrtSrvPgm Srvpgm( FNC031S ) Module( FNC031MR ) Export( *ALL ) ** ** CrtBndDir BndDir( FNC031B ) Text( 'General Functions Directory' ) ** AddBndDirE BndDir( FNC031B ) Obj(( FNC031S *SRVPGM )) ** **-- Control spec: -----------------------------------------------------** H NoMain Option( *SrcStmt ) **-- Center (leftadjusted) string: -------------------------------------** D Center Pr 256a Varying D CntStr 256a Varying Value **-- Check Reverse: ----------------------------------------------------** D CheckR Pr 5u 0 D CrArg 1a Const D CrString 256a Const **-- Center string: ----------------------------------------------------** P Center B Export D Pi 256a Varying D CntStr 256a Varying Value ** D Blanks s 128a **
C
Return %SubSt( Blanks
C : 1 C : %Int(( %Len( CntStr ) - C CheckR( ' ': CntStr )) / 2 ) C ) + CntStr ** P Center E **-- Check Reverse: ----------------------------------------------------** P CheckR B Export D Pi 5u 0 D CrArg 1a Const D CrString 256a Const ** D Pos S 5u 0 **-- Check Reverse: ----------------------------------------------------** ** C CrArg CheckR CrString Pos C If Pos = *Zero C Return 1 C Else C Return Pos C EndIf ** P CheckR E **-- Compilation spec: -------------------------------------------------** ** ** CrtRpgMod Module( FNC032MR ) DbgView( *LIST ) ** CrtPgm Pgm( FNC032I ) Module( FNC032MR ) ActGrp( QILE ) ** **-- Control spec: -----------------------------------------------------** H BndDir( 'FNC031B' ) Option( *SrcStmt ) **-- Global variables: -------------------------------------------------** D Field S 64a Inz('Mark Spitz' ) D DspFld S 32a D PrtFld S 128a **-- Center (leftadjusted) string: -------------------------------------** D Center Pr 256a Varying D CntStr 256a Varying Value ** **-- Sample: -----------------------------------------------------------** ** C Eval Field = Center( Field ) ** C Eval Field = %TrimL( Field )
C
Eval DspFld =
Center( %SubSt( Field
C : 1 C : %Size( DspFld ) C )) **
C
Eval PrtFld =
%TrimL( Field )
C Eval PrtFld = Center( PrtFld ) ** C Return ** As you can see in the last example, it
won't really solve the problem Jon mentioned about being able to set the length
of the receiver variable, if that is bigger than the source variable; I have to
copy the string to the receiver and use that as input to make it
work.
Best regards,
Carsten Flensburg
|
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].
Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.