GET

目的

ストリーム ファイルまたは文字列式の入力ストリームからデータを取得します。

構文

GET [FILE(f)][SKIP[(n)]][LIST](input-list);

または

GET [FILE(f)][SKIP[(n)]]EDIT(input-list)(format-list)[(input-list)(format-list)]…;

または

GET STRING(s)[LIST](input-list);

または

GET STRING(s) EDIT(input-list)(format-list)[(input-list)(format-list)]…;

LIST、EDIT のいずれも指定されていない場合は、LIST と想定されます。このデフォルトの場合、

input-list は GET という語の直後に置く必要があります。

パラメーター

input-list は、input-item [,input-item]... の形式です。

input-item は次のいずれかになります。

変数参照

または

(input-list iterative-DO)

反復 DO とそれに関連付ける入力リストは、カンマで区切りません。

次の例にように、1 つの反復 DO で構成される入力リストには 2 組のかっこがあります。

GET LIST (((ARR(I,J) DO I = 1 TO 5) DO J = 1 TO 5))

個々の変数参照には、配列参照、構造化参照、またはスカラー変数参照のいずれかを使用できます。UNION 属性を持つ構造体は、GET 文で変数として使用することはできません。

オプションは任意の順序で指定できます。

説明

GET 文は、ストリーム ファイルまたは文字列式の入力ストリームからデータを取得します。入力ファイルは、STREAM 属性を使用するか、通常はユーザーのデフォルトの入力デバイスに関連付けられているデフォルト SYSIN のいずれかを使用して宣言できます。

GET 文には、format-list、FILE、SKIP、STRING、および LIST または EDIT などのいくつかの形があります。

format-list
カンマで区切られた形式項目のリストを指定します。
FILE
関連付けられたファイルが STREAM の入力ファイルとして開かれているか、または閉じているファイル値を参照します。ファイルが閉じている場合は、「言語の概念」の章の「ストリーム入出力」セクションで説明されているように、GET 文によって開かれ、STREAM 属性および INPUT 属性が設定されます。
STRING
入力項目が文字列式であることを指定します。STRING オプションは、FILE オプションまたは SKIP オプションと同時には使用できません。
SKIP
入力リストを処理する前に、指定された行数だけ入力ファイルを進めます。SKIP オプションの式の結果は、正の固定小数点整数値 n である必要があります。SKIP オプションは n 行の境界をスキップし、現在の列を 1 にリセットします。
LIST
リスト指示入力を指定します。
EDIT
編集指示入力を指定します。

FILE、SKIP、および LIST の各オプション、または FILE、SKIP、および EDIT の各オプションは、任意の順序で指定できますが、形式リストは EDIT オプションに含まれ、入力リストの直後に置く必要があります。SKIP で (n) が省略された場合、値 1 が設定されます。FILE が省略された場合、デフォルトで FILE(SYSIN) が設定されます。

SKIP オプションが評価された後で、入力リストは形式リスト (指定されている場合) とともに評価されます。

入力リストは左から右に評価されます。個々の変数参照には、配列参照、構造化参照、またはスカラー変数参照を使用できます。

スカラー変数参照は、入力ストリームから 1 個の値を送信させ、EDIT が指定されている場合には 1 個のデータ形式を使用します。配列変数は、n 個の値を送信させます。この場合の n は、配列内の要素の数です。EDIT が指定されている場合には、n 個のデータ形式を使用します。値は、「データ型」の章の「配列」のセクションで定義されているように、行優先順で配列に送信されます。構造体変数は、構造体のすべてのメンバーと、含まれているすべてのサブ構造体のメンバーが値を受け取るようにします。値は左から右の順に送信されます。EDIT が指定されている場合、個々の値にデータ形式が必要です。

GET 文で送信できるのは、算術値、画像値、および文字列値のみです。Open PL/I では、GET 文で送信される文字列値の最大長は、ビット文字列の場合は 256 ビット、文字列の場合は 256 文字です。

かっこで囲まれている反復 DO を含む入力リストは、反復 DO の制御下で DO グループであるかのように値を送信します。

GET 文で読み取られる行数は、リストのサイズ、SKIP オプション、および形式リストに指定された制御形式によって決まります。ただし、制御項目または SKIP によって新しい行が強制的に読み込まれない限り、現在の行の現在の位置から送信が開始され、入力リストを満たすのに必要な数の行が使用されます。

入力ファイル内の任意の行の最大長は、258 と、(OPEN 文で指定する) LINESIZE オプションの値に 2 を加えた値のうち、大きい方に制限されます。ファイル内にこの制限より長い行がある場合、GET 処理は実行時の警告なしで行を切り詰めます。

次の例は、入力リストが 1 つの反復 DO で構成される GET 文を示しています。

GET FILE(F) LIST((A(K),B(K) DO K = 1 TO 10))

これは次と同じであることに注意してください。

DO K = 1 TO 10;
   GET FILE(F) LIST(A(K),B(K)); 
END;

次の例は、かっこで囲まれている input-list に 1 つの反復 DO を含む GET 文を示しており、反復 DO の制御下で DO グループであるかのように値を送信します。

DECLARE A(10) FLOAT;
DECLARE (B,C) FLOAT;
   .
   .
   .
GET FILE(F) LIST(A,B,C);
GET FILE(F) EDIT(A(K),K,B(K)) (3 E(14,6));
GET FILE(F) LIST(B,(A(K) DO K = 1 TO 5),C);

この例では、最初の GET 文は配列 A に 10 個の値を送信した後、B と C にこの順序で値を送信します。2 番目の GET 文は、A (K) に 1 個の値、K に 1 個の値、そして B (K) に 1 個の値を送信します。このとき、添え字として K の新しい値を使用します。3 つの値はすべて同じ E 形式で送信されます。3 番目の GET 文は、B に 1 個の値を送信し、A(1)、A(2)、(3)、(4)、A(5)、C の順序で値を送信します。

次の例は、STRING オプションを指定した GET 文を示します。

GET EDIT (NAME.FIRST,NAME.LAST) (A(8),X(3),A(20)) 
STRING('Deborah M. Park                ');

この例では、GET 文は文字列 'Deborah box' を構造体 NAME.FIRST に割り当て、ミドルネームのイニシャル、ピリオド、およびスペースをスキップし、文字列 'Parkboxes' を NAME.LAST に割り当てます。リスト指示入出力の項目を区切るのには空白を使用できますが、編集指示入出力では文字列の場合に異なる解釈が行われます。たとえば、(A (10) , X (3) , A(20)) の形式の編集指示入出力では、同じ例が次のように解釈されます。

Boxes

次の例に示すように、リスト指示入出力については、

GET LIST(NAME.FIRST, NAME.LAST) 
STRING('Deborah M. Park                ');

'Deborah' が NAME.FIRST に、'M.' が NAME.LAST に割り当てられます。

これ以降のセクションには、EDIT オプションおよび LIST オプションの追加情報を掲載しています。