COBOL2002 言語 拡張仕様編


25.4.9 EXAMINE文とTALLY特殊レジスタ

形式

[図データ]

機能

EXAMINE文は,一つのデータ項目中のある文字の出現回数を調べたり,ある文字をほかの文字で置き換えたりする。

構文規則

  1. 一意名1の用途は,表示用(DISPLAY)でなければならない。ブール項目は指定できない。

  2. 定数(定数1〜定数4)は,1文字から成る英数字定数か,符号のない1けたの整数かまたはALL定数以外の表意定数でなければならない。

一般規則

  1. けた調べは,一意名1のデータ項目の最左端のけたから右の方へ順に行われる。

  2. TALLYING指定とTALLY特殊レジスタ,TALLYING指定は,ある文字の出現回数をTALLY特殊レジスタに入れることを指定する。出現回数の指定方法は次のとおりである。

    (a)ALL(全部)指定

    すべての定数1の出現回数が数えられる。

    (例)

    Aの内容がABACADAEのときEXAMINE A TALLYING ALL 'A'を実行すると,TALLYINGには4が入る。

    (b)LEADING(先行)指定

    定数1以外の文字が初めて出てくるまで,定数1の出現回数が数えられる。もし,データ項目の内容がすべて定数1ならば,最右端のけたまで数え上げが行われる。

    (例)

    Bの内容が00009800のときEXAMINE B TALLYING LEADING 0を実行すると,TALLYには4が入る。

    (c)UNTIL FIRST(最初まで)指定

    定数1が初めて出てくるまで,定数1以外の文字出現回数が数えられる。もし,データ項目中に一つも定数1がなければ最右端のけたまで数え上げが行われる。

    (例)

    Cの内容が+3456.78のとき,EXAMINE C TALLYING UNTIL FIRST '.'を実行すると,TALLYには5が入る。

  3. REPLACING指定

    ある文字をほかの文字で置き換えることを指定する。置き換えの指定方法は次のとおりである。

    (a)ALL(全部)指定

    定数1や定数3は,すべて定数2や定数4で置き換えられる。

    (例)

    Aの内容が△△34567△のときEXAMINE A REPLACING ALL SPACE BY ZEROを実行すると,Aの内容は00345670となる。

    (b)LEADING(先行)指定

    定数1や定数3以外の文字が出てくるまで,定数1や定数3は,定数2や定数4で置き換えられる。もし,データ項目の内容がすべて定数1や定数3ならば,最右端のけたまで置き換えが行われる。

    (例)

    Bの内容が***ABC**のときEXAMINE B REPLACING LEADING '*' BY 'Z'を実行すると,Bの内容はZZZABC**となる。

    (c)UNTIL FIRST(最初まで)指定

    定数1や定数3が出てくるまで,定数1や定数3以外の文字は,定数2や定数4で置き換えられる。もし,データ項目中に一つも定数1や定数3がなければ,最右端のけたまで置き換えが行われる。

    (例)

    Cの内容がXYZAXYZAのときEXAMINE C REPLACING UNTIL FIRST 'A' BY 'A'を実行すると,Cの内容はAAAAXYZAとなる。

    (d)FIRST(最初の)指定

    最初に出てきた定数1や定数3は,定数2や定数4で置き換えられる。

    (例)

    Dの内容がABCABCABのときEXAMINE D REPLACING FIRST 'C' BY 'X'を実行すると,Dの内容はABXABCABとなる。

  4. 一意名が数字項目のときのけた調べおよび置き換えは次の規則に従う。

    (a)最右端(SIGN LEADING句の指定があるときは最左端)のけたに符号が重ね合わせられていても,この符号は無視される。

    (例)

    DATA-1の内容は次のとおりとする。

    [図データ]

    最右端のけたに重ね合わされている符号は無視され,このけたは1とみなされる。

    EXAMINE DATA-1 TALLYING ALL 1を実行すると,TALLYには,1の個数3が入る。

    (b)REPLACINGによる置き換えを行っても,重ね合わせられている符号は変わらない。

    (例)

    DATA-1の内容は次のとおりとする。

    [図データ]

    EXAMINE DATA-1 REPLACING ALL 1 BY 2を実行すると,DATA-1の内容は次のようになる。

    [図データ]

    (備考)

    EXAMINE文は,第1次規格にあったが,第2次規格から削除された。代わりに,より一般的で強力なINSPECT文が取り入れられた。図25‒1 EXAMINE文とINSPECT文の対応にEXAMINE文と同じデータ操作をするINSPECT文の書き方を示す。

    TALLY特殊レジスタ

    TALLY特殊レジスタの初期値はゼロである。整数の基本項目が使えるところならばどこでも同じように使用できる。

    図25‒1 EXAMINE文とINSPECT文の対応

    [図データ]

    TALLY特殊レジスタはプログラム中にEXAMINE文を書いたとき,このシステムがプログラムごとに1個だけ生成する特殊レジスタである。

    TALLY特殊レジスタのサイズと用途は,PICTURE 9(5) USAGE COMPである。