XLATE (変換)

自由形式構文 (許可されていない - %XLATE 組み込み関数を使用)
コード 演算項目 1 演算項目 2 結果フィールド 標識
XLATE (E P) 変換元:変換先 ソース・ストリング:開始 ターゲット・ストリング _ ER _

ソース・ストリング (演算項目 2) 内の文字が、変換元および変換先ストリング (両方とも演算項目 1 に入っている) に従って変換されて、受け入れフィールド (結果フィールド) に入れられます。 変換元ストリング中の一致するソース・ストリングの文字は、変換先ストリングの 対応する文字に変換されます。 変換元、変換先、ソース、およびターゲットのストリングは、同じタイプ (すべて文字、すべて図形、またはすべて UCS-2) でなければなりません。同様に、それらの CCSID は、それらの CCSID の 1 つが 65535 でない限り、 または、図形フィールドの場合には、CCSID(*GRAPH: *IGNORE) が制御仕様書で指定されたのでない限り、同じでなければなりません。

XLATE では、ソース・ストリングの変換は演算項目 2 に指定された位置から開始さ れて、左から右へ 1 文字ずつ続けられます。 ソース・ストリングの文字が変換元ストリングの中に存在する場合には、変換先ス トリングの対応する文字が結果フィールドに入れられます。 ソース・フィールドの開始位置より前の文字は、変更されないで結果フィールドに 入れられます。

演算項目 1 には、変換元ストリングの後にコロンを付けその後に 変換先ストリングを入れなければなりません。 変換元ストリングと変換 先ストリングには、フィールド名、配列要素、名前のついた定数、データ 構造名、リテラル、またはテーブル名のいずれかを入れなければなりません。

演算項目 2 には、ソース・ストリングかまたはソース・ストリングにコロンと開始位置 を指定したもののいずれかを入れなければなりません。 演算項目 2 の ソース・ストリング部分は、フィールド名、配列要素、名前の付いた 定数、データ構造名、データ構造サブフィールド、リテラル、またはテーブル名 のいずれかを入れることができます。この命令で図形データまたは UCS-2 データが使用される場合には、開始位置は 2 バイト文字によって参照されます。演算項目 2 の開始位置部分は、小数点以下の桁数がゼロの数値でなければなら ず、名前のついた定数、配列要素、フィールド名、リテラル、またはテー ブル名とすることができます。 開始位置が指定されていない場合には、値 1 が使用されます。

結果フィールドは、フィールド、配列要素、データ構造、またはテーブルのいずれでもかまいません。 結果フィールド の長さは、演算項目 2 に指定されたソース・ストリングと同じでなければなりません。 結果フィールドがソース・ストリングより大きい場合には、結果は左寄せされます。 結果フィールドがソース・ストリングより短い場合には、結 果フィールドに、変換済みのソース・ストリングの左端部分が入ります。 結果のフィールドが可変長の場合、その長さは変わりません。

変換元ストリングの文字が重複している場合には、最初に現れたもの (左端) が使用されます。
注: 演算項目 1、演算項目 2、または結果フィールドに形象定数を使用することは できません。 演算項目 1 と結果のフィールドまたは演算項目 2 と結果のフィールドに、デー タ構造のオーバーラップがあってはなりません。

変換元ストリングが変換先ストリングより長い場合、 変換元ストリングにある余分な文字は無視されます。

7 から 11 桁目には、有効な標識を指定することができます。

演算項目 2 が結果フィールドより短い場合には、命令拡張桁に指定された P によって、変換後に結果フィールドの右側にブランクが埋め込むように指示 されます。 結果フィールドが図形で P が指定されている場合には、図形のブランクが使用 されます。 結果フィールドが UCS-2 で P が指定されている場合には、UCS-2 のブランクが使用されます。

XLATE 例外 (プログラム状況コード 100) を 処理するために、命令コード拡張 'E' またはエラー標識 ER を指定できますが、 両方を指定することはできません。 エラー処理の詳細については、プログラム例外/エラーを 参照してください。

75-76 桁目はブランクでなければなりません。

詳細については、ストリング命令を参照してください。

図 1. XLATE 命令
*...1....+....2....+....3....+....4....+....5....+....6....+....7...+....
CL0N01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq....
 *
 * 以下では、NUMBER のブランクが '-' に変換されます。
 * RESULT の結果は '999-9999' になります。
 *
C                   MOVE      '999 9999'    Number            8
C     ' ':'-'       XLATE     Number        Result            8
変更の始まり
図 2. 名前のついた定数を使用した XLATE 命令
*...1....+....2....+....3....+....4....+....5....+....6....+....7...+....
DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++++
D Up              C                   'ABCDEFGHIJKLMNOPQRS-
D                                     TUVWXYZ'
D Lo              C                   'abcdefghijklmnopqrs-
D                                     tuvwxyz'
CL0N01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq..
 *
 * 次の例では、STRING のすべての値が小文字に
 * 変換されます。結果として RESULT='rpg dept' になります。
 *
C                   MOVE      'RPG DEPT'    String            8
C     Up:Lo         XLATE     String        Result
 *
 * 次の例では、ストリングの一部だけが小文字に変換されます。
 * 結果として RESULT='RPG Dept' になります。
 *
C     Up:Lo         XLATE     String:6      Result
変更の終わり
図 3. XLATE の代替コード・ページの例
I..............Namedconstant+++++++++C.........Fldnme.............
 *  US  English alphabet.
I              'aaaaae-              C         US
I              'c-
I              'eee-
I              'iiii-
I              'n'  *  Extended alphabet.
I              'áâàãäæ-              C         XA
I              'ç-
I              'éêè-
I              'íîïì-
I              'ñ' CL0N01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq....
 *
 * The following examples change characters only supported in
 * certain languages to characters more widely supported.
 * The field FRANC contains names of employees in the European offices
 * of an international corporation.  The program translates those
 * characters that are not printable with a US English printer.
 * Assuming the FRANC field contains the names 'François',
 * 'Hélene', and 'Niña', they will be translated to
 * 'Francois', 'Helene', and 'Nina'.
 *
C     XA:US        XLATE     FRANC         INTER1           20