最初のページに戻ります。

総合の目次があるページに戻ります。

よく使うマニュアルです

Wiki

updated on 2004.06.23

9.20.CHECKとCHEKRの使い方

[ Previous ] [ HOME ] [ Upper ] [ Next ]


実は、今回、あるプログラムで、配列を使っていた部分を、新しいコードで置き換えようと、CHECKとCHEKRを利用したのですが、結構、つまずきました。みなさんが、こんなことの無いように、このページを作りました。

やりたいこと。

下図の、水色の部分の長さを求めたい。4と13はシングルコーテーションです。1から3、14から25は空白です。

この25バイトのフィールド名を「FLD001」とします。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
      '       ,   0   - '                        
CHECK 8byte CHEKR

さて、方法としては、配列にとって、1から25まで片っ端から調べる手もあるのですが、もっとスマートな方法として、CHECKとCHEKRがあります。

失敗

早い話、12 - 5 + 1 = 8とすればいいのですよね。つまり、左からは、シングルコーテーションの次の番号(5)、右からは、シングルコーテーションの一つ左の、番号(12)がわかればいいのです。

実は、最初、

     C           ''''      CHECK FLD001:1  LL 
     C           ''''      CHEKR FLD001:25 RR                 

実は、これでは、 うまくいきません。LL=4,RR=13となると思っていたのですが、LL=1で、RR=25となります。

なぜか

実は、私はいつも、スペース位置の検索にCHECKを使っていたのですが、この命令コードは、演算項目1と「違う」値を見つけた位置を返すのです。シングルコーテーションと違う、最初の最左端は1のスペースです。逆に、最右端も、同じく、スペースです。それで、LLもRRもスペース位置を返してきたのです。

成功

そこで、

     C           ' '       CHECK FLD001:1  LL  
     C           ''''      CHECK FLD001:LL LL
     C           ' '       CHEKR FLD001:25 RR
     C           ''''      CHEKR FLD001:RR 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の方が、ステップさらに、短いかも。


[ Previous ] [ HOME ] [ Upper ] [ Next ]

You are at K's tips-n-kicks of AS/400

 

SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送