MOVEL (左につめて転送)

自由形式構文 許可されていない - EVAL、または %CHAR%DATE%DEC%DECH%GRAPH%INT%INTH%TIME%TIMESTAMP%UCS2%UNS%UNSH などの組み込み関数を使用
コード 演算項目 1 演算項目 2 結果フィールド 標識
MOVEL(P) データ属性 ソース・フィールド ターゲット・フィールド + - ZB

MOVEL 命令では、演算項目 2 から結果フィールドに文字が転送されます。 転送は演算項目 2 の左端の文字から開始されます。結果フィールドが配列の場合には、 結果の標識を指定することはできません。 この標識は、結果フィールドが配列要素または配列以外のフィールドの場合に は指定することができます。

データが数値フィールドに転送される場合には、結果フィールドの符号 (+ または -) が保持されます。ただし、演算項目 2 が結果フィールドと同じ長 さか、またはそれ以上の場合を除きます。 この場合には、演算項目 2 の符号は 結果フィールドの符号として使用されます。

演算項目 1 には、この命令の転送元または転送先の文字または数値フィールド の形式を指定するために、日付または時刻の形式を入れることができます。使用可能な形式に ついては、日付データ・タイプ時刻データ・タイプ、および タイム・スタンプ・データ・タイプを参照してください。

転送元または転送先が文字フィールドである場合、オプションで、 演算項目 1 内の形式の後に区切り記号を示すことができます。 ただし、その形式で有効な区切り記号だけを使用する ことができます。

演算項目 2 が *DATE または UDATE で、結果が日付フィールドである 場合、演算項目 1 は必要ありません。 演算項目 1 に日付形式が含まれている場合、演算項目 1 は、制御仕様書 の DATEDIT キーワードによって指定されている *DATE または UDATE の 形式と互換性を持っている必要があります。

演算項目 2 が結果フィールドより長い場合には、演算項目 2 の余分な右端の文 字は転送されません。 結果フィールドが演算項目 2 より長い場合には、埋め込み が指定されていない限り、結果フィールドの右端の余分な文字は変更されませ ん。

浮動数値フィールドおよびリテラルを、演算項目 2 または結果フィールドの 指定として使用することはできません。

演算項目 2 が UCS-2 で、結果フィールドが文字の場合、また は演算項目 2 が文字で結果フィールドが UCS-2 の場合、転送される 文字数は、文字にシフト文字と図形文字が含まれる場合と含まれない 場合があるために変化します。 例えば、5 つの UCS-2 文字は、次の文字に変換できます。
  • 5 個の 1 バイト文字
  • 5 個の 2 バイト文字
  • モードを分離するシフト文字を含む、1 バイト文字と 2 バイト文字の 組み合わせ

結果のデータが長過ぎて、結果フィールドに入りきらない場合、そのデータは 切り捨てられます。 結果が 1 バイト文字である場合、その結果に完全な文字が含まれている こと、および突き合わせられた SO/SI のペアが含まれていることは、ユーザーが確認 してください。

MOVEL 命令を 図 1 にまとめてあります。

