この形式の INPUT ステートメントは、Natural マップエディタを使用して作成されたマップレイアウトを使用して入力処理を実行するために使用されます。
マップレイアウトは次の 2 つの方法で使用できます。
プログラムがパラメータリストを提供しない。
プログラムがパラメータリスト(operand1)を提供する。
INPUT [WINDOW= 'window-name'] [WITH-TEXT-option]
|
||
[MARK-option] | ||
[ALARM-option] | ||
[USING ] MAP map-name [NO ERASE ]
|
||
operand1 | ||
NO PARAMETER |
このドキュメントでは、次のトピックについて説明します。
構文図で使用されている記号については、「構文記号」を参照してください。
パラメータリストのない INPUT USING MAP
を使用する場合は、次の要件を満たす必要があります。
map-name を英数字定数として指定する必要があります(最大 8 文字)。
この方法で使用されるマップは、マップを参照するプログラムをコンパイルする前に作成する必要があります。
処理されるフィールドの名前は、コンパイル時にマップソース定義から動的に取得されます。 使用されるフィールド名はプログラムとマップの両方で同一である必要があります。
INPUT
ステートメントで参照されるすべてのフィールドは、その時点でアクセス可能である必要があります。
ストラクチャードモードでは、フィールドはあらかじめ定義されている必要があります(データベースフィールドは、処理ループまたはビューに正しく参照される必要があります)。
レポーティングモードでは、マップにユーザー定義変数を新たに定義できます。
マップレイアウトが変更された場合でも、マップを使用しているプログラムを再カタログする必要がありません。 ただし、配列構造または名前、フィールドの形式/長さが変更された場合、またはマップでフィールドが追加/削除された場合は、マップを使用しているプログラムを再カタログする必要があります。
マップソースはプログラムコンパイル時に使用可能である必要があります。そうでないと、INPUT USING MAP
ステートメントをコンパイルできません。
注意:
マップがまだ使用可能でない場合にプログラムをコンパイルするには、NO PARAMETER
を指定します。これにより、マップがまだ使用可能でなくても INPUT USING MAP
をコンパイルできます。
プログラムで処理するフィールドの名前(operand1)を指定することで、マップ内のフィールドの名前とは異なる名前をプログラムのフィールドの名前にすることができます。
プログラムのフィールドの順序はマップの順序と一致している必要があります。 マップエディタは、マップで指定されたフィールドを、フィールド名の英字順でソートすることに注意してください。 詳細については、Natural の『エディタ』ドキュメントのマップエディタの説明を参照してください。
プログラムエディタの行コマンド .I(mapname)
を使用して、指定されたマップで定義されているフィールドから派生したパラメータリストとともに完全な INPUT USING MAP
ステートメントを取得できます。
マップのレイアウトが変更された場合でも、マップを使用してプログラムを再カタログする必要はありません。 ただし、フィールド名、フィールド形式/長さ、またはマップ内の配列構造が変更された場合、またはマップでフィールドが追加または削除された場合は、プログラムを再カタログする必要があります。
プログラムで指定されたフィールドの形式と長さが、マップで指定されたフィールドと一致することを確認するために、実行時にチェックが行われます。 両方のレイアウトが一致しない場合は、エラーメッセージが生成されます。
オペランド定義テーブル:
オペランド | 構文要素 | フォーマット | ステートメント参照 | ダイナミック定義 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
map-name | C | S | A | U | 可 | 不可 | ||||||||||||||
operand1 | S | A | A | U | N | P | I | F | B | D | T | L | C | 可 | 可 |
構文要素の説明:
INPUT WINDOW='window-name' | このオプションについては、INPUT ステートメントの「構文 1」で説明しています。
|
---|---|
WITH TEXT/MARK/ALARM-options | これらのオプションについては、INPUT ステートメントの「構文 1」で説明しています。「WITH TEXT オプション」、「MARK オプション」、「ALARM オプション」を参照してください。
|
USING MAP map-name |
map-name は、1~8 文字の英数字定数またはユーザー定義変数にすることができます。 変数を使用する場合、事前にこれを定義しておく必要があります。 マップ名にアンパサンド(&)を含めることができます。この文字は実行時に Natural システム変数
|
NO ERASE | このオプションについては、INPUT ステートメントの「構文 1」で説明しています。
|
operand1 |
フィールド指定:
データベースフィールドまたはユーザー定義変数、あるいはその両方のリスト。 フィールドは、参照先のマップ内のフィールドと、数、順序、形式、長さ、およびオカレンス数(配列の場合)が一致している必要があります。そうでないとエラーが発生します。 データベースフィールドの内容が |
セッションパラメータ IM
または端末コマンド %F
および %D
を使用して、入力モードを変更できます。
端末コマンド %F
を実行すると、フォームモードが有効になります。
フォームモード(プロファイル/セッションパラメータ IM=F
)では、Natural は位置パラメータに従ってフィールドごとに端末にマップレイアウトの出力テキストをすべて表示します。 これにより、ユーザーはフィールドごとにデータを入力できます。 すべてのデータが入力されると、ハードコピーの出力が、画面に表示されるのと同じ形式で生成されます。
フォームモードでは、%R
と入力すると、エラーの発生時にオペレータがフォーム全体を再入力できます。 入力は、INPUT
ステートメントの最初の実行時に処理されます。
端末コマンド %D
を実行すると、キーワード/デリミタモードが有効になります。
キーワード/デリミタモード(プロファイル/セッションパラメータ IM=D
)では、キーワードまたは位置入力値を使用してデータを入力できます。
キーワード入力を使用すると、端末オペレータは、プロンプトテキストを使用して個々のフィールドのデータを入力できます。フォームモードでは、プロンプトテキストは、フィールドを識別するキーワードとして値の前に表示されます。 キーワードの後には、INPUT
割り当て文字(IA
パラメータ)、その直後にデータが続く必要があります。 割り当て文字に続くスペースは、区切り文字(ID
パラメータ)までデータとして取得されます。 区切り文字は、最後のデータ要素の後には不要です。 異なるフィールドのキーワードデータは、区切り文字で分割して任意の順序で入力できます。 INPUT
ステートメントで定義されていないキーワードをオペレータが入力した場合は、エラーメッセージが返されます。 入力フィールドにデータを入力する必要はありません。 データが入力されていないフィールドは、英数字フィールドでは空白に、数値および 16 進数フィールドではゼロに設定されます。
位置値入力を使用する場合、端末オペレータは、現在定義されている INPUT 区切り文字(ID
パラメータ)で区切られたすべての入力フィールドのデータのみ入力します。 入力するフィールドの順序は、INPUT
ステートメントのフィールドの順序に対応します。
ユーザーは、デリミタ文字で区切った位置入力に値の数を入力し、値の前にキーワードを指定して選択したフィールドのキーワードモードに切り替えることにより、位置入力からキーワード入力に切り替えることができます。
キーワードがフィールドの位置指定に使用された場合、キーワードの値に続くキーワード以外の入力は、INPUT
ステートメントで以前に選択されたフィールドに続くフィールドに割り当てられる位置入力として処理されます。
注意:
キーワードおよび対応する入力フィールドは、同じ論理行にある必要があります。 合計の長さが行サイズを超える場合は、行サイズ(LS
パラメータ)を適宜調整して、キーワードとフィールドが 1 行に収まるようにします。
キーワード/デリミタモードで入力されたデータは、スクリーンモードの場合と同じように検証されます。 フィールドに対して定義されている文字数を超えて入力しようとした場合は、エラーメッセージが返されます。
バッファ(3270タイプ)端末またはワークステーションで、INPUT
ステートメントをキーワード/デリミタモードで処理する場合は、1 つの INPUT
ステートメントに割り当てるすべてのデータを 1 つの画面に入力する必要があります。 Enter は、INPUT
ステートメントに対するすべてのデータが入力された場合にのみ使用します。
Natural スタックに FETCH
、RUN
、または STACK
ステートメントを介して配置されたデータ要素は、実行時に検出された次の INPUT
ステートメントで処理されます。
INPUT
ステートメントは、前述したようにキーワード/デリミタモードのデータを処理します。
すべての入力フィールドを充填するためのデータ要素が使用可能でない場合は、フィールド形式に応じて空白/ゼロが充填されます。 存在する入力フィールドよりも多くのデータ要素が指定されている場合、残りのデータは無視されます。
フィールドにスタックからのデータが入力されている場合、フィールド属性はデータに適用されません。
Natural システム変数 *DATA
を参照して、Natural スタックで現在使用可能なデータ要素の数を判断できます。
以下では次のトピックについて説明します。
バッチフォームモードでは、INPUT
マップが表示されます。 データレコードは、1 つ以上の AD=A
フィールドや AD=M
フィールドを含む行ごとに読み取られ、レコードに含まれるデータが 1 つ以上の適切なフィールドに割り当てられます。
入力データフィールドは、連続していると想定されます。 デリミタ文字が使用されていない限り、入力データはフィールドの内部定義に従って正確な長さで入力する必要があります。 数値フィールドの場合は、記号(SG=ON
の場合)および小数点に空白を適宜許可する必要があります。
オプションとして、個々のフィールドの値を分割するデリミタ文字を使用してデータを入力することもできます。 この場合、内部定義に従って正確な位置番号で入力する必要はなく、位置 1 から開始して左から右に処理されます。 データ入力のルールは、「データ入力」で説明したルールと同じです。 また、割り当て文字を使用して、*OUTIN
フィールドの内容がリセットされないことを指定できます。
キーワード/デリミタモードがバッチモードで使用されている場合は、TP モードのキーワード/デリミタモードと同じように機能しますが、次の例外があります。
次の Natural 端末コマンドは、INPUT
ステートメントをメインフレームコンピュータでバッチモードで使用している場合に使用できます。
コマンド | 説明 |
---|---|
%* | レコード抑制。 レコードの位置 1 および 2 に入力された場合、%* を使用すると次の入力レコードの出力が抑制されます。 DATA RECORD %* SUPPRESSED DATA RECORD |
% | レコード継続。 % がレコードの最後の空白以外の文字として入力された場合は、次の入力レコードが継続レコードとして扱われます。 DATA, RECORD, WITH, CONTINUATION, % CONTINUATION RECORD INPUT V1 V2 V3 V4 V5 V6 DISPLAY V1 V2 V3 V4 V5 V6 次の出力を生成します。 DATA RECORD WITH CONTINUATION CONTINUATION RECORD |
%/ | エンドオブファイル。 レコードの最初の 2 つの位置に入力された場合(最後に空白以外の文字はなし)、%/ はエンドオブファイル条件を発生させます。
|
%% | 入力データストリームに再開位置を設定します。 |
%. | 現在の INPUT ステートメントの入力値の読み取りが終了します。
|
%Knn | PF キーをシミュレートします。 |
%KPn | PA キーをシミュレートします。 |
%Q | このコマンドでは、入力データの読み取りに使用されるマップの出力が抑制されます。 |
詳細については、『端末コマンド』ドキュメントを参照してください。
バッチモードでのデータ入力に INPUT
ステートメントを使用している場合は、追加の JCL ステートメントが必要です。 Natural をバッチモードで実行する前に、これらのステートメントが提供されていることを Natural 管理者に確認する必要があります。