Rational Developer for System z
Enterprise PL/I for z/OS, Version 3.8, 言語解説書

STRING オプション

GET ステートメントおよび PUT ステートメントで STRING オプションを指定すると、主記憶域とデ ータ・セットの間をデータが伝送されるのではなく、主記憶域のある記憶場所 から別の記憶場所へデータが伝送されます。 DBCS データ項目は、STRING オプションを指定して使用することはできません。

STRING オプションが指定された GET ステートメントは、文字ストリングに変換したあとで、 式から得られるデータ値をデータ・リスト項目に割り当てることを指定します。 このオプションを使用する各 GET 操作は、常に、そのストリングの左端の文字位置から開始します。 そのストリングの文字数が、データ指定で指定した文字の総数より少ないときは、ERROR 条件が起こります。

STRING オプションが指定された PUT ステートメントは、データ・リスト項目の値 を、指定された文字変数または疑似変数に割り当てることを指定します。 PUT 操作は、必要に応じて変換を行ったあと、ストリングの左端の文字位置から 値の割り当てを開始します。 ブランクや区切り文字は、通常の入出力操作と同様に挿入されます。 ストリングにデータが入りきらないときは、ERROR 条件が起こります。

GET DATA ステートメントに STRING オプションが付いているときは、NAME 条件は起こりません。 その代わりに、GET DATA ステートメントに FILE オプションがついており、NAME 条件が起こる というような状況では、ERROR 条件が起こります。

STRING オプションには、次のような制約事項があります。

STRING オプションは編集ディレクティブ伝送で使用する場合に最も役立ちます。 このオプションを使用すれば、データ収集またはデータ分散処理を 1 つのステー トメントで行うことができ、また、レコード単位のステートメントによって伝送される文字ストリングをストリーム指向で処理することもできます。

以下に例を示します。

  read file (Inputr) into (Temp);
  get string(Temp) edit (Code) (F(1));
  If Code = 1 then
     get string (Temp) Edit (X,Y,Z)
        (X(1), 3 F(10,4));

この READ ステートメントは、入力ファイル Inputr からレコードを読み取ります。 最初の GET ステートメントは STRING オプションを使用して、そのレコードの最初 のバイトからコードを取り出し、それを Code に割り当てます。 そのコードが 1 のときは、2 番目の GET ステートメントが STRING オプションを使用 して、そのレコードに入っている値を XY、および Z に割り当てます。 2 番目の GET ステートメントは、ストリング Temp の最初の文字を無視する ように指定しています (フォーマット・リスト内の X(1) フォーマット項目)。 無視された文字は、最初の GET ステートメントで Code に割り当てられた文字と同じものです。

PUT ステートメント内の STRING オプションの例は次のとおりです。

  put string (Record) edit
     (Name)    (X(1), A(12))
     (Pay#)    (X(10), A(7))
     (Hours*Rate) (X(10), P'$999V.99');

  write file (Outprt) from (Record);

PUT ステートメントはスペース処理フォーマット項目 X(1) を使用して、文字 変数に割り当てられる最初の文字が 1 つのブランクであることを指定しています。 このブランクは、印刷前にシングル・スペースの行送りをすることを表す ANS 縦方向キャリッジ位置指定文字 コードです。 このあと、変数 Name の値、変数 Pay# の値、および 式 Hours*Rate の値が割り当てられます。 WRITE ステートメントは、レコード単位の伝送を使用してレコードを ファイル Outprt に書き出すように指定します。

STRING オプションで参照した変数を、データ・リスト内の名前や別名として 使用してはなりません。 以下に例を示します。

  declare S char(8) init('YYMMDD');
  put string (S) edit
      (substr (S, 3, 2), '/',
      substr (S, 5, 2), '/',
      substr (S, 1, 2))
      (A);

この PUT ステートメントが実行されると、S の値は 'MM/DD/YY' ではなく、'MM/bb/MM' になります。最初のデータ項目の伝送後に S がブランクにされるためです。 STRING オプションで指定した変数にもとづく基底付き変数または定義済み変数 をデータ・リスト内に書いた場合も、上記と同じような結果になります。


Terms of use | Feedback

This information center is powered by Eclipse technology. (http://www.eclipse.org)