MOVEL 命令の、フィールド長に基づいた 4 つの条件での規則の要約を下に 示します。
  1. 演算項目 2 が結果フィールドと同じ長さの場合。
    1. 演算項目 2 と結果フィールドが数値の場合には、符号は右端の桁に転送さ れます。
    2. 演算項目 2 が数値で結果フィールドが文字の場合には、符号は右端の桁に 転送されます。
    3. 演算項目 2 が文字で結果フィールドが数値の場合には、演算項目 2 の右端 の桁のゾーンが 16 進数の D (マイナス・ゾーン) であれば、マイナス・ゾー ンが結果フィールドの右端の桁に転送されます。 しかし、演算項目 2 の右端の桁のゾーンが 16 進数の D でない場合には、正の ゾーンが結果フィールドの右端の桁に転送されます。数字部分は対応する数字 に変換されます。 数字部分が有効な数字でない場合には、データ例外エラーが起こります。
    4. 演算項目 2 と結果フィールドが文字の場合には、すべての文字が転送され ます。
    5. 演算項目 2 と結果フィールドが、両方とも図形また は UCS-2 の場合には、すべての図形文字または UCS-2 文字が転送されます。
    6. 演算項目 2 が図形で結果フィールドが文字の場合には、文字の結果フィー ルドの 2 桁 (バイト) がコンパイラーによって挿入される SO/SI を入れるた めに使用されるので、1 つの図形文字が失われます。
    7. 演算項目 2 が文字で結果フィールドが図形の場合には、演算項目 2 の文字 データは一対の SO/SI で完全に囲まれていなければなりません。 この SO/SI は、図形の結果フィールドにデータを転送する前にコンパイラーによって除去 されます。
  2. 演算項目 2 が結果フィールドより長い場合。
    1. 演算項目 2 と結果フィールドが数値の場合には、演算項目 2 の右端の桁の 符号が結果フィールドの右端の桁に転送されます。
    2. 演算項目 2 が数値で結果フィールドが文字の場合には、結果フィールドに は数字だけが入ります。
    3. 演算項目 2 が文字で結果フィールドが数値の場合には、演算項目 2 の右端 の桁のゾーンが 16 進数の D (マイナス・ゾーン) であれば、マイナス・ゾー ンが結果フィールドの右端の桁に転送されます。 しかし、演算項目 2 の右端の桁のゾーンが 16 進数の D でない場合には、正の ゾーンが結果フィールドの右端の桁に転送されます。結果フィールドのその他 の桁には数字だけが入ります。
    4. 演算項目 2 と結果フィールドが文字の場合には、結果フィールドを埋める ために必要な数の文字だけが転送されます。
    5. 演算項目 2 と結果フィールドが図形または UCS-2 の 場合、結果フィールドを埋めるために必要な数の図形文字 または UCS-2 文字だけが転送されます。
    6. 演算項目 2 が図形で結果フィールドが文字の場合には、図形データが切り 捨てられて、SO/SI がコンパイラーによって挿入されます。
    7. 演算項目 2 が文字で結果が図形の場合には、文字データは切り捨てられま す。 文字データは一対の SO/SI で完全に囲まれていなければなりません。
  3. 演算項目 2 が結果フィールドより短い場合。
    1. 演算項目 2 が数値または文字のいずれかで結果フィールドが数値の場合に は、演算項目 2 の数字部分が結果フィールドの左端の桁の内容と置き換えられ ます。 結果フィールドの右端の桁の符号は変更されません。
    2. 演算項目 2 が数値または文字のいずれかで結果フィールドが文字データの 場合には、演算項目 2 の文字が結果フィールドの左端の同じ桁数と置き換えら れます。 結果フィールドの右端の桁のゾーンは変更されません。
    3. 演算項目 2 が図形で結果フィールドが文字の場合には、図形データの直前 直後に SO/SI が追加されます。 これによって、このフィールドの残りのデータ のために、文字フィールドの SO/SI の数が合わなくなる場合がありますが、こ れはユーザーの責任になります。
    4. 文字フィールドから図形フィールドに転送する場合には、文字フィールド 全体を SO/SI で囲まなければならないことに注意してください。 例えば、文字フィールドの長さが 8 桁の場合には、フィールドの文字データ は "oAABB␢␢i" になります。"oAABBi␢␢" にはなりません。
  4. 演算項目 2 が結果フィールドより短く、命令拡張フィールドに P が指定さ れている場合。
    1. 転送は上記のように実行されます。
    2. 結果フィールドには右から埋め込みが行われます。 埋め込み規則の詳細については、移動命令を参照してください。

可変長文字、図形、または UCS-2 データを転送する場合、可変長フィールドは、現在の長さが同じ固定長フィールドとまったく同様に機能します。MOVEL 命令では、可変長結果フィールドの長さは変わりません。 例については、 図 図 4 から 図 9 を参照してください。

