野村 芳明(日本電気株式会社 クラウドプラットフォーム事業部)
本稿では、COBOL 第5次国際規格(COBOL 2014)の新機能である、TRIM組込関数について説明します。
TRIM組込関数は、引数の文字列から先頭や末尾の空白を削除した文字列を返します。
以下にプログラム例を示します。
01 SRC PIC X(10) VALUE "␣␣AB␣CD␣␣␣". DISPLAY "[" FUNCTION TRIM( SRC ) "]". DISPLAY "[" FUNCTION TRIM( SRC LEADING ) "]". DISPLAY "[" FUNCTION TRIM( SRC TRAILING ) "]".
[AB␣CD] [AB␣CD␣␣␣] [␣␣AB␣CD]
FUNCTION TRIM ( 引数 [ LEADING | TRAILING ] )
引数には、英字、英数字、又は各国文字のデータ項目を指定できます。
引数の型に対する関数の型は以下の通りです。
引数の型 | 関数の型 |
---|---|
英字 | 英数字 |
英数字 | 英数字 |
各国文字 | 各国文字 |
従来、TRIM組込関数と同等の処理を実現するには、先頭や末尾の空白の数を調べるために文字列を 1文字ずつ走査する処理を、利用者が記述する必要がありました。限定的に、INSPECT文や UNSTRING文で記述できる場合もありますが、TRIM組込関数を用いることで、全ての場合について簡潔で直接的な記述を行えるようになります。
文字列操作文 | TRIM組込関数相当の処理を記述する場合 |
---|---|
INSPECT文 | TALLYING 一意名 FOR LEADING SPACE の指定を行うことで先頭の空白の数を取得できますが、空白を削除した文字列を抽出するためには、部分参照などを用いた転記処理も組み合わせて記述する必要があります。また、末尾の空白の数を取得することはできません。 |
UNSTRING文 | 空白の個数があらかじめ分かっており(分割した中で何番目が目的の文字列かが固定であり)、先頭と末尾以外に空白が含まれていない場合に限り、DELIMITED BY SPACE の指定を行うことで TRIM組込関数と同等の結果を得ることができます。 |
SQL でも TRIM組込関数と同等の機能を持つ TRIM関数、LTRIM関数、RTRIM関数が提供されています(LTRIM関数、RTRIM関数は規格では既定されていませんが、多くの DBMS で独自に提供されています)。データベースを埋め込み SQL 等で処理する COBOL プログラムの場合は、これらの関数を利用することもできます。
TRIM組込関数 | 同等機能の SQL関数 |
---|---|
LEADING指定あり | LTRIM関数 |
TRAILING指定あり | RTRIM関数 |
LEADING指定も TRAILING指定もなし | TRIM関数 |
COBOL 第5次規格の新機能として TRIM組込関数について紹介しました。TRIM組込関数を用いることで、文字列の先頭や末尾の空白を削除する処理を従来よりも簡潔に記述することができます。