%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の用途がより具体的に理解できるのではないかと思う。