MOVEL 命令の詳細については、移動命令日付命令、 または 変換命令を参照してください。

図 1. MOVEL 命令
図 2. 文字フィールドと図形フィールドの間の MOVEL
*...1....+....2....+....3....+....4....+....5....+....6....+....7....+....
DName++++++++++ETDsFrom+++To/L+++IDc.Functions+++++++++++++++++++++++++++
D
 *
 * 図形フィールドと文字フィールドの間の MOVEL の例
 *
D char_fld1      S              8A   inz(' ')
D dbcs_fld1      S              4G   inz('oAABBCCDDi')
D char_fld2      S              4A   inz(' ')
D dbcs_fld2      S              3G   inz(G'oAABBCCi')
D char_fld3      S             10A   inz(*ALL'X')
D dbcs_fld3      S              3G   inz(G'oAABBCCi')
D char_fld4      S             10A   inz('oAABBCC  i')
D dbcs_fld4      S              2G
 *
 *
CL0N01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq..
 *
 *  結果フィールドの長さは演算項目 2 の長さ (バイト数) と同じです。
 *  SO/SI が挿入されるので、DBCS の 1 文字が失われます。
 *  MOVEL 命令の後の char_fld1 は 'oAABBCCi' になります。
 *
C                   MOVEL     dbcs_fld1     char_fld1
 *
 *  結果フィールドの長さが演算項目 2 の長さより短い。切り捨てが行われます。
 *  MOVEL 命令の後のchar_fld2 は 'oAAi' になります。
 *
C                   MOVEL     dbcs_fld2     char_fld2
 *
 *  結果フィールドの長さが演算項目 2 の長さより長い。例では、
 *  SO/SI がグラフィック・データの直前と直後に追加されています。
 *  MOVEL の前には結果フィールドに 'XXXXXXXXXX' が入っています。
 *  MOVEL 命令の後の char_fld3 の値は 'oAABBCCiXX' です。
 *
C                   MOVEL     dbcs_fld3     char_fld3
 *
 *  文字から図形への MOVEL。
 *  結果フィールドが演算項目 2 より短い。切り捨てが行われます。
 *  MOVEL の後の dbcs_fld4 の値は 'AABB' です。
 *
C                   MOVEL     char_fld4     dbcs_fld4
図 3. 文字フィールドと日付フィールドの間の MOVEL
*...1....+....2....+....3....+....4....+....5....+....6....+....7....+....
HKeywords+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 *
 * 文字フィールドと日付フィールドの間の MOVEL の例
 *
 *  Control specification date format
H DATFMT(*MDY)
 *
DName++++++++++ETDsFrom+++To/L+++IDc.Functions+++++++++++++++++++++++++++
D datefld        S               D   INZ(D'04/15/96')
D char_fld1      S              8A
D char_fld2      S             10A   INZ('XXXXXXXXXX')
D char_fld3      S             10A   INZ('04/15/96XX')
D date_fld3      S               D
D char_fld4      S             10A   INZ('XXXXXXXXXX')
D char_fld5      S              9A   INZ('015/04/50')
D date_fld2      S               D   INZ(D'11/16/10')
 *
 *
CL0N01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+H1LoEq..
 * 日付から文字への MOVEL。
 * 結果フィールドの長さが演算項目 2 の長さと同じ。* MOVEL 命令の後の char_fld1 の値は '04/15/96' です。
C     *MDY          MOVEL     datefld       char_fld1
 * 日付から文字への MOVEL。
 * 結果フィールドの長さが演算項目 2 の長さより長い。
 * MOVEL の前には結果フィールドに 'XXXXXXXXXX' が入っています。
 * MOVEL 命令の後の char_fld2 の値は '04/15/96XX' です。
C     *MDY          MOVEL     datefld       char_fld2
 * 文字から日付への MOVEL。
 * 結果フィールドの長さが演算項目 2 の長さより短い。
 * MOVEL 命令の後の date_fld3 の値は '04/15/96' です。
