COBOL2002 使用の手引 手引編


29.7.1 CBLNCNV

CBLNCNVサービスルーチンは,英字項目・英数字項目・英数字編集項目・数字編集項目を日本語項目・日本語編集項目に変換するものです。

形式
CALL 'CBLNCNV' USING 引数1 引数2 引数3
引数
  • 引数1には,次に示すインタフェース領域の名前を指定します。

    表29‒3 CBLNCNVサービスルーチンのインタフェース領域

    記述形式

    内容

    01 データ名1.

    CALL文のUSINGで指定するインタフェース領域の名前を指定する。

     02 データ名2.

    転記インジケータの名前を指定する。

      03 データ名3 PIC X(01).

    ALL指定の有無を指定する。

    0:ALL指定なし。

    1:ALL指定あり。

      03 データ名4 PIC X(01).

    送り出し側作用対象のデータ属性を指定する。

    0:英字,英数字,英数字編集,数字編集項目

    1:数字項目

      03 データ名5 PIC X(01).

    受け取り側作用対象のデータ属性を指定する。

    0:日本語項目

    1:日本語編集項目

      03 FILLER   PIC X(01).

    予備。値は0でなければならない。このシステムではこの領域は使用しない。

     02 データ名6 PIC 9(8)
                    USAGE COMP.

    送り出し側作用対象の項目のけた数を指定する。

     02 データ名7 PIC 9(8)
                    USAGE COMP.

    受け取り側作用対象の項目のけた数を指定する。

注※

ALL指定は,COBOLの言語仕様のALL定数と同じように扱われます。ALL指定がある場合,変換後のデータは,変換前のデータのデータ名6で指定したけた数の何回かの繰り返しによって,データ名7で指定したけた数まで生成されます。ALL指定がない場合は,データ名6で指定したけた数しか変換しません。

  • 引数2には,変換前のデータを指定します。

  • 引数3には,変換後のデータが格納されます。

戻り値

0:正常終了した場合

-1:パラメタエラーが発生した場合

-2:コード変換のための環境が整っていない場合(Unicode機能を使用する場合)

-3:コード変換ライブラリでエラーが発生した場合(Unicode機能を使用する場合)

変換規則(シフトJISを使用する場合)

このサービスルーチンでの変換規則を次に示します。

  • 次の半角文字はそのまま同じ全角文字に変換します。

    [図データ]

  • (半角オーバライン)は全角の「〜」に変換します。

  • '(アポストロフィ)は全角の「’」(X'8166')に変換します。

  • "(引用符)は全角の「"」(X'8168')に変換します。

  • 次の文字は半角の空白2個(X'2020')に変換します。

    `(アクサングラーブ,X'60') X'01'〜X'0F'

    X'10'〜X'1F' X'80' X'A0' X'FD' X'FE'

  • X'00'は,X'0000'に変換します。

  • X'7F'およびX'FFは,X'FFFF'に変換します。

  • 半角の空白が偶数個のときは変換しません。

    半角の空白が奇数個のときは,受け取り側作用対象が日本語項目か日本語編集項目かによって次のように異なります。

    ・受け取り側作用対象が日本語項目のときは,最後の1個を全角の空白(X'8140')に変換します。

    ・受け取り側作用対象が日本語編集項目のときは,最後に半角の空白(X'20')を追加します。

  • 次の文字は変換しません。

    全角文字 X'81'〜X'8F' X'90'〜X'9F' X'E0'〜X'EF'

    X'F0'〜X'FC'

    このとき,受け取り側作用対象の項目の後ろの空き領域には半角の空白(X'20')を埋めます。

一般規則(シフトJISを使用する場合)
  • 規則に反した引数を指定した場合の結果は保証しません。

使用例(シフトJISを使用する場合)

半角の"AAAA"を全角の"AAAA"に変換する場合の使用方法を次に示します。

       IDENTIFICATION DIVISION.
       PROGRAM-ID. SAMPLE1.
             :
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 EISUU PIC X(4) VALUE 'AAAA'.
       01 NIHON PIC N(4).
       01 CHECK-PARM.
         02 CHECK-IND.
           03 CHECK-ALL PIC X(01).
           03 CHECK-TYP PIC X(01).
           03 CHECK-UKE PIC X(01).
           03 FILLER    PIC X(01)  VALUE  '0'.
         02  CHECK-LNG1 PIC 9(08) USAGE COMP.
         02  CHECK-LNG2 PIC 9(08) USAGE COMP.
             :
       PROCEDURE DIVISION.
             :
           MOVE '0' TO CHECK-ALL CHECK-TYP CHECK-UKE.
           MOVE  4  TO CHECK-LNG1.
           MOVE  4  TO CHECK-LNG2.
           CALL 'CBLNCNV' USING CHECK-PARM EISUU NIHON.
           IF RETURN-CODE NOT = 0 THEN
               CBLNCNVエラー処理
           END-IF.
             :
変換規則(EUCを使用する場合)

このサービスルーチンでの変換規則を次に示します。

  • 次の半角文字はそのまま同じ全角文字に変換します。

    [図データ]

  • 次の半角文字は,対応する全角文字に変換されます。

    [図データ]

    ただし,X'8E'で始まる2バイトのエリアで,2バイト目がX'A1'〜X'DF'以外の場合は,半角の空白2個(X'2020')に変換します。

  • (半角オーバライン)は全角の「〜」に変換します。

  • '(アポストロフィ)は全角の「’」(X'A1C7')に変換します。

  • "(引用符)は全角の「"」(X'A1C9')に変換します。

  • ,(X'8EA4')は全角の「、」(X'A1A2')に変換します。

  • 次の文字はX'2020'(半角の空白2個)に変換します。

    `(アクサングラーブ,X'60') X'01'〜X'0F'

    X'10'〜X'1F' X'80'〜X'8D' X'90'〜X'9F' X'A0'

  • X'00'は,X'0000'に変換します。

  • X'7F'およびX'FFは,X'FFFF'に変換します。

  • 半角の空白が偶数個のときは変換しません。

    半角の空白が奇数個のときは,受け取り側作用対象が日本語項目か日本語編集項目かによって次のように異なります。

    ・受け取り側作用対象が日本語項目のときは,最後の1個を全角の空白(X'A1A1')に変換します。

    ・受け取り側作用対象が日本語編集項目のときは,最後に半角の空白(X'20')を追加します。

  • 日本語EUCの全角文字は変換しません。

  • 制御文字X'8F'は変換しません。変換後のデータの後ろの空き領域には半角の空白(X'20')を埋めます。

