自分が知らなかったことで、はまってしまったので、アップしておきます。
入力されている文字列の長さを調べる方法は、BIF関数「%LEN」で簡単に取得できるものだと思っていました。
しかし、DB2 for iでは、DDSで定義したテーブルの文字列は、CHARになるので、毎回、%LENで取得できる値は、そのフィールド長になってしまうことを最近知りました。
TRIMをかましてからLENで取得しても、値は変わりません。
そこで、「%CHECKR」という関数があるではないですか!!
右端の文字から左に向って、指定した文字列でない最後の文字の位置を返してくれるようです。
サンプルと実行結果は、下記の通りです。
サンプル
D**************************************************************** D* VARIABLE DEFINITION D**************************************************************** D W@CHAR1 S 20A INZ('ABCDE XYZ') D W@CHAR2 S 40A D* C**************************************************************** C* MAIN C**************************************************************** /FREE // %SIZE, %LEN では空白行があってもフィールド長の取得となる DSPLY %SIZE(W@CHAR1); DSPLY %LEN(W@CHAR1); // %CHECKKR では最終空白行までの文字列の長さを取得できる DSPLY %CHAR(%CHECKR(' ':W@CHAR1)); W@CHAR2 = '*' + %CHAR(%CHECKR(' ':W@CHAR1)) + '*'; DSPLY W@CHAR2; *INLR = *ON; RETURN; /END-FREE
実行結果
CALL PGM(TIGEROBJ/SAMPLE30) DSPLY 20 DSPLY 20 DSPLY 9 DSPLY *9*