Difference between revisions of "Right String"
DaveLClarkI (talk | contribs) (Created page with "Category:Service Procedures == Summary == The following are the RPG/LE fully free-form definitions and instructions needed for using the {{AN}} service procedure. This se...") |
DaveLClarkI (talk | contribs) (→Justification) |
||
Line 6: | Line 6: | ||
Some service procedures (minus their error checking) are so small that one might question creating a service procedure at all. They might feel that simply employing the stripped-down code directly in their program code is the best way to go (saving the necessity of calling a separate routine—with the additional overhead that such action would require). | Some service procedures (minus their error checking) are so small that one might question creating a service procedure at all. They might feel that simply employing the stripped-down code directly in their program code is the best way to go (saving the necessity of calling a separate routine—with the additional overhead that such action would require). | ||
{| class="wikitable" | {| class="wikitable" | ||
− | |+Rule of | + | |+Rule of Thumb |
|- | |- | ||
|Sometimes, having a service procedure is simply a means of making code more self-documenting (i.e., easier for others to understand). | |Sometimes, having a service procedure is simply a means of making code more self-documenting (i.e., easier for others to understand). |
Revision as of 19:51, 10 December 2018
Summary
The following are the RPG/LE fully free-form definitions and instructions needed for using the Right String service procedure. This service procedure simply allows the caller to extract the right-most n characters from a supplied string.
Justification
Some service procedures (minus their error checking) are so small that one might question creating a service procedure at all. They might feel that simply employing the stripped-down code directly in their program code is the best way to go (saving the necessity of calling a separate routine—with the additional overhead that such action would require).
Sometimes, having a service procedure is simply a means of making code more self-documenting (i.e., easier for others to understand). |
To wit... Which would you rather see in an RPG program—this?
if %subst(myLongString:%len(myLongString)-4+1:4) = 'TEMP'; // do something endif;
...or, this?
if GenUtl_RightString(myLongString:4) = 'TEMP'; // do something endif;
It is the opinion of many that the second form is more readable and is self-documenting. Hence, this service procedure.
Service Procedure
**free //============================================================================== // Return rightmost number of bytes -- optional padding on left. //============================================================================== dcl-pr GenUtl_RightString varchar(256) rtnparm; OrigString varchar(65535) const; ByteCount packed(3:0) const; PadChar char(1) const options(*nopass); end-pr; //============================================================================== // Return rightmost number of bytes -- optional padding on left. //============================================================================== dcl-proc GenUtl_RightString export; dcl-pi *n varchar(256) rtnparm; OrigString varchar(65535) const; ByteCount packed(3:0) const; PadChar char(1) const options(*nopass); end-pi; dcl-s StrLeng like(ByteCount); dcl-s NewString varchar(256) inz(''); dcl-s PadString char(256) inz(*blanks); // prevent errors StrLeng = ByteCount; // start with bytes requested if %parms < %parmnum(PadChar) // if no padding and and StrLeng > %len(OrigString); // request greater than string supplied StrLeng = %len(OrigString); // take supplied string length endif; if StrLeng > *zero; // if something to return if StrLeng > %len(PadString); // if more than what can return StrLeng = %len(PadString); // set to max return length endif; if %parms < %parmnum(PadChar); // if no padding NewString = %subst(OrigString: %len(OrigString) - StrLeng + 1); else; // else, with left padding NewString = %subst( %xlate(' ': PadChar: PadString) + OrigString : %len(OrigString) + %len(PadString) - StrLeng + 1); endif; endif; return NewString; // return the suffix string end-proc;