一般規則(EUCを使用する場合)
  • 規則に反した引数を指定した場合の結果は保証しません。

  • 日本語以外のEUC環境では結果が保証しません。

使用例(EUCを使用する場合)

半角の"AAAA"を全角の"AAAA"に変換する場合の使用方法を次に示します。

       IDENTIFICATION DIVISION.
       PROGRAM-ID. SAMPLE1.
             :
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 EISUU PIC X(8) VALUE 'AAAA'.
       01 NIHON PIC N(4).
       01 CHECK-PARM.
         02 CHECK-IND.
           03 CHECK-ALL PIC X(01).
           03 CHECK-TYP PIC X(01).
           03 CHECK-UKE PIC X(01).
           03 FILLER    PIC X(01)  VALUE  '0'.
         02  CHECK-LNG1 PIC 9(08) USAGE COMP.
         02  CHECK-LNG2 PIC 9(08) USAGE COMP.
             :
       PROCEDURE DIVISION.
             :
           MOVE '0' TO CHECK-ALL CHECK-TYP CHECK-UKE.
           MOVE  8  TO CHECK-LNG1.
           MOVE  4  TO CHECK-LNG2.
           CALL 'CBLNCNV' USING CHECK-PARM EISUU NIHON.
           IF RETURN-CODE NOT = 0 THEN
               CBLNCNVエラー処理
           END-IF.
             :
変換規則(Unicode機能を使用する場合)

Unicode機能については,「27 Unicode機能」を参照してください。

このサービスルーチンでの変換規則を次に示します。

  • 次の半角文字(UTF-8)は,該当する全角文字(UTF-16)に変換します。UTF-16への変換は,実行時環境変数CBLUNIENDIANの設定に従いUTF-16LE,またはUTF-16BEに変換します。

    [図データ]

  • (半角オーバライン)は全角の「〜」に変換します。

  • '(アポストロフィ)は全角の「’」(X'2019')に変換します。

  • "(引用符)は全角の「”」(X'201D')に変換します。

  • 次の文字は半角空白1個※1に変換します。

    `(アクサングラーブ,X'60') X'01'〜X'0F' X'10'〜X'1F'

  • X'00'はX'0000'に変換します。

  • X'7F'はX'FFFF'に変換します。

  • 半角の空白(X'20')が偶数個のときは全角変換※1しません。

    半角空白が奇数個のときは,受け取り側作用対象が日本語項目か日本語編集項目かによって次のように異なります。

    ・受け取り側作用対象が日本語項目のときは,最後の1個を全角の空白※2に変換します。

    ・受け取り側作用対象が日本語編集項目のときは,最後に半角の空白※1を追加します。

  • 全角文字(UTF-8)は,対応する全角文字(UTF-16)へ変換します。

注※1

半角空白の文字コードは,UTF-16LEのときはX'2000',UTF-16BEのときはX'0020'となります。

注※2

全角空白の文字コードは,UTF-16LEのときはX'0030',UTF-16BEのときはX'3000'となります。

一般規則(Unicode機能を使用する場合)
  • 規則に反した引数を指定した場合の結果は保証しません。

使用例(Unicode機能を使用する場合)

半角の"[図データ]"を全角の"AAアア"に変換する場合の使用方法を次に示します。

用途がDISPLAYの項目の領域は,文字コードを意識して設定してください。シフトJISとUTF-8では必要とする領域のサイズが異なります。半角かたかなの場合,シフトJISでは1文字が1バイトですが,UTF-8では1文字が3バイトとなります。

       IDENTIFICATION  DIVISION.
       PROGRAM-ID.  SAMPLE1.
                :
       DATA  DIVISION.
       WORKING-STORAGE  SECTION.
       01  EISUU  PIC  X(8)  VALUE  '[図データ]'.
       01  NIHON  PIC  N(4).
       01  CHECK-PARM.
         02  CHECK-IND.
           03  CHECK-ALL  PIC  X(01).
           03  CHECK-TYP  PIC  X(01).
           03  CHECK-UKE  PIC  X(01).
           03  FILLER       PIC  X(01)  VALUE  '0'.
         02  CHECK-LNG1     PIC  9(8)  USAGE  COMP.
         02  CHECK-LNG2     PIC  9(8)  USAGE  COMP.
                :
       PROCEDURE  DIVISION.
                :
           MOVE  '0'  TO  CHECK-ALL  CHECK-TYP  CHECK-UKE.
           MOVE   8   TO  CHECK-LNG1.
           MOVE   4   TO  CHECK-LNG2.
           CALL  'CBLNCNV'  USING  CHECK-PARM  EISUU  NIHON.
           IF  RETURN-CODE  NOT = 0  THEN
               *> CBLNCNVエラー処理
           END-IF.
                :