COBOLのSTRING文を完全ガイド!初心者でもわかる文字列の結合方法
生徒
「先生、COBOLで二つの文字列をつなげて一つにする方法ってありますか?」
先生
「はい、COBOLではSTRING文を使うと簡単に文字列を結合できますよ。」
生徒
「STRING文ってどんな仕組みなんですか?」
先生
「たとえば『山田』と『太郎』をつなげて『山田太郎』にしたいときに使うものです。それでは使い方を見ていきましょう!」
1. STRING文とは?
COBOLのSTRING文は、複数の文字列を結合してひとつの文字列にするための命令です。日常生活で例えると、レゴブロックをつなげて一つの形を作るようなイメージです。
プログラムでは、名前・住所・電話番号などをまとめて一つの文字列にするときに使われます。特に業務システムでは、顧客情報を出力する際に役立ちます。
2. STRING文の基本構文
基本的な書き方は以下の通りです。
STRING 文字列1
文字列2
文字列3
INTO 結合後の変数
END-STRING
INTOで指定した変数に、すべての文字列を順番につなげた結果が入ります。
3. STRING文のサンプル(名前を結合する)
例えば「姓」と「名」をくっつけてフルネームにする例です。
IDENTIFICATION DIVISION.
PROGRAM-ID. STRING-EXAMPLE.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 LAST-NAME PIC X(10) VALUE "YAMADA".
01 FIRST-NAME PIC X(10) VALUE "TARO".
01 FULL-NAME PIC X(20).
PROCEDURE DIVISION.
STRING LAST-NAME DELIMITED BY SPACE
FIRST-NAME DELIMITED BY SPACE
INTO FULL-NAME
END-STRING.
DISPLAY "フルネーム: " FULL-NAME.
STOP RUN.
フルネーム: YAMADATARO
DELIMITED BY SPACEは「スペースが出るまで文字を取り込む」という指定です。つまり「YAMADA」や「TARO」に余分な空白があっても正しく結合されます。
4. WITH POINTERを使った結合
STRING文ではWITH POINTERを使って、結合を始める位置を指定できます。ポインタとは「どこから文字を入れるかを指し示す目印」のことです。
IDENTIFICATION DIVISION.
PROGRAM-ID. POINTER-EXAMPLE.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 ADDRESS PIC X(50).
01 PTR PIC 9(2) VALUE 1.
PROCEDURE DIVISION.
STRING "TOKYO" DELIMITED BY SIZE
" " DELIMITED BY SIZE
"JAPAN" DELIMITED BY SIZE
INTO ADDRESS
WITH POINTER PTR
END-STRING.
DISPLAY "住所: " ADDRESS.
STOP RUN.
住所: TOKYO JAPAN
WITH POINTERを指定すると、文字列をどこから追加していくかをコントロールできます。これにより、途中から追加する処理や、異なる位置に文字列を埋め込むことが可能です。
5. DELIMITED BYの使い方
DELIMITED BYは「ここで文字列を切る」という区切りを指定するオプションです。よく使うのは次の2種類です。
- DELIMITED BY SPACE:スペースが現れたら文字列を終了する
- DELIMITED BY SIZE:変数やリテラル全体を対象にする
日本語で説明すると、DELIMITED BY SPACEは「空白まで読む」、DELIMITED BY SIZEは「最後まで読む」と覚えるとわかりやすいです。
6. 複数の文字列を一度に結合する
STRING文は複数の文字列をまとめてつなげることも可能です。以下は姓・名・敬称をまとめる例です。
IDENTIFICATION DIVISION.
PROGRAM-ID. MULTI-EXAMPLE.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 LAST-NAME PIC X(10) VALUE "SUZUKI".
01 FIRST-NAME PIC X(10) VALUE "HANAKO".
01 TITLE PIC X(5) VALUE "SAN".
01 FULL-LINE PIC X(30).
PROCEDURE DIVISION.
STRING LAST-NAME DELIMITED BY SPACE
FIRST-NAME DELIMITED BY SPACE
TITLE DELIMITED BY SIZE
INTO FULL-LINE
END-STRING.
DISPLAY "結合結果: " FULL-LINE.
STOP RUN.
結合結果: SUZUKIHANAKOSAN
このように、3つ以上の文字列も一度に簡単に連結できます。
7. 初心者が注意すべきポイント
- 結合先のサイズ:
INTOで指定した変数が小さいと、文字列が途中で切れてしまいます。 - 空白の扱い:スペースを区切りにするか、サイズ全体を読むかを意識しましょう。
- 日本語(全角文字)の長さ:日本語は1文字が2バイトになる場合があるので、文字数ではなくバイト数で考える必要があります。
8. 実務での活用例
業務システムでは、STRING文は次のような場面で活用されます。
- 姓・名を連結して帳票や画面に表示する
- 郵便番号と住所を一つの文字列にまとめる
- 複数のコードを連結して検索キーを作成する
このように、STRING文はCOBOLで文字列を自在に扱うための基本技術です。理解しておくと、プログラムが読みやすくなり、業務システムの開発効率も上がります。
まとめ
COBOLのSTRING文は、業務システムでよく使われる文字列の結合処理を安全かつ確実に行うための大切な仕組みです。姓と名をくっつけてフルネームを作る場面から、住所や顧客情報をまとめて1本の文字列に整理する処理まで、幅広い用途で使われています。特に、STRING文は複数の文字列をまとめて結合できるだけでなく、DELIMITED BYやWITH POINTERのようなオプションを使うことで、結合の細かい制御も可能です。文字列の端にある空白を無視したり、途中から結合を始めたりといった柔軟な動作を自然に書けるため、業務データを扱う現場では非常に重宝されます。
文字列結合を行う際には、結合先の変数サイズに注意することも欠かせません。INTOで指定した領域が短いと、それだけで文字列が途中で切れてしまい、本来意図した結果が得られない可能性があります。また、日本語の全角文字を扱う場合は、バイト数の違いによって予想外の結果になることもあるため、適切な項目長を確保することが重要です。DELIMITED BY SPACEを使用すれば余分な空白を取り除いて結合できますし、DELIMITED BY SIZEを使えば項目全体をしっかり取り込めるため、データ内容に応じて使い分けるのがポイントになります。
さらに、WITH POINTERを使うことで、結合位置を自由に操作できるため、部分的にデータを追加したい場合や、あらかじめ構造を決めた文字列に後から情報を埋め込みたい場合にも対応できます。STRING文は初心者にも理解しやすい命令ですが、実務的にはかなり応用の幅が広く、郵便番号と住所を連結したり、複数のコードをまとめて検索キーを生成したりと、幅広い工程で役立つ技術です。正しい使い方を身につけておけば、COBOLでの文字列処理がぐっとスムーズになり、複雑な帳票作成やデータ加工を効率よく進められます。
サンプルプログラム:住所をまとめて1行にするSTRING文の例
IDENTIFICATION DIVISION.
PROGRAM-ID. ADDRESS-STRING.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 ZIP-CODE PIC X(10) VALUE "123-4567".
01 PREF PIC X(10) VALUE "TOKYO".
01 CITY PIC X(10) VALUE "MINATO".
01 ADDRESS-LINE PIC X(40).
01 PTR PIC 9(2) VALUE 1.
PROCEDURE DIVISION.
STRING ZIP-CODE DELIMITED BY SIZE
" " DELIMITED BY SIZE
PREF DELIMITED BY SPACE
" " DELIMITED BY SIZE
CITY DELIMITED BY SPACE
INTO ADDRESS-LINE
WITH POINTER PTR
END-STRING.
DISPLAY "住所情報: " ADDRESS-LINE.
STOP RUN.
この例では、郵便番号・都道府県・市区名を一つの文字列にまとめています。DELIMITED BY SIZEとDELIMITED BY SPACEを組み合わせることで、必要な部分だけを取り込みつつ、余計な空白を除いてきれいに結合できます。住所のように複数の項目から構成される文字列を扱うとき、STRING文の使い方を知っていれば安心して処理を組み立てられます。WITH POINTERを使って結合開始位置を制御することで、文字列の一部を上書きせずに追加しやすくなる点も実務で役立つポイントです。
STRING文をより深く理解するためのポイントを整理すると次のようになります。
- 複数の文字列を自然な形で結合できる。
- DELIMITED BYで区切り方を柔軟に設定できる。
- WITH POINTERを使うと結合位置をコントロールできる。
- INTO先のサイズ不足に注意する必要がある。
- 全角文字を扱う場合はバイト長を意識する。
COBOLは業務システムの中核で使われることが多く、文字列処理は日々の業務を支える重要な技術です。STRING文を使いこなせるようになると、帳票出力、顧客情報整形、検索キー生成などの実務処理が一気に効率化されます。今回学んだ内容を踏まえて、実際に自分でも組み合わせて試してみることで、より深く理解できるようになります。
生徒
「STRING文ってシンプルだけど、かなり奥が深いんですね!」
先生
「ええ、そのとおりです。文字列を扱う場面は本当に多いので、正しく理解しておくととても役立ちますよ。」
生徒
「DELIMITED BYの違いも、実際に例を見たことでイメージがつかめました。」
先生
「使い分けがしっかりできると、余計な空白を気にせずにきれいな文字列が作れますからね。」
生徒
「WITH POINTERを使うと、途中から文字を載せられるのも便利ですね!」
先生
「その自由度がSTRING文の魅力です。住所や氏名のような複数構成の文字列で特に効果を発揮しますよ。」
生徒
「これで文字列を扱うプログラムも怖くなくなりました!」
先生
「その調子です。慣れてくるとSTRING文の便利さがどんどん実感できますよ。」