COBOL2002 使用の手引 手引編


付録A.3 EUCの場合

〈この項の構成〉

(1) EUCコードを使用したCOBOLプログラム

(a) 使用方法

環境変数LANGに,日本語EUCに対応した設定値が設定された環境(日本語EUC環境)では,コンパイル時および実行時の動作環境が日本語EUCとなります。日本語EUC環境では,日本語EUCコードで記述されたCOBOLソースをコンパイルおよび実行できます。日本語EUCに対応した環境変数LANGの設定値を次に示します。

表A‒3 動作環境が日本語EUCとなる環境変数LANGの設定値

OS

環境変数LANGの設定値

AIX

ja_JP

Linux

設定できません。

日本語EUC環境で作成したCOBOLプログラム(オブジェクト,アーカイブライブラリ,共用ライブラリ,または実行可能ファイル)は,日本語EUC環境で実行する必要があります。また,ほかの環境で作成したCOBOLプログラムと混在して使用することはできません。日本語EUC環境以外で実行した場合,およびほかの環境で作成したCOBOLプログラムと混在して使用した場合は,動作は保証しません。

(b)  注意事項

次の内容に反した場合の結果は保証しません。また,エラーチェックもその旨の記述がないときは行われません。

  • 半角かたかな文字は,2バイト文字となります。そのため,半角かたかな文字がある文字定数と関連する定義エリアは2バイト分必要となります。

    (例)

    [図データ]

    • 文字定数に関する既存のエラーチェックも半角かたかな1文字を2バイトとして行います。

    • 半角かたかな文字は,日本語定数の中に含めることはできません。日本語定数の中に半角かたかな文字を指定した場合,コンパイルエラーとなります。

    • 半角かたかな文字は,2バイトで1文字しか印刷されません。そのため,後ろのデータ項目の印刷位置が半角かたかな文字の文字数分だけずれます。

    • 固定形式正書法では72バイト目までが翻訳の対象とされ,73バイト目以降の記述は無視されます。シフトJIS環境で作成された半角かな文字を含む原始プログラムをEUCコードに変換して使用すると,半角かな文字の部分が右側にずれます。73バイト目以降にずれた部分は,翻訳の対象とみなされません。

  • 利用者語およびデータ項目として,3バイトの外字は使用できません。

  • 外字,機種依存文字およびシフトJISコードの2バイト文字データ,シフトJISコードの半角かたかな文字のデータ自体をプログラム中で使用する場合は,16進文字定数または16進日本語文字定数で指定してください。

  • 2バイト文字,半角かたかな文字のCOBOLソースファイルファイル名,ディレクトリ名は使用できません。コード体系の相違から問題が発生する場合があります。

  • -Switch,EBCDIK/-Switch,EBCDICオプション指定時,またはPROGRAM COLLATING SEQUENCE句の指定時に,比較条件に半角かたかな文字を含むALL文字定数を指定した場合の動作は保証しません。

(2) -EucPositionオプション(AIXで有効)

EUCコード使用時に見かけ上の文字位置で,固定形式正書法の境界を決定するときに指定します。このオプションを指定した場合,半角かたかな文字は2バイトとして扱われます。しかし,固定形式正書法の境界を決定するときには,見かけ上の1バイトとして扱われます。

(例)

[図データ]

  • このCOBOLソースファイルがEUCコードで書かれていた場合,コンパイルエラーとなります。

  • -EucPositionオプションを指定すると,このままコンパイルできます。ただし,この場合でもPIC X(5)ではなく,PIC X(10)にする必要があります。

(a) 使用方法

コンパイル時に,-EucPositionオプションを指定します。

(b) -EucPositionオプション指定時の注意事項

  • -EucPositionオプションの対象となるCOBOLソースファイルがEUCコードでない場,その結果は保証しません。

  • 環境変数LANGに,「表A‒3 動作環境が日本語EUCとなる環境変数LANGの設定値」に示す設定値が指定されていない環境で-EucPositionオプションが指定されたとき,-EucPositionオプションは無視されます。

  • 自由形式正書法のCOBOLソースファイルに対して,-EucPositionオプションは指定できません。自由形式正書法のCOBOLソースファイルに-EucPositionオプションを指定した場合は,コンパイルエラーとなります。自由形式正書法とオプションとの関係については,「32.2.3 正書法」の「(4) 自由形式正書法で指定できないコンパイラオプション」を参照してください。

