COBOLの文字列検索を完全ガイド!初心者でもわかるINSPECTとUNSTRINGの使い方
生徒
「先生、COBOLで文字列の中から特定の言葉を探したり、分けたりすることってできますか?」
先生
「もちろんできますよ。COBOLには、文字列を調べたり分解したりするための命令があります。その代表がINSPECTとUNSTRINGです。」
生徒
「なんだか難しそうですが、どんなときに使うんですか?」
先生
「たとえば、文章の中にある文字を数えたいときや、カンマで区切られたデータを分けたいときなどに使います。実際の例を見てみましょう!」
1. COBOLの文字列操作とは?
COBOLでは、文字列操作(もじれつそうさ)を使って、文字や文章を調べたり編集したりすることができます。文字列とは、「A」「B」「C」などの文字が並んだもののことです。たとえば「HELLO」や「123-4567」も文字列です。
業務システムでは、文字列を扱うことがとても多くあります。たとえば「郵便番号からハイフンを取り除く」「氏名を名字と名前に分ける」「商品コードに特定の文字が含まれているか調べる」などです。
COBOLでよく使われる文字列操作命令には、INSPECTとUNSTRINGの2つがあります。この2つを理解すると、データの分析や整形がぐっと楽になります。
2. INSPECT文とは?
INSPECT文は、文字列の中を調べたり、置き換えたり、数えたりする命令です。英語の「inspect(調べる)」という意味の通り、文字列を検査するのが目的です。
● 文字の出現回数を数える
まずは、文字列の中にある特定の文字が何回出てくるかを数える方法を見てみましょう。
IDENTIFICATION DIVISION.
PROGRAM-ID. INSPECT-SAMPLE.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 TEXT PIC X(30) VALUE "APPLE BANANA APPLE".
01 COUNT-A PIC 9(3) VALUE 0.
PROCEDURE DIVISION.
INSPECT TEXT TALLYING COUNT-A FOR ALL "A".
DISPLAY "Aの出現回数は:" COUNT-A.
STOP RUN.
Aの出現回数は:6
この例では、TEXTの中に含まれている「A」という文字を数えています。結果は「6」になります。TALLYINGというのは「数える」という意味です。
● 特定の文字を別の文字に置き換える
INSPECTには、REPLACINGを使って文字を置き換える機能もあります。たとえば「-(ハイフン)」を「スペース」に置き換えることができます。
IDENTIFICATION DIVISION.
PROGRAM-ID. INSPECT-REPLACE.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 PHONE-NUMBER PIC X(13) VALUE "080-1234-5678".
PROCEDURE DIVISION.
INSPECT PHONE-NUMBER REPLACING ALL "-" BY " ".
DISPLAY "変換後:" PHONE-NUMBER.
STOP RUN.
変換後:080 1234 5678
このように、INSPECTは文字列の中の特定の文字を別の文字に変えることができます。実務では、電話番号や住所データの整形などでよく使われます。
3. UNSTRING文とは?
UNSTRING文は、文字列を特定の区切り文字で分割して、それぞれ別の変数に取り出す命令です。英語の「unstring」は「ひもをほどく」という意味で、ひとつの長い文字列をバラバラにするイメージです。
たとえば、カンマ(,)で区切られたデータ「TARO,SUZUKI,30」を名前や年齢に分けたいときに使います。
IDENTIFICATION DIVISION.
PROGRAM-ID. UNSTRING-SAMPLE.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 PERSON-DATA PIC X(30) VALUE "TARO,SUZUKI,30".
01 FIRST-NAME PIC X(10).
01 LAST-NAME PIC X(10).
01 AGE PIC X(3).
PROCEDURE DIVISION.
UNSTRING PERSON-DATA
DELIMITED BY ","
INTO FIRST-NAME LAST-NAME AGE.
DISPLAY "名前:" FIRST-NAME.
DISPLAY "苗字:" LAST-NAME.
DISPLAY "年齢:" AGE.
STOP RUN.
名前:TARO
苗字:SUZUKI
年齢:30
このように、UNSTRINGを使うとカンマ区切りやスペース区切りのデータを簡単に分割できます。CSVデータのような形式にも対応できるので、業務プログラムでは非常によく使われます。
4. INSPECTとUNSTRINGの違いと使い分け
ここまでで、INSPECTとUNSTRINGの使い方がわかってきましたね。では、それぞれどんなときに使えばよいのでしょうか?
- INSPECT:文字列の中を調べたり、数えたり、置き換えたりしたいとき。
- UNSTRING:区切り文字を使って文字列を複数の部分に分けたいとき。
たとえば、住所の中から「都道府県」を取り出したい場合はUNSTRINGが便利です。一方、住所に含まれる特定の文字(例:「-」や「丁目」など)を数えたり削除したいときはINSPECTが向いています。
5. 実務での応用例
実際の業務プログラムでは、文字列処理は避けて通れません。たとえば、銀行システムで「口座番号のハイフンを削除する」「顧客名簿から特定の名前を抽出する」など、多くの場面で使われます。
ここでは、複合的な例として「住所から郵便番号と都道府県を抽出する」サンプルを紹介します。
IDENTIFICATION DIVISION.
PROGRAM-ID. ADDRESS-EXTRACT.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 FULL-ADDRESS PIC X(50) VALUE "123-4567,東京都,新宿区".
01 ZIP-CODE PIC X(10).
01 PREF-NAME PIC X(10).
01 CITY-NAME PIC X(20).
PROCEDURE DIVISION.
UNSTRING FULL-ADDRESS
DELIMITED BY ","
INTO ZIP-CODE PREF-NAME CITY-NAME.
INSPECT ZIP-CODE REPLACING ALL "-" BY "".
DISPLAY "郵便番号:" ZIP-CODE.
DISPLAY "都道府県:" PREF-NAME.
DISPLAY "市区町村:" CITY-NAME.
STOP RUN.
郵便番号:1234567
都道府県:東京都
市区町村:新宿区
このように、UNSTRINGとINSPECTを組み合わせることで、文字列データを自在に操作できます。実際のシステム開発でも頻繁に使われるテクニックです。