INPUT 構文 2 - 定義済みマップレイアウトの使用

この形式の 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

パラメータリストのない INPUT USING MAP を使用する場合は、次の要件を満たす必要があります。

  • map-name を英数字定数として指定する必要があります(最大 8 文字)。

  • この方法で使用されるマップは、マップを参照するプログラムをコンパイルする前に作成する必要があります。

  • 処理されるフィールドの名前は、コンパイル時にマップソース定義から動的に取得されます。使用されるフィールド名はプログラムとマップの両方で同一である必要があります。

  • INPUT ステートメントで参照されるすべてのフィールドは、その時点でアクセス可能である必要があります。

  • ストラクチャードモードでは、フィールドはあらかじめ定義されている必要があります(データベースフィールドは、処理ループまたはビューに正しく参照される必要があります)。

  • レポーティングモードでは、マップにユーザー定義変数を新たに定義できます。

  • マップレイアウトが変更された場合でも、マップを使用しているプログラムを再カタログする必要がありません。ただし、配列構造または名前、フィールドの形式/長さが変更された場合、またはマップでフィールドが追加/削除された場合は、マップを使用しているプログラムを再カタログする必要があります。

  • マップソースはプログラムコンパイル時に使用可能である必要があります。そうでないと、INPUT USING MAP ステートメントをコンパイルできません。

    注意:
    マップがまだ使用可能でない場合にプログラムをコンパイルするには、NO PARAMETER を指定します。これにより、マップがまだ使用可能でなくても INPUT USING MAP をコンパイルできます。

プログラムで定義されている INPUT フィールド

プログラムで処理するフィールドの名前(operand1)を指定することで、マップ内のフィールドの名前とは異なる名前をプログラムのフィールドの名前にすることができます。

プログラムのフィールドの順序はマップの順序と一致している必要があります。マップエディタは、マップで指定されたフィールドを、フィールド名の英字順でソートすることに注意してください。詳細については、Natural の『エディタ』ドキュメントのマップエディタの説明を参照してください。

マップのレイアウトが変更された場合でも、マップを使用してプログラムを再カタログする必要はありません。ただし、フィールド名、フィールド形式/長さ、またはマップ内の配列構造が変更された場合、またはマップでフィールドが追加または削除された場合は、プログラムを再カタログする必要があります。

プログラムで指定されたフィールドの形式と長さが、マップで指定されたフィールドと一致することを確認するために、実行時にチェックが行われます。両方のレイアウトが一致しない場合は、エラーメッセージが生成されます。

INPUT 構文 2 - 説明

オペランド定義テーブル:

オペランド 構文要素 フォーマット オペランド参照 ダイナミック定義
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 WINDOW='window-name' Option:

このオプションについては、INPUT ステートメントの「構文 1」で説明しています。

WITH TEXT/MARK/ALARM-options
TEXT/MARK/ALARM オプションあり:

これらのオプションについては、INPUT ステートメントの「構文 1」で説明しています。「WITH TEXT オプション」、「MARK オプション」、「ALARM オプション」を参照してください。

USING MAP map-name
USING MAP 節:

USING MAP は、マップエディタを使用して以前に Natural システムファイルに格納されたマップ定義を呼び出します。

map-name は、1 ~ 8 文字の英数字定数またはユーザー定義変数にすることができます。変数を使用する場合、事前にこれを定義しておく必要があります。マップ名にアンパサンド(&)を含めることができます。この文字は実行時に Natural システム変数 *LANGUAGE の現在の値で置き換えられます。この機能で複数言語のマップを使用できます。

INPUT ステートメントを実行すると、NO ERASE オプションが指定されていない限り、対応するマップで画面の現在の内容が置き換えられます。このオプションを指定した場合は、マップが画面の現在の内容をオーバーレイします。

NO ERASE
NO ERASE オプション:

このオプションについては、INPUT ステートメントの「構文 1」で説明しています。「NO ERASE」を参照してください。

operand1
フィールド指定:

データベースフィールドまたはユーザー定義変数、あるいはその両方のリスト。フィールドは、参照先のマップ内のフィールドと、数、順序、形式、長さ、およびオカレンス数(配列の場合)が一致している必要があります。そうでないとエラーが発生します。

データベースフィールドの内容が INPUT 処理の結果として変更される場合は、データエリアにある値のみが変更されます。適切なデータベースステートメント UPDATE/STORE を使用して、データベースの内容を変更する必要があります

非スクリーンモードでの INPUT ステートメントの使用

セッションパラメータIM

フォームモード

フォームモード(プロファイル/セッションパラメータ IM=F)では、Natural は位置パラメータに従ってフィールドごとに端末にマップレイアウトの出力テキストをすべて表示します。これにより、ユーザーはフィールドごとにデータを入力できます。すべてのデータが入力されると、ハードコピーの出力が、画面に表示されるのと同じ形式で生成されます。

フォームモードでは、%R と入力すると、エラーの発生時にオペレータがフォーム全体を再入力できます。入力は、INPUT ステートメントの最初の実行時に処理されます。

キーワード/デリミタモード

キーワード/デリミタモード(プロファイル/セッションパラメータ IM=D)では、キーワードまたは位置入力値を使用してデータを入力できます。

一般的な整合性チェックルール

キーワード/デリミタモードで入力されたデータは、スクリーンモードの場合と同じように検証されます。フィールドに対して定義されている文字数を超えて入力しようとした場合は、エラーメッセージが返されます。

バッファ(3270 タイプ)端末またはワークステーションで、INPUT ステートメントをキーワード/デリミタモードで処理する場合は、1 つの INPUT ステートメントに割り当てるすべてのデータを 1 つの画面に入力する必要があります。ENTER は、INPUT ステートメントに対するすべてのデータが入力された場合にのみ使用します。