(3) 組み込み関数を使用した文字列操作

(a) 日本語EUC環境に対応した組み込み関数

日本語EUCの文字操作や文字数またはけた数の取得ができる組み込み関数を次に示します。組み込み関数については,マニュアル「COBOL2002 言語 拡張仕様編」 「25.5 組み込み関数」を参照してください。

表A‒4 日本語EUC環境に対応した組み込み関数

用途

組み込み関数名

概要

文字列の取り出し

SUBSTRING

字類が英字,英数字または日本語のデータ項目から部分文字列を返します。

文字数の取得

COUNT-CHAR

字類が英字,英数字または日本語のデータ項目の文字数を返します。

けた数の取得

LENGTH-OF-SUBSTRING

字類が英字,英数字または日本語のデータ項目の部分文字列のけた数を返します。

(b) 用語説明

使用する用語の説明を次に示します。

表A‒5 日本語EUC環境に対応した組み込み関数で使用する用語説明

用語

説明

COBOL2002での用途

見た目幅

半角文字を1,全角文字を2とした見た目の幅

Unicode機能や日本語EUC環境の組み込み関数で,文字を見た目幅で数える場合に使用します。

(c) 日本語EUC環境に対応した組み込み関数の注意事項

  • SUBSTRING,COUNT-CHAR,LENGTH-OF-SUBSTRING組み込み関数は,部分参照やLENGTH関数と比較して,文字の判定が必要になるため,実行時間が増加します。そのため,次の場合,部分参照の使用を推奨します。

    • 半角かたかなや全角文字が格納されない英数字項目など,1文字のサイズが可変となる可能性がないデータ項目を参照する場合,部分参照を使用する。

    • 文字列の取り出しで,けた数と文字数の両方がわかっている場合,けた数による部分参照を使用する。

  • 日本語EUC環境でコンパイルしたSUBSTRING,COUNT-CHAR,LENGTH-OF-SUBSTRING組み込み関数を使用するプログラムを日本語EUC環境以外で実行した場合,実行時エラーとなり,プログラムの実行を中止します。

  • 実行時に引数をチェックして,引数誤りがある場合は,EC-ARGUMENT-FUNCTION例外が発生します。

    日本語EUC環境に対応した組み込み関数で,EC-ARGUMENT-FUNCTION例外が発生する引数誤りの要因を次に示します。

    表A‒6 日本語EUC環境に対応した組み込み関数の引数誤りの要因

    組み込み関数名

    引数誤りの要因

    COUNT-CHAR

    • 引数1の文字コードが不当な値である。

    • 引数1が日本語項目の場合に奇数バイトの文字が混在している。

    LENGTH-OF-SUBSTRING

    • 引数1の文字コードが不当な値である。

    • 引数1が日本語項目の場合に奇数バイトの文字が混在している。

    • 引数2と引数3が一意名または算術式で,値が正の整数でない。

    • 引数2で指定する開始位置,または引数2で指定する開始位置から引数3で指定する長さだけ進めた文字位置が引数1の終端を超えている。

    • 引数2で指定する開始位置,または引数2で指定する開始位置から引数3で指定する長さだけ進めた文字位置が全角文字の途中である。

    SUBSTRING

    • 引数1の文字コードが不当な値である。

    • 引数1が日本語項目の場合に奇数バイトの文字が混在している。

    • 引数2と引数3が一意名または算術式で,値が正の整数でない。

    • 引数2で指定する開始位置,または引数2で指定する開始位置から引数3で指定する長さだけ進めた文字位置が引数1の終端を超えている。

    • 引数2で指定する開始位置,または引数2で指定する開始位置から引数3で指定する長さだけ進めた文字位置が全角文字の途中である。

    注※

    文字コードが不当な値となっている記述例を次に示します。

    (例)

    01 DATA1 PIC X(20).

    VALUE X'8EB18EB28EB38EB48EF58EB68EB78EB88EB98EBA'.

    *> アイウエオカキクケコと設定したいが,10バイト目が不正(B5ではなくF5になっている

    *> この位置にF5があるのは日本語EUCとして不正な文字と扱う)

    MOVE FUNCTION SUBSTRING(DATA1, 2, 4) TO DATA2.