【COBOL学習|実務向け】COBOL現場の定石:INSPECT REPLACINGで文字列操作をスマートに

導入:なぜINSPECT文が重要なのか

現場のCOBOL開発において、文字列内の特定の文字を置換したい場面は非常に多くあります。例えば、外部システムから受け取ったデータの不要な文字を削除したり、帳票出力時にゼロサプレス(先頭ゼロの空白化)を行ったりする際、皆様はどのように実装していますか?

もし、PERFORM文で1文字ずつループを回して判定処理を書いているなら、それはコードが冗長化し、保守性が低下する原因となります。COBOLには、こうした文字列操作をたった1文で簡潔に記述できる「INSPECT文」という強力な武器があります。今回は、このINSPECT REPLACINGの正しい作法と、実務で役立つノウハウを解説します。

基礎知識:INSPECT REPLACINGの仕組み

INSPECT文は、対象となるデータ項目(英数字項目)の中をスキャンし、指定された文字を探して置換やカウントを行う命令です。特にREPLACING句は、特定の文字を別の文字に「一括変換」する役割を持ちます。

ループ処理を記述する必要がないため、実行効率が良く、何より誰が見ても「何をしたい処理なのか」が一目で分かるのが最大のメリットです。

実装:REPLACINGの基本構文と論理

基本的な構文は以下の通りです。

INSPECT 対象項目 REPLACING ALL “検索文字” BY “置換文字”.

「ALL」を指定することで、データ内の該当する全ての文字が置換されます。また、「LEADING」を使うと「先頭から連続する文字のみ」を置換できるため、金額のゼロサプレスには非常に有効です。

サンプルプログラム

以下は、実務でよく遭遇する「カンマ削除」「ゼロサプレス」「ハイフン変換」を実装したサンプルです。

IDENTIFICATION DIVISION.
PROGRAM-ID. INSPECT-SAMPLE.

DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-TEST-DATA PIC X(20) VALUE “000,123,456-00”.
01 WS-AMOUNT-DATA PIC X(10) VALUE “0000012345”.

PROCEDURE DIVISION.
MAIN-PROCEDURE.
DISPLAY “変換前 : ” WS-TEST-DATA.

  • 1. カンマを削除(スペースに置換)

INSPECT WS-TEST-DATA REPLACING ALL “,” BY ” “.

  • 2. ハイフンをアンダースコアに変換

INSPECT WS-TEST-DATA REPLACING ALL “-” BY “_”.
DISPLAY “変換後 : ” WS-TEST-DATA.

  • 3. 先頭のゼロをスペースに変換(ゼロサプレス)

INSPECT WS-AMOUNT-DATA REPLACING LEADING “0” BY ” “.
DISPLAY “金額変換後 : [” WS-AMOUNT-DATA “]”.

STOP RUN.

応用・注意点:現場で陥りやすい罠

実務で使う際に注意すべき点は3つあります。

1. データ型の確認
INSPECT文は「英数字項目(PIC X)」に対して使用します。数字項目(PIC 9)に対して使用するとコンパイルエラーになるか、意図しない挙動になるため、必要に応じてREDEFINES句でデータ型を変換してから操作してください。

2. 文字列長の保持
置換前後で文字数は変わりません。例えば「1文字を2文字に置き換える」といった処理はREPLACINGでは不可能です。あくまで「1対1」の置換であることに留意してください。

3. 処理の順序
複数の置換を一度に行いたい場合、INSPECT文を連続して記述することが可能です。処理が複雑になる場合は、コメントで「何を何に置換しているか」を明確に残すことが、後任者への優しさであり、バグを未然に防ぐコツです。

ループを書かずに済む場所は、可能な限りINSPECT文に置き換える。この意識を持つだけで、あなたのコードはより「プロフェッショナルなCOBOL」に進化します。ぜひ次回の開発から取り入れてみてください。

コメント

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