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