6.9.3 CBLDCUTL('CNVEXEC ') − 文字コード変換の実行
(1) 形式
(a) PROCEDURE DIVISIONの指定
CALL 'CBLDCUTL' USING 一意名1 一意名2 一意名3
(b) DATA DIVISIONの指定
TP1/Client/Pの場合
01 一意名1. 02 データ名A PIC X(8) VALUE 'CNVEXEC '. 02 データ名B PIC X(5). 02 FILLER PIC X(3). 02 データ名C PIC S9(9) COMP VALUE ZERO. 02 データ名D PIC S9(9) COMP. 02 データ名E PIC 9(9) COMP. 01 一意名2. 02 データ名F PIC S9(9) COMP. 02 データ名G PIC X(n). 01 一意名3. 02 データ名H PIC S9(9) COMP. 02 データ名I PIC X(n).
TP1/Client/P(64)の場合
01 一意名1. 02 データ名A PIC X(8) VALUE 'CNVEXEC '. 02 データ名B PIC X(5). 02 FILLER PIC X(3). 02 データ名C PIC S9(9) COMP VALUE ZERO. 02 データ名D PIC S9(9) COMP. 02 データ名E PIC 9(18) COMP. 01 一意名2. 02 データ名F PIC S9(9) COMP. 02 データ名G PIC X(n). 01 一意名3. 02 データ名H PIC S9(9) COMP. 02 データ名I PIC X(n).
(2) 機能
次に示す文字コード変換を実行します。
JISコード,またはシフトJISコードで構成される文字列を,EBCDICコード,EBCDIKコード,またはKEISコードで構成される文字列に変換します。
または,EBCDICコード,EBCDIKコード,またはKEISコードで構成される文字列を,JISコード,またはシフトJISコードで構成される文字列に変換します。
(3) UAPで値を設定するデータ領域
-
データ名A
文字コード変換の実行を示す要求コードを「VALUE 'CNVEXEC△'」と設定します。
-
データ名C
変換時の条件(変換オプション)を,使用するオプションの数値の和で指定します。
0:デフォルトです(各オプションの指定がない場合,この条件になります)。
-
EBCDIKコードを使用します。
-
全角スペースを全角スペースのままにします。
-
'83版KEISコードを使用します。
-
無効コードがあった場合,エラーにします。
-
タブコード,または制御コードを半角コードとして認識しません。直前,または直後のデータが全角コードの場合でもシフトコードは付けられません。
1:EBCDICコードを使用します。
- 2:全角スペースを半角スペース2個に変換します。
-
この指定は,データ名Dの値が1のときだけ有効です。
4:'78版KEISコードを使用します。
8:無効コードがあった場合,スペースに変換します。
- 16:タブコードを半角コードとして認識します。
-
直前,または直後のデータが全角コードの場合はシフトコードが付けられます。
- 32:制御コードを半角コードとして認識します。
-
直前,または直後のデータが全角コードの場合はシフトコードが付けられます。
-
-
データ名D
変換の方法を指定します。
- 1
-
JISコード,またはシフトJISコードで構成される文字列を,EBCDICコード,EBCDIKコード,またはKEISコードに変換します。
- 2
-
EBCDICコード,EBCDIKコード,またはKEISコードで構成される文字列を,JISコード,またはシフトJISコードに変換します。
-
データ名E
CBLDCUTL('CNVOPN ')で取得したコード変換で使用される制御テーブルのハンドルを指定します。
-
データ名F
変換する文字列の長さを指定します。
1からDCRPC_MAX_MESSAGE_SIZEまでの範囲の長さが指定できます。
-
データ名G
変換する文字列を指定します。
-
データ名H
変換後の文字列を受け取る領域の長さを指定します。
-
データ名I
変換後の文字列を格納する領域です。データ名Hで設定する長さ以上の領域を用意してください。
(4) 値が返されるデータ領域
-
データ名B
ステータスコードが5けたの数字で返されます。
-
データ名H
変換後の文字列の長さが返されます。
-
データ名I
変換後の文字列が返されます。
(5) ステータスコード
ステータスコード |
意味 |
---|---|
00000 |
正常に終了しました。 |
02501 |
データ名に指定した値が誤っています。要求コード(データ名A) が間違っている場合も含みます。 |
02504 |
メモリ不足が発生しました。 このコードは,制御テーブルのハンドルの値が不正である場合,および変換する文字列に全角文字(2バイト)が含まれているのに,全角文字の1バイト目までの文字列長が指定されている場合にも返されます。 |
02550 |
文字列中に無効コードがあります。 |
02551 |
変換後の文字列の長さがCUPで用意した領域を超えています。 |
(6) 注意事項
-
この機能を使用する場合は,CommuniNetのコードマッピングテーブルが必要です。CommuniNetのコードマッピングユティリティで,コードマッピングテーブルを作成してから,この機能を使用してください。
-
CommuniNetインストール後,一度もCommuniNetコードマッピングユティリティで保存されていないコードマッピングテーブルは,使用できません。この機能を使用する前に,CommuniNetコードマッピングユティリティでコードマッピングテーブルを保存してください。
-
CommuniNetのコードマッピングテーブルのファイル名は,必ずCMAPEX.TBLとし,この機能を使用する前にWindowsのディレクトリ下に格納してください。
-
この機能を使用している途中で,CommuniNetのコードマッピングユティリティによって,コードマッピングテーブルの内容を変更しても,文字コード変換機能の処理には反映されません。
-
この機能では,エラーログ,およびUAPトレースの情報は取得しません。
-
文字コード変換の開始(CBLDCUTL('CNVOPN '))は,1回だけ発行して,文字コード変換の実行(CBLDCUTL('CNVEXEC '))をしてください。メモリ不足となるおそれがあるため,文字コード変換の開始は複数回発行しないでください。複数回発行した場合は,発行した回数分,文字コード変換の終了(CBLDCUTL('CNVCLS '))を発行してください。
-
データ名Dに2を指定し,データ名Cに16を指定,またはデータ名Dに2を指定し,データ名Cに32を指定した場合,タブコードまたは制御コードを半角コードとして意識させたデータを,あらかじめ用意しておく必要があります。
-
コード変換の仕様の詳細については,「付録A コード変換の仕様」を参照してください。