REPLACINGの話

COBOL原始プログラムの中へCOBOL登録集を複写するCOPY文。
REPLACING指定を付けることで、キーワードを指定された文字列で置換することができます。

初心者様向けの「COBOL教育サービス」始めました。

ソース

COPY    XXXX  REPLACING  ==ZZ==  BY  ==WK1==.

COBOL登録集

01    ZZ-REC.
  02  ZZ-A    PIC  X(08).
  02  ZZ      PIC  X(08).

翻訳結果
COPY文で取り込まれた結果は、以下になります。

01    ZZ-REC.
  02  ZZ-A    PIC  X(08).
  02  WK1     PIC  X(08).

しかし、単語単位の置換はできますが、語の一部を置換することはできません。
(上の例ではZZ-Aの”ZZ”部分は置換されない)

語の一部を置換したい場合には左右の括弧を使用します。

ソース

COPY    XXXX  REPLACING  ==()==  BY  ==WK1==.

COBOL登録集

01    ()-REC.
  02  ()-A    PIC  X(08).
  02  ()      PIC  X(08).
  02  XX()YY  PIC  X(08).

翻訳結果

01    WK1-REC.
  02  WK1-A    PIC  X(08).
  02  WK1      PIC  X(08).
  02  XXWK1YY  PIC  X(08).

また、引用符を使っても可能です。

ソース

COPY    XXXX  REPLACING  =="X"==  BY  ==WK1==.

COBOL登録集

01    "X"-REC.
  02  "X"-A    PIC  X(08).
  02  "X"      PIC  X(08).
  02  XX"X"YY  PIC  X(08).

翻訳結果

01    WK1-REC.
  02  WK1-A    PIC  X(08).
  02  WK1      PIC  X(08).
  02  XXWK1YY  PIC  X(08).

※引用符は翻訳オプションの引用符に合わせる必要があります。

ですが、括弧と引用符では違いがあります。
括弧の場合は囲まれた中が対象文字列、引用符の場合は引用符を含めて対象文字列となります。
なので、登録集の中が括弧の場合は括弧を付けなくても中の文字列は置換え可能です。

ソース

COPY    XXXX  REPLACING  ==ZZZ==  BY  ==IX1==.

COBOL登録集

MOVE    DATA(ZZZ)          TO    ITEM1.
MOVE    DATA(ZZZ  IX2)     TO    ITEM1.
MOVE    DATA(ZZZ:LEN)      TO    ITEM1.

翻訳結果

MOVE    DATA(IX1)          TO    ITEM1.
MOVE    DATA(IX1  IX2)     TO    ITEM1.
MOVE    DATA(IX1:LEN)      TO    ITEM1.

このような使い方ができるようです。

About コンピュータ・サービス 68 Articles
〒689-2103 鳥取県東伯郡北栄町田井183-1 TEL: 0858-48-3131