AS400/IBMi REPLACEとSCANで置換と文字の除去

IT関連

自分の備忘録です。間違えがあればご容赦ください。

 

某条件下の場合、READで読んだ某ファイルの某カラムにある、某文字を消去したいという要望がありました。

某が多すぎて申し訳ありませんが、例えば商品名で「AGCコーヒー」というのがあったとすると、「AGC」を削除して単に「コーヒー」と表示したい。要するにreplaceをするということです。

PHPだとstr_replaceを使って

こうすれば済むのですが、IBMiの%REPLACEを見るとなんかややこしい。

 

IBMiの%REPLACE関数は私なりの解釈だと、

らしいです。意味がわからん。

 

今回のお題はAGCを消すなので、とりあえず下準備。

 

%REPLACEの置換後と対象は決まっているので、ここまでは入る。

 

位置や文字数とは、SUBSTRと同じで開始位置と文字数を指定するみたい。

 

AGCの場合だと3文字なので、文字数は素直に3でOK。

あとは位置。これは%SCANを使うみたい。

 

%SCAN関数の公式はこう。

戻り値は対象の中に検索文字列があった位置なので、1とか2の数字が返ってくる。

 

%SCANで取り出してみる。

ちゃんと見つかった最初の位置を返してくれています。

よくある0スタートではなく1スタートのようです。

 

ちなみに%SCANを色々試してみるとこうなりました。

なぜか’コ’がうまく行かなかったです。基本的に全角文字は出来ないと思った方が良さそう。

 

ようやく本題です。%REPLACEに入れてみます。

一応成功しましたが、しかしコーヒーの前に微妙なブランクが空いてしまいます。

 

なので%TRIMを使ってあげます。これが最終形です。

 

ただ、除去したい文字列が文字列の中央にあった場合は%TRIMでは除去できません。その場合はどうすればいいかは今回のお題ではないので、割愛させていただきます。

以上です。

コメント

タイトルとURLをコピーしました