この章では、計算データのデータ変換について説明します。 PL/I は、特定の属性セットを持つデータ項目が、 別の属性セットを持つデータ項目に割り当てられると、 データ変換を行います。 この章では、ソース は、変換されるデータ項目を意味し、ターゲット は、ソースを変換した属性を意味します。 この章では、データの変換について以下の事項を説明します。
章の最後にデータの変換の例が記載されています。
ロケーター・データのデータ変換は、ロケーターの変換で説明されています。
計算データ項目の値が変換されると、その内部表記、精度 (算術値の場合)、 モード (算術値の場合)、または長さ (ストリング値の場合) が変わることがあります。 下の表は、どのような場合にほかの属性に変換が行われるかをまとめたものです。
| 事例 | ターゲットの属性 |
|---|---|
| 割り当て | 代入記号の左側にある変数の属性 |
| 式のオペランド | 式を計算するときの規則によって決まる |
| ストリームの入力 (GET ステートメント) | 受け入れフィールドの属性 |
| ストリームの出力 (PUT ステートメント) | ストリームが編集ディレクティブであれば、フォーマット・リストによって決まり、 それ以外の場合は文字ストリング |
| PROCEDURE または ENTRY への引数 | 対応するパラメーターの属性 |
| 組み込み関数または疑似変数への引数 | 関数または疑似変数によって決まる |
| INITIAL 属性 | 初期設定される変数のほかの属性 |
| RETURN ステートメントの式 | PROCEDURE ステートメントで指定されている属性 |
| DO ステートメントのオプション BY、TO、または REPEAT | 制御変数の属性 |
次の場合は、文字値に変換されることがあります。
| ステートメント | オプション |
|---|---|
| DISPLAY | |
| レコード入出力 | KEYFROMKEY |
| OPEN | TITLE |
次の場合は、BINARY 値に変換されることがあります。
| ステートメント | オプション/属性/参照 |
|---|---|
| DECLARE、ALLOCATE、DEFAULT | 長さ、サイズ、次元、境界、反復因数 |
| DELAY | ミリ秒 |
| FORMAT (および GET や PUT 内のフォーマット項目) | 反復因数、d、s、p |
| OPEN | LINESIZE、PAGESIZE |
| I/O | SKIP、LINE、IGNORE |
| ほとんどのステートメント | 添え字 |
ソース・データ項目とターゲット・データ項目のすべての属性 (ストリングの長さは除く) が、 コンパイル時に指定されていなければなりません。 変換は以下の条件の 1 つを起こすことがあります。 CONVERSION、OVERFLOW、SIZE、または STRINGSIZE。 (条件を参照してください。)
定数は実行時だけでなくコンパイル時に変換されることもあります。 どの場合も、行われる変換はここで述べられているとおりです。
次に示す変換の説明において、
1 つの演算で変換が複数回必要になることがあります。 ただし、必ずしも複数回行われるとは限りません。 変換規則を理解するには、これらの演算を別々に考えることをお勧めします。例えば、次のようになります。
dcl A fixed dec(3,2) init(1.23); dcl B fixed bin(15,5); B = A;
この例では、1.23 という 10 進数表記は、まず BINARY (11,7) に変換されて 1.0011101B となります。 次に、精度の変換が行われて、BINARY(15,5) の 1.00111B という値になります。
その他の変換例は、この章の終わりに示してあります。