ロケール操作中のエラーの処理

ILE COBOL のロケールには、以下の 3 つのタイプがあります。

特定ロケールは、SPECIAL-NAMES 段落および SET LOCALE ステートメントで参照されます。 SPECIAL-NAMES 段落の特定ロケールの例を、以下に示します。

 SPECIAL-NAMES.  LOCALE "MYLOCALE" IN LIBRARY "MYLIB" IS newlocale.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 group-item.
   05  num-edit PIC $99.99 SIZE 8 LOCALE newlocale.
PROCEDURE DIVISION.
    MOVE 40 to num-edit.                                          

上記の例では、特定ロケールの簡略名 newlocale が定義されています。 この簡略名は、変数 num-edit の定義で使用されます。 簡略名はプログラムで参照されるので、上記のプログラムが初めて呼び出される際に、実行時の ILE COBOL は、ライブラリー MYLIB のロケール MYLOCALE を検出して、 それを記憶域にロードしようとします。

iSeries システムのロケールは、タイプが *LOCALE のオブジェクトであり、 他の iSeries オブジェクト同様、ライブラリー内に存在し、それに特定の権限を割り当てられています。 COBOL プログラムで定義され、かつ参照されるロケール簡略名は、 プログラムが最初に呼び出される際に解決されます。 考えられる障害のタイプを、以下に示します。

これらのタイプの障害は、ほとんどの他の iSeries オブジェクトで一般的なものです。 上記シナリオはどの場合も、エスケープ・メッセージ (通常は LNR7096) が出されます。 ロケール・オブジェクトは、検出された後、実行時の ILE COBOL によってロードしなければなりません。 ロケール・オブジェクトをロードするには、さまざまなスペースの割り振りが必要です。 使用できるスペースがない場合は、エスケープ・メッセージ (通常は、LNR7070) が出されます。

SET LOCALE には考えられる形式がいくつかあります。特定のロケールを参照できる 2 つの基本形式を次に示します。

 SPECIAL-NAMES.  LOCALE "ALOCALE" IS alocale.
 DATA DIVISION.
 WORKING-STORAGE SECTION.
 O1 group-item.
    05 num-edit PIC +$9(4).99 SIZE 10 LOCALE alocale.
* num-edit2 is based on the current locale
    05 num-edit2 PIC +$9(4).99 SIZE 10 LOCALE.
    05 locale-name PIC X(10) VALUE "FRANCE".
    05 locale-lib  PIC X(10) VALUE "MYLIB".
    MOVE 345.67 TO num-edit.
* set the current locale to "ALOCALE" in library "*LIBL".
    SET LOCALE LC_ALL FROM alocale.
    MOVE 678.02 TO num-edit2.

* set the current locale to "FRANCE" in library "MYLIB".
    SET LOCALE LC_ALL FROM locale-name
        IN LIBRARY locale-lib.
    MOVE 678.02 TO num-edit2.

最初の形式は SPECIAL-NAMES 段落のロケール簡略名を参照し、前の例の場合同様、プログラムが最初に呼び出される時に解決され、ロードされます。 2 番目の SET ステートメントでは、ロケール名は ID locale-name の内容から選ばれ、ロケールが存在するライブラリーは ID locale-lib の内容から選ばれます。 この場合、ロケール・オブジェクトの解決とロードは、SET ステートメントの実行時に行われます。 この形式の SET ステートメントで、ロケールが解決できない場合は、エスケープ・メッセージ (通常は LNR7098) が出されます。 メッセージが出される理由のタイプは、前述の LNR7096 の場合と同じです。