カテゴリ: COBOL 更新日: 2025/12/08

COBOLのUNSTRING文で文字列を分割する方法を徹底解説!初心者向け入門ガイド

UNSTRING文で文字列を分割するテクニック
UNSTRING文で文字列を分割するテクニック

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

生徒

「先生、COBOLで文字列をバラバラに分ける方法ってありますか?」

先生

「はい、COBOLではUNSTRING文を使って文字列を分割することができます。」

生徒

「UNSTRINGって何ですか?どうやって使うんですか?」

先生

「それでは、UNSTRING文の基本的な使い方から一緒に学んでいきましょう。」

1. UNSTRING文とは?

1. UNSTRING文とは?
1. UNSTRING文とは?

COBOLのUNSTRING文は、ひとつの長い文字列を指定した区切り文字で分割し、それぞれを別々の変数に格納するための命令です。
例えば、カンマ「,」で区切られた「田中,太郎,30」という文字列があった場合に、「田中」「太郎」「30」と3つの要素に分けることができます。
プログラムの世界では、このような処理を文字列分割パースと呼びます。

この仕組みを使うことで、CSVファイルのようにカンマ区切りで保存されているデータを簡単に取り出すことができます。
また、氏名や住所などの情報を「名字」と「名前」に分けたり、「郵便番号」と「住所」に切り分けたりすることも可能です。

2. UNSTRING文の基本的な書き方

2. UNSTRING文の基本的な書き方
2. UNSTRING文の基本的な書き方

まずは基本的な構文を紹介します。


UNSTRING 元の文字列
    DELIMITED BY 区切り文字
    INTO 変数1 変数2 変数3 ...
END-UNSTRING

- 元の文字列:分割したい文字列を指定します。
- DELIMITED BY:どの文字で区切るかを指定します。例えばカンマ(,)やスペース(半角空白)などです。
- INTO:分割後に格納する変数を順番に並べて書きます。

3. 実際のサンプルコード

3. 実際のサンプルコード
3. 実際のサンプルコード

それでは実際にサンプルプログラムを見てみましょう。


IDENTIFICATION DIVISION.
PROGRAM-ID. UNSTRING-DEMO.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 INPUT-DATA      PIC X(20) VALUE "田中,太郎,30".
01 LAST-NAME       PIC X(10).
01 FIRST-NAME      PIC X(10).
01 AGE             PIC X(3).
PROCEDURE DIVISION.
    UNSTRING INPUT-DATA
        DELIMITED BY ","
        INTO LAST-NAME FIRST-NAME AGE
    END-UNSTRING

    DISPLAY "名字: " LAST-NAME
    DISPLAY "名前: " FIRST-NAME
    DISPLAY "年齢: " AGE
    STOP RUN.

このプログラムを実行すると、次のような結果が得られます。


名字: 田中
名前: 太郎
年齢: 30

4. UNSTRING文の便利なオプション

4. UNSTRING文の便利なオプション
4. UNSTRING文の便利なオプション

UNSTRING文には、初心者が知っておくと便利なオプションがいくつかあります。ここでは代表的なものを紹介します。

① WITH POINTER

分割処理の途中で「文字列のどこまで処理したか」を記録することができます。
例えば「山田,花子,25,東京都」という長いデータを分割して、3つ目の項目まで処理したあと、次の項目から処理を続けたい場合に便利です。


01 POINTER-NUM PIC 9(3) VALUE 1.

UNSTRING INPUT-DATA
    DELIMITED BY ","
    INTO LAST-NAME FIRST-NAME AGE
    WITH POINTER POINTER-NUM
END-UNSTRING

② TALLYING

分割して実際にいくつの項目を取り出せたかをカウントしてくれます。
データの中に空の項目がある場合や、分割した数を確認したいときに役立ちます。


01 COUNT-NUM PIC 9(3).

UNSTRING INPUT-DATA
    DELIMITED BY ","
    INTO LAST-NAME FIRST-NAME AGE
    TALLYING COUNT-NUM
END-UNSTRING

5. 日常生活にたとえて理解しよう

5. 日常生活にたとえて理解しよう
5. 日常生活にたとえて理解しよう

文字列の分割は、実はとても身近な考え方です。
例えば、スーパーで「りんご・みかん・バナナ」と書かれた買い物メモを見たとします。
これをそのままでは「果物のリスト」としてしか使えませんが、「りんご」「みかん」「バナナ」と分けることで、個別にかごに入れることができます。
COBOLのUNSTRING文は、この「・」の部分を区切り文字と見なして、メモを自動で3つに分けてくれるイメージです。

6. よく使われる応用例

6. よく使われる応用例
6. よく使われる応用例

初心者が実際に使う場面をイメージしやすいように、よくある応用例を紹介します。

  • 住所を「郵便番号」「都道府県」「市区町村」に分ける
  • CSVデータを1行ずつ分解して項目ごとに処理する
  • スペース区切りの入力を個別の単語に分ける

これらの処理は、すべてUNSTRING文を使って簡単に実現できます。
特に業務システムでは、社員名簿や商品リストなどを分割して利用することが多いため、UNSTRING文は必須のスキルと言えます。

まとめ

まとめ
まとめ

