9.20.CHECKとCHEKRの使い方 |
実は、今回、あるプログラムで、配列を使っていた部分を、新しいコードで置き換えようと、CHECKとCHEKRを利用したのですが、結構、つまずきました。みなさんが、こんなことの無いように、このページを作りました。 やりたいこと。下図の、水色の部分の長さを求めたい。4と13はシングルコーテーションです。1から3、14から25は空白です。 この25バイトのフィールド名を「FLD001」とします。
さて、方法としては、配列にとって、1から25まで片っ端から調べる手もあるのですが、もっとスマートな方法として、CHECKとCHEKRがあります。 失敗早い話、12 - 5 + 1 = 8とすればいいのですよね。つまり、左からは、シングルコーテーションの次の番号(5)、右からは、シングルコーテーションの一つ左の、番号(12)がわかればいいのです。 実は、最初、
実は、これでは、 うまくいきません。LL=4,RR=13となると思っていたのですが、LL=1で、RR=25となります。 なぜか実は、私はいつも、スペース位置の検索にCHECKを使っていたのですが、この命令コードは、演算項目1と「違う」値を見つけた位置を返すのです。シングルコーテーションと違う、最初の最左端は1のスペースです。逆に、最右端も、同じく、スペースです。それで、LLもRRもスペース位置を返してきたのです。 成功そこで、
最初の一行で、まずLLは4になります。スペースでないのは、シングルコーテーションの4だからです。さらに、次の行で、その4を開始として、最初にシングルコーテーションにならない番号は5(スペース)となります。 今度は、開始位置を25として、右から左へ検索すると、最初に見つかるのは、13です。つまり、RR=13となります。その次に、その13を開始位置として、シングルコーテーションでないものを検索すると、12の-(ハイフン)となります。つまり、その次の行で、RR=12となります。 このLLからRRの長さを求めるのですから、 RR - LL + 1 = 12 - 5 + 1 = 8 となり、8文字という答えが出ました。 ※これだと、配列は使わないで、いけるのですが、パフォーマンスがどうかは、わかりません。それから、SCAN(結局これと勘違いしていた私)でも、できそうですね。SCANの方が、ステップさらに、短いかも。 |
You are at K's tips-n-kicks of AS/400
|
SEO | [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送 | ||