PUSHLEVELコマンドは、一連のPUSHコマンドの始点をマークするコマンドです。対応するPOPLEVEL文を使用すると、PUSHLEVELの後に実行したPUSHコマンドで保存したすべての値をリストアできます。POPLEVELは、一連のコマンドを開始するPUSHLEVEL文と同じマーカーを指定する必要があります。PUSHLEVELは、プログラム内でのみ使用できます。
パラメータ
すべての保存値が即座にポップされる一連のPUSHコマンドの始点をマークするためのテキスト値。まったく同じmarker-expressionを指定するPOPLEVEL文によって、一連の保存値全体がリストアされます。
使用上の注意
PUSHLEVELとPOPLEVEL文の作成時の注意事項
PUSHLEVEL文をコーディングする際は、次の点に注意してください。
PUSHLEVELとPOPLEVELのペアは、次のコードに示すように、ペアごとに異なるマーカーを指定するとネストできます。
PUSHLEVEL 'firstlevel' PUSH PAGESIZE DECIMALS < saves values in FIRSTLEVEL ... PUSHLEVEL 'secondlevel' PUSH month product < Saves values in SECONDLEVEL ... POPLEVEL 'secondlevel' < Restores values in SECONDLEVEL ... POPLEVEL 'firstlevel' < Restores values in FIRSTLEVEL
通常は1つのプログラムに複数のレベルは必要ありません。ただし、1つのプログラムが別のプログラムをコールし、それぞれのプログラムに1組のPUSHLEVELおよびPOPLEVELコマンドが含まれる場合、ネストしたレベルが自動的に作成されます。
複数のPUSHLEVELコマンドに対して同じマーカーを指定すると、同じマーカーを指定しているPOPLEVEL文によって、最後のPUSHLEVEL文以降に保存された値のみがリストアされます。
複数のPUSHLEVELコマンドに対して異なるマーカーを指定すると、いずれかのPUSHLEVEL文のマーカーを指定するPOPLEVEL文によって、そのPUSHLEVEL文以降に保存されたすべての値がリストアされます。この場合、そのPUSHLEVELコマンド以降のPUSHLEVELコマンドの後に保存された値も含みます。
例
例10-85 レベル・マーカーの作成
PUSHLEVEL文を使用して、firstlevel
という名前のレベル・マーカーを作成できます。その後でPUSHを使用すると、現行値を保存できます。
PUSHLEVEL 'firstlevel' PUSH month DECIMALS ZSPELL
レベル・マーカーは、一重引用符で囲まれた任意のテキストです。値がレベル・マーカーの名前になる単一セルのID
変数またはTEXT
変数の名前を指定することもできます。プログラムの終了処理の部分にPOPLEVEL文を使用すると、firstlevel
マーカーの作成以降に保存したすべての値をリストアできます。
POPLEVEL 'firstlevel'
例10-86 PUSHLEVELおよびPOPLEVELコマンドのネスト
PUSHLEVELおよびPOP LEVELコマンドをネストすると、特定の値のグループをプログラム内の一定の場所に保存し、他の値のグループをプログラム内の別の場所に保存できます。次の例は、2組のネストしたPUSHLEVELコマンドとPOPLEVELコマンドを示します。
PUSHLEVEL 'firstlevel' PUSH PAGESIZE DECIMALS "Saves values in FIRSTLEVEL ... PUSHLEVEL 'secondlevel' PUSH month product "Saves values in SECONDLEVEL ... POPLEVEL 'secondlevel' "Restores values in SECONDLEVEL ... POPLEVEL 'firstlevel' "Restores values in FIRSTLEVEL
通常は、1つのプログラム内でPUSHLEVELおよびPOPLEVELコマンドの複数のペアを使用することはありません。ただし、1つのプログラムが別のプログラムをコールし、それぞれのプログラムにPUSHLEVELおよびPOPLEVELコマンドのペアが1組ずつ含まれる場合、ネスト機能が自動的に働きます。
例10-87 ワンステップの復元とネスト・レベル
次のプログラムは、PUSHLEVEL
'rpt1'
を使用して、プログラム内で個別にプッシュされているDECIMALSの元の値やmonth
、product
およびdistrict
の元のステータスをワンステップで復元するためにマークします。
ネストを実際に示すため、このプログラムには、'rpt2'
をマーカーとするネストしたPUSHLEVELとPOPLEVELのペア、および様々な箇所にあるいくつかのSTATUSコマンドが含まれています。プログラムの出力とプログラムを比較することにより、ステータスがどのように影響を受けているかがわかります。
DEFINE sales.RPT PROGRAM PROGRAM STATUS month product district PUSHLEVEL 'rpt1' PUSH DECIMALS month DECIMALS = 0 LIMIT month TO 'Jan96' REPORT WIDTH 8 DOWN district WIDTH 9 ACROSS product: expense PUSH product LIMIT product TO 'Racquets' 'Sportswear' REPORT DOWN district ACROSS product: advertising PUSHLEVEL 'rpt2' PUSH district LIMIT district TO 'Atlanta' 'Dallas' 'Chicago' REPORT DOWN district ACROSS product: sales BLANK STATUS month product district BLANK POPLEVEL 'rpt2' STATUS month product district BLANK POPLEVEL 'rpt1' STATUS month product district END
sales.rpt
プログラムによって生成される出力は、次のとおりです。
The current status of MONTH is: ALL The current status of PRODUCT is: ALL The current status of DISTRICT is: ALL MONTH: JAN96 ---------------------EXPENSE--------------------- ---------------------PRODUCT--------------------- DISTRICT Tents Canoes Racquets Sportswear Footwear -------- --------- --------- --------- ---------- ---------- Boston 31,299 67,527 52,942 49,668 80,565 Atlanta 41,139 53,186 57,159 108,047 99,758 Chicago 27,768 45,621 53,756 65,055 81,639 Dallas 47,063 34,072 118,807 113,629 19,785 Denver 33,177 42,975 89,144 63,380 36,960 Seattle 41,043 64,009 26,719 38,970 46,900 Month: JAN96 -----ADVERTISING----- -------PRODUCT------- DISTRICT RAcquets Sportswear -------------- ---------- ---------- Boston 3,784 3,352 Atlanta 4,384 9,509 Chicago 3,351 5,283 Dallas 8,700 8,340 Denver 6,215 4,654 Seattle 2,344 3,726 MONTH: Jan96 --------SALES-------- -------PRODUCT------- DISTRICT Racquets Sportswear -------------- ---------- ---------- Atlanta 61,895 129,616 Dallas 125,880 128,115 Chicago 58,649 77,490 The current status of MONTH is: JAN96 The current status of PRODUCT is: RACQUETS, SPORTSWEAR The current status of DISTRICT is: ATLANTA, DALLAS, CHICAGO The current status of MONTH is: JAN96 The current status of PRODUCT is: RACQUETS, SPORTSWEAR The current status of DISTRICT is: ALL The current status of MONTH is: ALL The current status of PRODUCT is: ALL The current status of DISTRICT is: ALL