COBOLのUNSTRING文は、業務システムの中でも非常に使用頻度が高い文字列分割処理をシンプルに実現できる強力な機能です。今回の記事では、区切り文字を指定して文字列を複数の項目に分ける基本的な使い方から、WITH POINTER や TALLYING といった便利なオプションまで、初心者でも理解しやすいように段階を追って解説しました。UNSTRING文を活用することで、CSVの1行を項目ごとに分解したり、住所データを郵便番号や都道府県に切り分けたりと、多くの場面で効率の良いデータ操作が可能になります。 特に、COBOLのような業務系プログラムでは、文字列をどのように加工するかがプログラム全体の処理効率や保守性に大きく影響します。そのため、UNSTRING文を正しく理解し、TALLYING や WITH POINTER を上手に使いこなせるようになると、日常のデータ処理の幅が大きく広がります。そして、分割後の結果を別の処理やサブルーチンに渡したり、ファイルに出力したりと、他の機能と組み合わせることで、さらに柔軟なデータ操作ができるようになります。 以下に、記事の理解を深めるための総合的なサンプルコードを掲載します。分割処理とオプション使用がひとつにまとまった例として、復習の参考にしてください。

UNSTRING文の総合サンプルコード


IDENTIFICATION DIVISION.
PROGRAM-ID. UNSTRING-SUMMARY.

DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-DATA        PIC X(40)
                  VALUE "山田,花子,28,東京都練馬区".
01 WS-LAST        PIC X(10).
01 WS-FIRST       PIC X(10).
01 WS-AGE         PIC X(3).
01 WS-ADDR        PIC X(20).
01 WS-POINTER     PIC 9(3) VALUE 1.
01 WS-COUNT       PIC 9(3).

PROCEDURE DIVISION.
    UNSTRING WS-DATA
        DELIMITED BY ","
        INTO WS-LAST WS-FIRST WS-AGE WS-ADDR
        WITH POINTER WS-POINTER
        TALLYING WS-COUNT
    END-UNSTRING

    DISPLAY "名字:" WS-LAST
    DISPLAY "名前:" WS-FIRST
    DISPLAY "年齢:" WS-AGE
    DISPLAY "住所:" WS-ADDR
    DISPLAY "取り出した項目数:" WS-COUNT

    STOP RUN.

このサンプルでは、区切り文字ごとに名前・年齢・住所を切り出し、WITH POINTER で「どこまで読み取ったか」を追跡しつつ、TALLYING で「いくつ取り出せたのか」をカウントしています。実務で必要になる情報がひとつの例にまとまっているため、応用への理解が進みやすくなっています。 また、UNSTRING は単に文字列をバラバラにするだけでなく、入力データの形式があらかじめ決まっている場合には特に強力な手段になります。CSV形式のファイルを読み込むバッチ処理や、オンライン入力の値を項目ごとに整理する画面処理など、あらゆる場面で活躍します。こうした処理を手作業で実装しようとすると複雑になりがちですが、UNSTRING文を使えば簡潔で読みやすいプログラムに仕上げることができます。 さらに、UNSTRINGは他のCOBOL命令とも相性が良く、STRING文と組み合わせて「分割したデータを整形して結合する」など、より高度な処理も可能です。初心者の段階ではまず基本構文とオプションの動きを理解し、日常的なデータ分割処理から実践していくと自然にスキルが身につきます。文字列操作の基礎をしっかり押さえておくことで、業務プログラムの作成や保守が格段に楽になるでしょう。

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

生徒

「UNSTRING文って、思っていたよりずっと便利なんですね!特に区切り文字でデータがきれいに取り出せるのが嬉しいです。」

先生

「そうなんです。CSVデータや名前の分割など、実務で使う場面がとても多いので習得すると一気に作業が楽になりますよ。」

生徒

「WITH POINTER と TALLYING の意味もやっと理解できました。どこまで読み取ったか管理できるのはありがたいですね。」

先生

「その通りです。長い文字列や複数行のデータを扱うときにとても役立つオプションですから、ぜひ積極的に使ってみてください。」

生徒

「これならCSV処理にも応用できそうです!次はSTRING文との組み合わせにも挑戦してみたいです。」

先生

「とても良い考えですね。文字列操作の幅が広がると、COBOLプログラムの表現力もぐっと高まりますよ。」

カテゴリの一覧へ
新着記事
New1
C#
C#のLINQでAny・Allなど条件確認メソッドの使い方を完全ガイド!初心者でもわかるデータ検証
New2
C#
C#のデフォルト引数と名前付き引数の使い方を解説!初心者でも安心のやさしい入門
New3
C#
C#のオブジェクト初期化子を完全ガイド!初心者でもわかる便利な使い方
New4
COBOL
COBOLの帳票出力と編集を完全マスター!条件付き表示で分かりやすい書類を作る方法
人気記事
No.1
Java&Spring記事人気No1
C#
C#でJSONファイルを読み書きする方法(JsonSerializer・Newtonsoft.Json)
No.2
Java&Spring記事人気No2
C#
C#のpartialクラスとは?初心者でも理解できるクラス分割の基本
No.3
Java&Spring記事人気No3
C#
C#でswitch式を使う方法!C# 8.0以降の新機能を解説
No.4
Java&Spring記事人気No4
COBOL
COBOLの数値データ型「PIC 9」の使い方と注意点をやさしく解説!
No.5
Java&Spring記事人気No5
C#
C#のLINQクエリ構文の書き方と基本操作をマスターしよう
No.6
Java&Spring記事人気No6
C#
C#のLINQ(リンク)とは?基本概念とデータ操作を初心者向けに徹底解説!
No.7
Java&Spring記事人気No7
C#
C#のCancellationTokenを使ったキャンセル処理を完全ガイド!非同期処理を安全に止める方法
No.8
Java&Spring記事人気No8
C#
C#の非同期処理とUIスレッドをマスター!WPF/WinFormsでアプリが止まる問題を解決