How To
Summary
How to write a procedure that your callers can easily call to replace the values in a string template with other variables or expressions in their program.
Objective
Environment
Steps
Step 1. Create the prototype and place it in a copy file.
In later steps in this example, the copy file is assumed to be either member FORMAT_H in source file *LIBL/QRPGLESRC or file format_h.rpgleinc in an IFS directory available for the compile.
This code is also in attachment format_h.rpgleinc.txt.
dcl-pr format varucs2(2000) extproc(*dclcase); template varucs2(2000) const; rep1 varucs2(200) const options(*nopass : *convert); rep2 varucs2(200) const options(*nopass : *convert); rep3 varucs2(200) const options(*nopass : *convert); rep4 varucs2(200) const options(*nopass : *convert); rep5 varucs2(200) const options(*nopass : *convert); rep6 varucs2(200) const options(*nopass : *convert); rep7 varucs2(200) const options(*nopass : *convert); rep8 varucs2(200) const options(*nopass : *convert); rep9 varucs2(200) const options(*nopass : *convert); end-pr;
Step 2. Write the procedure, copying in the prototype from the copy file
This code is also in attachment format_proc.rpgle_.txt.
/copy format_h dcl-proc format export; dcl-pi *n varucs2(2000) ; template varucs2(2000) const; rep1 varucs2(200) const options(*nopass : *convert); rep2 varucs2(200) const options(*nopass : *convert); rep3 varucs2(200) const options(*nopass : *convert); rep4 varucs2(200) const options(*nopass : *convert); rep5 varucs2(200) const options(*nopass : *convert); rep6 varucs2(200) const options(*nopass : *convert); rep7 varucs2(200) const options(*nopass : *convert); rep8 varucs2(200) const options(*nopass : *convert); rep9 varucs2(200) const options(*nopass : *convert); end-pi; dcl-s result varucs2(2000); result = template; if %parms() >= %parmnum(rep1); result = %scanrpl(%ucs2('[REP1]') : rep1 : result); endif; if %parms() >= %parmnum(rep2); result = %scanrpl(%ucs2('[REP2]') : rep2 : result); endif; if %parms() >= %parmnum(rep3); result = %scanrpl(%ucs2('[REP3]') : rep3 : result); endif; if %parms() >= %parmnum(rep4); result = %scanrpl(%ucs2('[REP4]') : rep4 : result); endif; if %parms() >= %parmnum(rep5); result = %scanrpl(%ucs2('[REP5]') : rep5 : result); endif; if %parms() >= %parmnum(rep6); result = %scanrpl(%ucs2('[REP1]') : rep1 : result); endif; if %parms() >= %parmnum(rep6); result = %scanrpl(%ucs2('[REP6]') : rep6 : result); endif; if %parms() >= %parmnum(rep7); result = %scanrpl(%ucs2('[REP7]') : rep7 : result); endif; if %parms() >= %parmnum(rep8); result = %scanrpl(%ucs2('[REP8]') : rep8 : result); endif; if %parms() >= %parmnum(rep9); result = %scanrpl(%ucs2('[REP9]') : rep9 : result); endif; return result; end-proc format;
Step 3. Test the procedure
This code is also in attachment format_test.rpgle_.txt.
/copy format_h dcl-s string char(50); string = format('No parms'); dsply string; string = format('All parms, rep 1,2,9 [REP1] [REP2] [REP9]' : 1 : 2 : 3 : 4 : 5 : 6 : 7 : 8 : 9); dsply string; string = format('2 parms, rep parm 2 twice [REP2] [REP1] [REP2]' : 1 : 'two'); dsply string; return;
Document Location
Worldwide
Was this topic helpful?
Document Information
Modified date:
11 April 2023
UID
ibm16982933