バージョン 6.3.3
 —  ステートメント  —

STACK

STACK [TOP]

COMMAND operand1 [operand2 [(parameter)]]

[DATA] [FORMATTED] {operand2 [(parameter)]}

このドキュメントでは、次のトピックについて説明します。

構文図で使用されている記号については、「構文記号」を参照してください。

関連ステートメント:INPUT | RELEASE


機能

STACK ステートメントは、Natural スタックに次のいずれかを挿入するために使用します。

スタックの詳細については、「プログラミングのその他のポイント」の「スタック」(『プログラミングガイド』)を参照してください。

Top of page

構文説明

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

オペランド 構文要素 フォーマット ステートメント参照 ダイナミック定義
operand1 C S A G N A                        
operand2 C S A G N A U N P I F B D T L   G  

構文要素の説明:

TOP

TOP を指定した場合、データ/プログラム/コマンドが Natural スタックの先頭に挿入されます。 それ以外の場合、スタックの最後に挿入されます。

例:次のステートメントでは、変数 #FIELDA の内容がデータとしてスタックの先頭に挿入されます。

STACK TOP #FIELDA
DATA

DATA(デフォルト)では、スタックに挿入されたデータは INPUT ステートメントの入力データとして使用されます。

データ内の区切り文字または INPUT 割り当て文字はデリミタとして処理されます。 スタックのデータが INPUT ステートメントでどのように処理されるかについては、「Natural スタックデータの処理」(INPUT ステートメントの説明内)を参照してください。

例:次のステートメントでは、変数 #FIELD1 および #FIELD2 の内容がスタックに挿入されます。

MOVE 'ABC' TO #FIELD1
MOVE 'XYZ' TO #FIELD2
STACK #FIELD1 #FIELD2

これらの変数は、デリミタモードで Natural プログラム内の次の INPUT ステートメントにデータとして渡されます。

INPUT #FIELD1  #FIELD2

注意:
operand2 が時刻変数(フォーマット T)の場合は、変数内容のうち時刻コンポーネントのみがスタックに挿入され、日付コンポーネントは挿入されません。

FORMATTED

FORMATTED では、フィールド単位ですべてのデータを次の INPUT ステートメントに渡します。キー割り当てやデリミタ文字は解釈されません。

例:

次のステートメントでは、"ABC,DEF" が #FIELD1 に、"XYZ" が #FIELD2 に挿入されます。

MOVE 'ABC,DEF' TO #FIELD1
MOVE 'XYZ'     TO #FIELD2
STACK TOP DATA FORMATTED #FIELD1 #FIELD2
...
INPUT #FIELD1 #FIELD2

INPUT 区切り文字をコンマ(プロファイル/セッションパラメータ ID=,)にすると、次のステートメント(キーワード FORMATTED なし)により、"ABC" は #FIELD1 に、"DEF" は #FIELD2 に挿入されます。

MOVE 'ABC,DEF' TO #FIELD1
STACK TOP DATA #FIELD1
...
INPUT #FIELD1 #FIELD2

注意:
渡されるデータにデリミタ文字、制御文字、または DBCS 文字が含まれている場合、これらの文字が不適切に解釈されないように FORMATTED オプションを使用してください。

COMMAND operand1

コマンド(またはプログラム名)をスタックに挿入するには、コマンド(operand1)をキーワード COMMAND に続けて指定します。 Natural は、NEXT プロンプトを表示してユーザーに入力を促す代わりに、このコマンドを実行します。

例:次のステートメントでは、コマンド RUN がスタックの先頭に挿入されます。 通常では NEXT プロンプトが発行される時点で、Natural はこのコマンドを実行します。

STACK TOP COMMAND 'RUN'
COMMAND operand1 operand2 ...

コマンド(operand1)とともにデータ(operand2)をスタックに挿入することもできます。 これらのデータは、コマンド実行後の次の INPUT ステートメントで処理されます。

コマンドとともにスタックに挿入されたデータは常にフォーマットされません。

