自由形式構文 | 許可されていない - 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 文字は、次の文字に変換できます。
結果のデータが長過ぎて、結果フィールドに入りきらない場合、そのデータは 切り捨てられます。 結果が 1 バイト文字である場合、その結果に完全な文字が含まれている こと、および突き合わせられた SO/SI のペアが含まれていることは、ユーザーが確認 してください。
MOVEL 命令を 図 320 にまとめてあります。
MOVEL 命令の、フィールド長に基づいた 4 つの条件での規則の要約を下に 示します。
可変長文字、図形、または UCS-2 データを転送する場合、可変長フィールドは、現在の長さが同じ固定長フィールドとまったく同様に機能します。MOVEL 命令では、可変長結果フィールドの長さは変わりません。 例については、 図 図 323 から 図 328 を参照してください。
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 の例 * * 制御仕様書の日付の形式 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' (length=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' (length=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 ' (length=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' (length=3)
(C) Copyright IBM Corporation 1992, 2006. All Rights Reserved.