カテゴリ: COBOL 更新日: 2026/03/13

COBOLの文字列検索を完全ガイド!初心者でもわかるINSPECTとUNSTRINGの使い方

文字列検索のパターン(INSPECT, UNSTRINGなど)
文字列検索のパターン(INSPECT, UNSTRINGなど)

先生と生徒の会話形式で理解しよう

生徒

「先生、COBOLで文字列の中から特定の言葉を探したり、分けたりすることってできますか?」

先生

「もちろんできますよ。COBOLには、文字列を調べたり分解したりするための命令があります。その代表がINSPECTUNSTRINGです。」

生徒

「なんだか難しそうですが、どんなときに使うんですか?」

先生

「たとえば、文章の中にある文字を数えたいときや、カンマで区切られたデータを分けたいときなどに使います。実際の例を見てみましょう!」

1. COBOLの文字列操作とは?初心者が押さえるべき基本

1. COBOLの文字列操作とは?初心者が押さえるべき基本
1. COBOLの文字列操作とは?初心者が押さえるべき基本

COBOLにおける文字列操作(もじれつそうさ)とは、変数に格納された文字や数字の並びを、プログラムで自由に加工・編集することを指します。プログラミングが初めての方にとって「文字列」という言葉は難しく感じるかもしれませんが、単純に「名前」「住所」「電話番号」といったテキストデータのことだと考えてください。

例えば、以下のようなデータはすべてCOBOLでは文字列として扱われます。

  • 英単語: "HELLO" , "COBOL"
  • 記号を含む数字: "123-4567" , "2026/02/01"
  • 文章: "TECH-PRO PROGRAMMING"

なぜ業務システムでこの操作が重要なのでしょうか?それは、コンピュータが計算しやすい形と、人間が見やすい形は異なるからです。実務では、以下のようなシーンで必ずと言っていいほど文字列操作が使われます。

実務でよくある活用例
  • データのクレンジング: 入力された電話番号から「-(ハイフン)」を消して数字だけにする。
  • 情報の切り分け: 「フルネーム」で届いたデータを「姓」と「名」に分けて管理する。
  • フォーマット変更: 商品コードの先頭に特定のアルファベット("A-"など)を自動で付け加える。

● プログラミング未経験でもわかる!超簡単なイメージ例

まずは、箱(変数)に入った文字列を加工するイメージを、短いコードで見てみましょう。ここでは、「HELLO」という挨拶の後ろに「COBOL」という言葉を繋げる例を挙げます。


IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO-STR.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 GREETING PIC X(20) VALUE "HELLO ".
01 TARGET   PIC X(10) VALUE "COBOL".
PROCEDURE DIVISION.
    *> STRING文を使って、2つの言葉を1つにまとめます
    STRING GREETING DELIMITED BY SPACE
           TARGET   DELIMITED BY SIZE
           INTO GREETING.
    
    DISPLAY "結合した結果:" GREETING.
    STOP RUN.

結合した結果:HELLO COBOL

このプログラムでは、別々の箱に入っていた「HELLO」と「COBOL」をガッチャンコして、一つのメッセージにしています。このように、バラバラのデータを整理整頓するのが文字列操作の役割です。

COBOLでこれらを効率よく行うための二大エースが、INSPECT(インスペクト)UNSTRING(アンスリング)です。この2つの命令をマスターするだけで、事務処理プログラムの作成能力は飛躍的にアップします。それでは、それぞれの具体的な使い方を詳しく見ていきましょう。

2. INSPECT文とは?

2. INSPECT文とは?
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文とは?

3. UNSTRING文とは?
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の違いと使い分け

4. INSPECTとUNSTRINGの違いと使い分け
4. INSPECTとUNSTRINGの違いと使い分け

ここまでで、INSPECTUNSTRINGの使い方がわかってきましたね。では、それぞれどんなときに使えばよいのでしょうか?

  • INSPECT:文字列の中を調べたり、数えたり、置き換えたりしたいとき。
  • UNSTRING:区切り文字を使って文字列を複数の部分に分けたいとき。

たとえば、住所の中から「都道府県」を取り出したい場合はUNSTRINGが便利です。一方、住所に含まれる特定の文字(例:「-」や「丁目」など)を数えたり削除したいときはINSPECTが向いています。

5. 実務での応用例

5. 実務での応用例
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
    都道府県:東京都
    市区町村:新宿区

このように、UNSTRINGINSPECTを組み合わせることで、文字列データを自在に操作できます。実際のシステム開発でも頻繁に使われるテクニックです。

まとめ

まとめ
まとめ

今回の記事では、COBOLプログラミングにおける文字列操作の基本から応用までを詳しく解説してきました。文字列検索や置換、分割といった処理は、一見地味に思えるかもしれませんが、基幹システムの開発現場では欠かすことのできない非常に重要なスキルです。特に、大量のデータを扱う金融機関や公共機関のシステムでは、データの正規化や整形のために、今回紹介したINSPECT文UNSTRING文が八面六臂の活躍を見せます。

● 文字列操作をマスターするメリット

COBOLで文字列を自在に操れるようになると、外部から取り込んだCSV形式のデータや、ユーザーが入力した自由形式のテキストを、プログラムが処理しやすい形へと効率的に変換できるようになります。例えば、全角と半角が混在しているデータの整理や、特定のキーワードが含まれているレコードの抽出など、業務ロジックの根幹を支える処理がスムーズに実装可能となります。

● さらなるステップアップ:C#との比較

