RPG

455. 効果的な組込み関数の使い方 %SCAN

%SCAN は文字列の中から該当する文字列を探す組込み関数である。
見つかると見つかった位置を戻してくれる。
このように文字列の中から該当する文字列を探索する機能はRPG IIIではなかった。
ILE-RPGの組込み関数 %SCANで初めて可能になったのである。
このようにILE-RPGでは組込み関数を使うことによって
RPG IIIではできなかった様々な演算が可能になる。

 
 
%SCAN の実践的な使い方を紹介しよう。

■ 効果的な組込み関数 %SCAN の使い方の TESTSCN

ソースはこちらから

0001.00 H DFTNAME(TESTSCN) DATEDIT(*YMD/) BNDDIR('QC2LE')                                  
0002.00 F********** 効果的な組込み関数 %SCAN の使い方 **************************           
0003.00 F*                                                                                 
0004.00 F**********************************************************************            
0005.00                                                                                    
0006.00  * CRTBNDRPG PGM(OBJLIB/TESTSCN) SRCFILE(SRCLIB/QRPGLESRC) DFTACTGRP(*NO)          
0007.00  * ACTGRP(*NEW) DBGVIEW(*SOURCE) AUT(*ALL)                                         
0008.00                                                                                    
0009.00 D VALUE           S             40A                                         小数   
0010.00 D POS             S              4S 0                                       小数   
0011.00                                                                                    
0012.00 C                   MOVEL(P)  'TEST ABCDEF 'VALUE                                  
0013.00 C                   EVAL      POS = %SCAN('ABC':VALUE)                             
0014.00 C                   IF        POS > 0                                              
0015.00 C                   EVAL      VALUE = %REPLACE('12345':VALUE:POS:5)                
0016.00 C                   ENDIF                                                          
0017.00  /FREE                                                                             
0018.00          VALUE = 'TEST ABCDEF';                                                    
0019.00          POS   = %SCAN('ABC':VALUE);                                               
0020.00          IF POS > 0;                                                               
0021.00            VALUE = %REPLACE('12345':VALUE:POS:5);                                  
0022.00          ENDIF;                                                                    
0023.00  /END-FREE                                                                         
0024.00 C                   SETON                                        LR
0025.00 C                   RETURN        


                                   

[解説]

この例はABCDEFという文字列を含む変数 VALUE の中から文字列’ABC’を%SCANで見つけて
その位置から%REPLACEで12345という文字列に置き換えるものである。

%REPLACEという組込み関数と組み合わせて%SCANを使うことによって
%SCANの用途がより具体的に理解できるのではないかと思う。