注意:
スタックに挿入されるデータに空の英数字フィールド(つまり、空白)が含まれている場合、これらの空白は値と値の間のデリミタとして解釈され、対応する INPUT ステートメントで正しく処理されません。 そのため、コマンドとともに空の英数字フィールドをデータとしてスタックに挿入する場合、STACK ステートメントを 2 つ使用する必要があります。1 つはデータをスタックに挿入するための STACK DATA operand2 ...、もう 1 つはコマンドをスタックに挿入するための STACK COMMAND operand1 です。

parameter

operand2 が日付変数の場合、この変数に対するパラメータとして、セッションパラメータ DF を指定できます。

Top of page

** Example 'STKEX1': STACK                                              
************************************************************************
DEFINE DATA LOCAL                                                       
1 #CODE (A1)                                                            
END-DEFINE                                                              
*                                                                       
INPUT //                                                                
  10X 'PLEASE SELECT COMMAND' //                                        
  10X 'LIST VIEW      (V)' /                                            
  10X 'LIST PROGRAM * (P)' /                                            
  10X 'TECH INFO      (T)' /                                            
  10X 'STOP           (.)' //                                           
  20X 'CODE:' #CODE                                                     
*                                                                       
*                                                                       
DECIDE ON FIRST #CODE                                                   
  VALUE 'V'                                                                
    STACK TOP DATA    'VIEW'                                            
    STACK TOP COMMAND 'LIST'                                   
  VALUE 'P'                               
    STACK TOP COMMAND 'LIST PROGRAM *'
  VALUE 'T'                             
    STACK TOP COMMAND 'LAST *'        
    STACK TOP COMMAND 'TECH'          
    STACK TOP COMMAND 'SYSPROD'   
  VALUE '.'                           
    STOP                              
  NONE                                
    REINPUT 'PLEASE ENTER VALID CODE' 
END-DECIDE                            
*                                     
*                                     
END                                  

プログラム STKEX1 の出力:

PLEASE SELECT COMMAND
                     
LIST VIEW      (V)   
LIST PROGRAM * (P)   
TECH INFO      (T)   
STOP           (.)   
                     
          CODE:P

コードを入力して確認した後:

16:46:28               ***** NATURAL LIST COMMAND *****              2005-01-19
User HTR                 - LIST Objects in a Library -         Library SYSEXSYN
                                                                               
Cmd  Name       Type         S/C  SM Version  User ID    Date        Time      
---  *________  P__________  *__  *  *______  *________  *__________ *________ 
__   ACREX1     Program      S/C  S  4.1.03   RKE        2004-11-11  16:32:37  
__   ACREX2     Program      S/C  S  4.1.03   RKE        2005-01-05  10:29:51  
__   ADDEX1     Program      S/C  S  4.1.03   RKE        2004-11-11  16:36:49  
__   AEDEX1R    Program      S/C  R  4.1.03   RKE        2004-11-11  16:40:34  
__   AEDEX1S    Program      S/C  S  4.1.03   RKE        2004-11-11  16:39:57  
__   AEPEX1R    Program      S/C  R  4.1.03   RKE        2004-11-11  16:41:57  
__   AEPEX1S    Program      S/C  S  4.1.03   RKE        2004-11-11  16:42:31  
__   AEPEX2     Program      S/C  S  4.1.03   RKE        2004-11-11  16:43:37  
__   ASDEX1R    Program      S/C  R  4.1.03   RKE        2004-11-11  17:00:21  
__   ASDEX1S    Program      S/C  S  4.1.03   RKE        2004-11-11  17:00:50  
__   ASGEX1R    Program      S/C  R  4.1.03   RKE        2004-11-11  17:02:01  
__   ASGEX1S    Program      S/C  S  4.1.03   RKE        2004-11-11  17:02:08  
__   ATBEX1R    Program      S/C  R  4.1.03   RKE        2004-11-11  17:03:18  
__   ATBEX1S    Program      S/C  S  4.1.03   RKE        2004-11-11  17:03:05  
                                                              14 Objects found 
Top of List.                                                                   
Command ===>                                                                   
Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10--PF11--PF12---
      Help  Print Exit  Sort        --    -     +     ++          >     Canc  

Top of page