現代のシステム開発では、レガシーなCOBOLシステムを最新のC#(.NET)環境へ移行する「マイグレーション」の需要も高まっています。参考までに、今回学んだCOBOLの文字列処理をモダンなC#で記述するとどのようになるか、サンプルプログラムを見てみましょう。


using System;

class StringSample
{
    static void Main()
    {
        // 文字列の定義
        string fullAddress = "123-4567,東京都,新宿区";

        // カンマで分割(UNSTRINGに相当)
        string[] parts = fullAddress.Split(',');
        
        string zipCode = parts[0];
        string prefName = parts[1];
        string cityName = parts[2];

        // ハイフンを除去(INSPECT REPLACINGに相当)
        zipCode = zipCode.Replace("-", "");

        Console.WriteLine($"郵便番号:{zipCode}");
        Console.WriteLine($"都道府県:{prefName}");
        Console.WriteLine($"市区町村:{cityName}");
    }
}

郵便番号:1234567
都道府県:東京都
市区町村:新宿区

C#ではSplitメソッドやReplaceメソッドを使うことで、COBOLと同様の処理を簡潔に記述できます。しかし、処理の裏側にあるロジック(区切り文字を探して分割する、特定の文字を置き換える)の本質は同じです。COBOLで培った「論理的なデータ操作の考え方」は、他の言語を習得する際にも大きな武器になります。

● 現場で役立つ実践ポイント

実務でINSPECTUNSTRINGを使用する際は、変数の桁数(PIC句の定義サイズ)に注意を払いましょう。COBOLは固定長形式の言語であるため、分割した後の文字列が定義したサイズを超えてしまうと、データが切り捨てられる(末尾欠落)の原因となります。事前にデータの最大長を把握し、余裕を持った変数定義を行うことが、バグを防ぐためのプロのテクニックです。

文字列検索・操作の技術を習得することで、あなたのプログラミングの幅は格段に広がります。まずは小さなサンプルコードを自分で動かしてみて、思い通りの結果が得られるか確認することから始めてみてください。

先生と生徒の振り返り会話

生徒

「先生、ありがとうございました!INSPECTUNSTRINGの使い方、ようやくイメージが掴めてきました。特に、一つの長いデータをバラバラに分解するUNSTRINGって、パズルを解いているみたいで面白いですね。」

先生

「その感覚、とても大切ですよ!COBOLは古い言語と思われがちですが、文字列を処理する仕組みは非常に論理的で分かりやすいんです。ところで、実際にコードを書いてみて、何か気づいたことはありますか?」

生徒

「はい!さっきの郵便番号の例で、ハイフンを消すときにINSPECTを使いましたけど、これって文字を消すだけじゃなくて、全然違う文字に変えることもできるんですよね?」

先生

「鋭いですね。その通りです。例えば、小文字の'a'を大文字の'A'に変えたり、セキュリティのために特定の数字を'*'(アスタリスク)で伏せ字にしたりするのもINSPECT REPLACINGの得意技です。業務システムでは個人情報の保護なども重要ですから、そういった場面でもよく使われますよ。」

生徒

「なるほど、データの加工だけじゃなくて、セキュリティ対策にも使えるんですね。あと、C#のコードも見せてもらいましたけど、命令の名前は違っても、やろうとしていることは同じなんだなって驚きました。」

先生

「良いところに気づきましたね。プログラミング言語が変わっても、エンジニアが考えるべき『ロジックの基本』は共通しています。COBOLでしっかりとしたデータ処理の基礎を身につければ、将来的に最新のクラウドシステムやAI開発に関わることになっても、必ずその経験が活きてきますよ。」

生徒

「それを聞いて安心しました!まずはCOBOLの文字列操作を完璧にマスターして、どんなデータが来ても怖くないエンジニアを目指します。次は、もっと複雑な条件分岐についても教えてください!」

先生

「その意気です。次は複数の条件を組み合わせた高度なデータ判定に挑戦してみましょう。文字列操作ができるようになれば、条件分岐の幅ももっと広がりますからね。頑張りましょう!」

カテゴリの一覧へ
新着記事
New1
C#
C#で条件分岐をネストする方法!入れ子構造の書き方を基礎から学ぼう
New2
COBOL
COBOLの文字列検索を完全ガイド!初心者でもわかるINSPECTとUNSTRINGの使い方
New3
C#
C#でXMLバリデーションを完全マスター!XSDスキーマを使ったチェック方法を初心者向けに解説
New4
COBOL
COBOLのEDITING記述子を完全解説!初心者でもわかるPIC Z・\*・\$による整形出力
人気記事
No.1
Java&Spring記事人気No1
C#
C#のpartialクラスとは?初心者でも理解できるクラス分割の基本
No.2
Java&Spring記事人気No2
C#
C#の引数と戻り値の基本!値を受け渡し・返す仕組みを理解しよう
No.3
Java&Spring記事人気No3
C#
C#のstaticクラスとstaticメソッドの基本と使い方をやさしく解説!
No.4
Java&Spring記事人気No4
C#
C#のLINQでFirstとFirstOrDefaultの違いと使い方を完全解説!初心者向けガイド
No.5
Java&Spring記事人気No5
C#
C#のラムダ式の書き方と構文を初心者向けに完全解説
No.6
Java&Spring記事人気No6
COBOL
COBOLの数値データ型「PIC 9」の使い方と注意点をやさしく解説!
No.7
Java&Spring記事人気No7
C#
C#のLINQでOrderByを使った並び替えを完全ガイド!初心者でもわかるソート方法
No.8
Java&Spring記事人気No8
C#
C#で型を調べる方法!GetType()・typeof演算子の違いと使い方