RPG

450. 効果的な組込み関数の使い方 %SUBST

%SUBST は文字列の一部を取り出す組込み関数であるが
取り出すだけでなく一部だけを書き換えるという使い方もできる。

%SUBST を効果的に使うことによって従来のMOVELやMOVEを繰り返し
使うという手間を削減することができる。

■ 効果的な組込み関数 %SUBST の使い方の TESTSBT

ソースはこちらから

0001.00 H DFTNAME(TESTSBT) DATEDIT(*YMD/) BNDDIR('QC2LE')                         
0002.00 F********** 効果的な組込み関数 %SUBST の使い方 ************************   
0003.00 F*                                                                        
0004.00 F**********************************************************************   
0005.00                                                                           
0006.00  * CRTBNDRPG PGM(OBJLIB/TESTSBT) SRCFILE(SRCLIB/QRPGLESRC) DFTACTGRP(*NO) 
0007.00  * ACTGRP(*NEW) DBGVIEW(*SOURCE) AUT(*ALL)                                
0008.00                                                                           
0009.00 D SHCODE          S             10A                                       
0010.00 D CDR             S             10A   DIM(256)                            
0011.00 D MKR             S              1A   DIM(256)                            
0012.00 D N               S              4S 0                                     
0013.00 D NAME            S              6A                                       
0014.00 D FAMILY          S              6A                                       
0015.00 D STRING          S             48A                                       
0016.00                                                                           
0017.00 C                   EVAL      STRING = 'JOHN   LENNON'                    
0018.00 C                   EVAL      NAME = %SUBST(STRING:1:6)                   
0019.00 C                   EVAL      %SUBST(STRING: 1: 6) = 'JULIAN'             
0020.00  /FREE                                                                    
0021.00        STRING = 'JOHN  LENNON';                                           
0022.00        NAME = %SUBST(STRING:1:6);                                         
0023.00        %SUBST(STRING:1:6) = 'JULIAN';                                     
0024.00  /END-FREE                                                         
0025.00 C                   SETON                                        LR
0026.00 C                   RETURN                                         
0027.00        


                                                            

[解説]

取出し : NAME = %SUBST(STRING:1:6);
値のセット : %SUBST(STRING:1:6) = ‘JULIAN’;

特にこのように文字列の一部だけを%SUBSTで書き換えることができることを覚えていて欲しい。