C     *MDY          MOVEL     char_fld3     date_fld3
 * 日付から文字への MOVEL (区切り記号なし)。
 * 結果フィールドの長さが演算項目 2 の長さより長い。
 * MOVEL の前には結果フィールドに 'XXXXXXXXXX' が入っています。
 * MOVEL 命令の後の char_fld4 の値は '041596XXXX' です。
C     *MDY0         MOVEL     datefld       char_fld4
 * 文字から日付への MOVEL。
 * 結果フィールドの長さが演算項目 2 の長さと同じ。
 * 転送後の date_fld3 の値は 04/15/50 です。
C     *CDMY         MOVEL     char_fld5     date_fld3
 * 日付から文字への MOVEL (区切り記号なし)。
 * 結果フィールドの長さが演算項目 2 の長さより長い。
 * 転送後の char_fld4 の値は '2010320XXX' です。
C     *LONGJUL0     MOVEL     date_fld2     char_fld4
図 4. 可変長フィールドから 可変長フィールドへの MOVEL
*...1....+....2....+....3....+....4....+....5....+....6....+....7....+....
DName++++++++++ETDsFrom+++To/L+++IDc.Functions+++++++++++++++++++
 *
 * 可変長文字フィールドから可変長文字フィールドへの MOVEL の例
 *
 *
D var5a          S              5A   INZ('ABCDE') VARYING
D var5b          S              5A   INZ('ABCDE') VARYING
D var5c          S              5A   INZ('ABCDE') VARYING
D var10          S             10A   INZ('0123456789') VARYING
D var15a         S             15A   INZ('FGH') VARYING
D var15b         S             15A   INZ('FGH') VARYING
 *
 *
CL0N01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiL
 *
C                   MOVEL     var15a        var5a
 * var5a = 'FGHDE' (長さ =5)
C                   MOVEL     var10         var5b
 * var5b = '01234' (長さ =5)
C                   MOVEL     var5c         var15a
 * var15a = 'ABC' (長さ =3)
C                   MOVEL     var10         var15b
 * var15b = '012' (長さ =3)
図 5. 可変長フィールドから 固定長フィールドへの MOVEL
*...1....+....2....+....3....+....4....+....5....+....6....+....7....+....
DName++++++++++ETDsFrom+++To/L+++IDc.Functions+++++++++++++++++++
 *
 * 可変長文字フィールドから固定長文字フィールドへの MOVEL の例
 *
 *
D var5           S              5A   INZ('ABCDE') VARYING
D var10          S             10A   INZ('0123456789') VARYING
D var15          S             15A   INZ('FGH') VARYING
D fix5a          S              5A   INZ('MNOPQ')
D fix5b          S              5A   INZ('MNOPQ')
D fix5c          S              5A   INZ('MNOPQ')
D fix10          S             10A   INZ('')
 *
 *
CL0N01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiL
 *
C                   MOVEL     var5          fix5a
 * fix5a = 'ABCDE'
C                   MOVEL     var10         fix5b
 * fix5b = '01234'
C                   MOVEL     var15         fix5c
 * fix5c = 'FGHPQ'
図 6. 固定長フィールドから 可変長フィールドへの MOVEL
*...1....+....2....+....3....+....4....+....5....+....6....+....7....+....
DName++++++++++ETDsFrom+++To/L+++IDc.Functions+++++++++++++++++++
 *
 * 固定長文字フィールドから可変長文字フィールドへの MOVEL の例
 *
 *
D var5           S              5A   INZ('ABCDE') VARYING
D var10          S             10A   INZ('0123456789') VARYING
D var15a         S             15A   INZ('FGHIJKLMNOPQR') VARYING
D var15b         S             15A   INZ('WXYZ') VARYING
D fix10          S             10A   INZ('PQRSTUVWXY')
 *
 *