キーワード入力

キーワード入力を使用すると、端末オペレータは、プロンプトテキストを使用して個々のフィールドのデータを入力できます。フォームモードでは、プロンプトテキストは、フィールドを識別するキーワードとして値の前に表示されます。キーワードの後には、入力割り当て文字(IA パラメータ)、その直後にデータが続く必要があります。割り当て文字に続くスペースは、区切り文字(ID パラメータ)までデータとして取得されます。区切り文字は、最後のデータ要素の後には不要です。異なるフィールドのキーワードデータは、区切り文字で分割して任意の順序で入力できます。INPUT ステートメントで定義されていないキーワードをオペレータが入力した場合は、エラーメッセージが返されます。入力フィールドにデータを入力する必要はありません。データが入力されていないフィールドは、英数字フィールドでは空白に、数値および 16 進数フィールドではゼロに設定されます。

キーワードおよび対応する入力フィールドは、同じ論理行にある必要があります。合計の長さが行サイズを超える場合は、行サイズ(LS パラメータ)を適宜調整して、キーワードとフィールドが 1 行に収まるようにします。

インデックス付き入力

インデックス付き入力を使用して、端末オペレータは、パーセント文字(%)で始まる序数値を使用して、個々の入力フィールドのデータを入力できます。この添字指定の後には、入力割り当て文字(IA パラメータ)、その直後にデータが続く必要があります。

異なるフィールドのインデックス付きデータは、区切り文字(ID パラメータ)で分割して任意の順序で入力できます。指定した序数値が既存の入力フィールドの値と一致しない場合は、エラーメッセージが返されます。入力フィールドにデータを入力する必要はありません。データが入力されていないフィールドは、英数字フィールドでは空白に、数値および 16 進数フィールドではゼロに設定されます。

位置入力

位置値入力を使用する場合、端末オペレータは、現在定義されている入力デリミタ文字(ID パラメータ)で区切られたすべての入力フィールドのデータのみ入力します。入力するフィールドの順序は、INPUT ステートメントのフィールドの順序に対応します。

ユーザーは、デリミタ文字で区切った位置入力に値の数を入力し、値の前にキーワードを指定して選択したフィールドのキーワードモードに切り替えることにより、位置入力からキーワード入力に切り替えることができます。

キーワードがフィールドの位置指定に使用された場合、キーワードの値に続くキーワード以外の入力は、INPUT ステートメントで以前に選択されたフィールドに続くフィールドに割り当てられる位置入力として処理されます。

キーワード、インデックス付きおよび位置の入力の例

次のプログラム

***** Program PGM1 *****
DEFINE DATA LOCAL
1 #F1 (A10)                               
1 #F2 (A10)                               
1 #F3 (A10)                               
END-DEFINE                                
INPUT (IP=ON) /  'FLD1' #F1                  
              /  'FLD2' #F2                  
              /  'FLD3' #F3                  
WRITE 'FLD1' #F1 
    / 'FLD2' #F2
    / 'FLD3' #F3
END

を、カンマ(,)がデリミタ文字として使用されていると仮定して、次のいずれかのコマンドを含むコマンドラインから実行する場合

PGM1 FLD1=AA,FLD3=CC
キーワード入力
PGM1 %1=AA,%3=CC
インデックス付き入力
PGM1 AA,,CC
位置入力
PGM1 AA,FLD3=CC
キーワードと組み合わされた位置入力
PGM1 AA,FLD2=,CC
キーワードと組み合わされた位置入力
PGM1 AA,%3=CC
位置入力とインデックス付き入力の組み合わせ

常に以下の出力を受信します

FLD1 AA
FLD2   
FLD3 CC

Natural スタックデータの処理

Natural スタックに FETCHRUN、または STACK ステートメントを介して配置されたデータ要素は、実行時に検出された次の INPUT ステートメントで処理されます。

INPUT ステートメントは、前述したようにキーワード/デリミタモードのデータを処理します。

すべての入力フィールドを充填するためのデータ要素が使用可能でない場合は、フィールド形式に応じて空白/ゼロが充填されます。存在する入力フィールドよりも多くのデータ要素が指定されている場合、残りのデータは無視されます。

フィールドにスタックからのデータが入力されている場合、フィールド属性はデータに適用されません。

Natural システム変数 *DATA を参照して、Natural スタックで現在使用可能なデータ要素の数を判断できます。

バッチモードでの INPUT ステートメントの使用

以下では次のトピックについて説明します。

バッチフォームモード

データレコードは、1 つ以上の AD=A フィールドや AD=M フィールドを含む行ごとに読み取られ、レコードに含まれるデータが 1 つ以上の適切なフィールドに割り当てられます。

入力データフィールドは、連続していると想定されます。デリミタ文字が使用されていない限り、入力データはフィールドの内部定義に従って正確な長さで入力する必要があります。数値フィールドの場合は、記号(SG=ON の場合)および小数点に空白を適宜許可する必要があります。

オプションとして、個々のフィールドの値を分割するデリミタ文字を使用してデータを入力することもできます。この場合、内部定義に従って正確な位置番号で入力する必要はなく、位置 1 から開始して左から右に処理されます。データ入力のルールは、「データ入力」で説明したルールと同じです。また、割り当て文字を使用して、フィールドをスキップします。

バッチキーワード/デリミタモード

キーワード/デリミタモードがバッチモードで使用されている場合、キーワード/デリミタモードは、スタック入力に使用される場合と同じように機能します。