COBOLの文字列検索を完全ガイド!初心者でもわかるINSPECTとUNSTRINGの使い方
生徒
「先生、COBOLで文字列の中から特定の言葉を探したり、分けたりすることってできますか?」
先生
「もちろんできますよ。COBOLには、文字列を調べたり分解したりするための命令があります。その代表がINSPECTとUNSTRINGです。」
生徒
「なんだか難しそうですが、どんなときに使うんですか?」
先生
「たとえば、文章の中にある文字を数えたいときや、カンマで区切られたデータを分けたいときなどに使います。実際の例を見てみましょう!」
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文とは?
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を組み合わせることで、文字列データを自在に操作できます。実際のシステム開発でも頻繁に使われるテクニックです。
まとめ
今回の記事では、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で培った「論理的なデータ操作の考え方」は、他の言語を習得する際にも大きな武器になります。
● 現場で役立つ実践ポイント
実務でINSPECTやUNSTRINGを使用する際は、変数の桁数(PIC句の定義サイズ)に注意を払いましょう。COBOLは固定長形式の言語であるため、分割した後の文字列が定義したサイズを超えてしまうと、データが切り捨てられる(末尾欠落)の原因となります。事前にデータの最大長を把握し、余裕を持った変数定義を行うことが、バグを防ぐためのプロのテクニックです。
文字列検索・操作の技術を習得することで、あなたのプログラミングの幅は格段に広がります。まずは小さなサンプルコードを自分で動かしてみて、思い通りの結果が得られるか確認することから始めてみてください。
生徒
「先生、ありがとうございました!INSPECTとUNSTRINGの使い方、ようやくイメージが掴めてきました。特に、一つの長いデータをバラバラに分解するUNSTRINGって、パズルを解いているみたいで面白いですね。」
先生
「その感覚、とても大切ですよ!COBOLは古い言語と思われがちですが、文字列を処理する仕組みは非常に論理的で分かりやすいんです。ところで、実際にコードを書いてみて、何か気づいたことはありますか?」
生徒
「はい!さっきの郵便番号の例で、ハイフンを消すときにINSPECTを使いましたけど、これって文字を消すだけじゃなくて、全然違う文字に変えることもできるんですよね?」
先生
「鋭いですね。その通りです。例えば、小文字の'a'を大文字の'A'に変えたり、セキュリティのために特定の数字を'*'(アスタリスク)で伏せ字にしたりするのもINSPECT REPLACINGの得意技です。業務システムでは個人情報の保護なども重要ですから、そういった場面でもよく使われますよ。」
生徒
「なるほど、データの加工だけじゃなくて、セキュリティ対策にも使えるんですね。あと、C#のコードも見せてもらいましたけど、命令の名前は違っても、やろうとしていることは同じなんだなって驚きました。」
先生
「良いところに気づきましたね。プログラミング言語が変わっても、エンジニアが考えるべき『ロジックの基本』は共通しています。COBOLでしっかりとしたデータ処理の基礎を身につければ、将来的に最新のクラウドシステムやAI開発に関わることになっても、必ずその経験が活きてきますよ。」
生徒
「それを聞いて安心しました!まずはCOBOLの文字列操作を完璧にマスターして、どんなデータが来ても怖くないエンジニアを目指します。次は、もっと複雑な条件分岐についても教えてください!」
先生
「その意気です。次は複数の条件を組み合わせた高度なデータ判定に挑戦してみましょう。文字列操作ができるようになれば、条件分岐の幅ももっと広がりますからね。頑張りましょう!」