CL0N01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiL
 *
C                   MOVEL     fix10         var5
 * var5 = 'PQRST' (長さ =5)
C                   MOVEL     fix10         var10
 * var10 = 'PQRSTUVWXY' (長さ =10)
C                   MOVEL     fix10         var15a
 * var15a = 'PQRSTUVWXYPQR' (長さ =13)
C                   MOVEL     fix10         var15b
 * var15b = 'PQRS' (長さ =4)
図 7. 可変長フィールドから 可変長フィールドへの MOVEL(P)
*...1....+....2....+....3....+....4....+....5....+....6....+....7....+....
DName++++++++++ETDsFrom+++To/L+++IDc.Functions+++++++++++++++++++
 *
 * 可変長文字フィールドから可変長文字フィールドへの MOVEL(P) の例
 *
 *
D var5a          S              5A   INZ('ABCDE') VARYING
D var5b          S              5A   INZ('ABCDE') VARYING
D var5c          S              5A   INZ('ABCDE') VARYING
D var10          S             10A   INZ('0123456789') VARYING
D var15a         S             15A   INZ('FGH') VARYING
D var15b         S             15A   INZ('FGH') VARYING
D var15c         S             15A   INZ('FGHIJKLMN') VARYING
 *
 *
CL0N01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiL
 *
C                   MOVEL(P)  var15a        var5a
 * var5a = 'FGH  ' (長さ =5)
C                   MOVEL(P)  var10         var5b
 * var5b = '01234' (長さ =5)
C                   MOVEL(P)  var5c         var15b
 * var15b = 'ABC' (長さ =3)
C                   MOVEL(P)  var15a        var15c
 * var15c = 'FGH      ' (長さ =9)
図 8. 可変長フィールドから 固定長フィールドへの MOVEL(P)
*...1....+....2....+....3....+....4....+....5....+....6....+....7....+....
DName++++++++++ETDsFrom+++To/L+++IDc.Functions+++++++++++++++++++
 *
 * 可変長文字フィールドから固定長文字フィールドへの MOVEL(P) の例
 *
 *
D var5           S              5A   INZ('ABCDE') VARYING
D var10          S             10A   INZ('0123456789') VARYING
D var15          S             15A   INZ('FGH') VARYING
D fix5a          S              5A   INZ('MNOPQ')
D fix5b          S              5A   INZ('MNOPQ')
D fix5c          S              5A   INZ('MNOPQ')
 *
 *
CL0N01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiL
 *
C                   MOVEL(P)  var5          fix5a
 * fix5a = 'ABCDE'
C                   MOVEL(P)  var10         fix5b
 * fix5b = '01234'
C                   MOVEL(P)  var15         fix5c
 * fix5c = 'FGH  '
図 9. 固定長フィールドから 可変長フィールドへの MOVEL(P)
*...1....+....2....+....3....+....4....+....5....+....6....+....7....+....
DName++++++++++ETDsFrom+++To/L+++IDc.Functions+++++++++++++++++++
 *
 * 固定長文字フィールドから可変長文字フィールドへの MOVEL(P) の例
 *
 *
D var5           S              5A   INZ('ABCDE') VARYING
D var10          S             10A   INZ('0123456789') VARYING
D var15a         S             15A   INZ('FGHIJKLMNOPQR') VARYING
D var15b         S             15A   INZ('FGH') VARYING
D fix5           S             10A   INZ('.....')
D fix10          S             10A   INZ('PQRSTUVWXY')
 *
 *
CL0N01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiL
 *
C                   MOVEL(P)  fix10         var5
 * var5 = 'PQRST' (長さ =5)
C                   MOVEL(P)  fix5          var10
 * var10 = '.....     ' (長さ =10)
C                   MOVEL(P)  fix10         var15a
 * var15a = 'PQRSTUVWXY   ' (長さ =13)
C                   MOVEL(P)  fix10         var15b
 * var15b = 'PQR' (長さ =3)