EVALUATE
条件式。同一の項目での比較分岐によく使用。ネストが深い時はIF文より使われる。
-------------------------------------------------
EVALUATE (データ名 または TRUE) [ALSO (データ名 または TRUE)]
{(WHEN
(ANY または 条件 または TRUE または [NOT] (データ名 または 定数 または 算術式))
[ ALSO ( ANY または 条件 または TRUE または [NOT] (データ名 または 定数 または 算術式)]
実行文
}
[WHEN OTHER 実行文]
[END-EVALUATE]
-------------------------------------------------
「例1」
XXXがaの時は1をWWWに加算する。
XXXがbの時は2をWWWに加算する。
XXXがcの時は3をWWWに加算する。
XXXがa,b,c以外は4をWWWに加算する。
EVALUATE A
WHEN "a" ADD 1 TO WWW
WHEN "b" ADD 2 TO WWW
WHEN "c" ADD 3 TO WWW
WHEN OTHER
ADD 4 TO WWW
END-EVALUATE.
-------------------------------------------------
「例2」
A=3〜5ならBに1を加算、それ以外ならCに1を加算する
EVALUATE A
WHEN 3 THRU 5
ADD 1 TO B
WHEN OTHER
ADD 1 TO C
END-EVALUATE.
同じ
EVALUATE A
WHEN 3
WHEN 4
WHEN 5
ADD 1 TO B
WHEN OTHER
ADD 1 TO C
END-EVALUATE.
-------------------------------------------------
「例3」
条 件
ABCの値 XYZの値 UVWの値
"A" 11〜20 >50
"A" 21〜30 >60
"B" 31〜41 >70
の時は、 ADD 1 TO B
それ以外は ADD 1 TO C
EVALUATE ABC ALSO XYZ ALSO TRUE
WHEN "A" ALSO 11 THRU 20 ALSO UVW > 50
WHEN "A" ALSO 21 THRU 30 ALSO UVW > 60
WHEN "B" ALSO 31 THRU 40 ALSO UVW > 70
ADD 1 TO B
WHEN OTHER
ADD 1 TO C
END-EVALUATE.
IF
条件分岐
ネストが5個以上はEVALUATEを使用する。
-------------------------------------------------
IF 条件 THEN 文
[ ELSE 文 ]
END-IF
IF 条件 THEN 文 または NEXT SENTENCE
[{ELSE 文 または ELSE NEXT SENTENCE }]
END-IF
-------------------------------------------------
大きい[大きくない] [NOT] >
小さい[小さくない] [NOT] <
等しい[等しくない] [NOT] =
以上 >=
以下 <=
-------------------------------------------------
IF AAA = BBB
PERFORM SECTION-A
ELSE
PERFORM SECTION-B
END-IF.
OCCURS
ワークエリアの配列宣言
-------------------------------------------------
1次元テーブル
01 AAA.
03 DDD OCCURS 31 *日1〜31
05 EEE PIC S9(7).
EEE(1)〜EEE(31)
-------------------------------------------------
2次元テーブル
01 AAA.
03 CCC OCCURS 12 *月1〜12
05 DDD OCCURS 31 *日1〜31
07 EEE PIC S9(7).
EEE(1,1)〜EEE(1,31)
EEE(2,1)〜EEE(2,31)
〜
EEE(12,1)〜EEE(12,31)
-------------------------------------------------
3次元テーブル
01 AAA.
03 BBB OCCURS 2 *予定1、実績2
05 CCC OCCURS 12 *月1〜12
07 DDD OCCURS 31 *日1〜31
09 EEE PIC S9(7).
EEE(1,1,1)〜EEE(1,1,31)
EEE(1,2,1)〜EEE(1,2,31)
〜
EEE(2,12,1)〜EEE(2,12,31)
PERFORM
繰り返しテーブル処理
-------------------------------------------------
例1は使用せず、例2を使用する。
例1---------------------------
AAA.
【処理A】
BBB.
【処理B】
PERFORM AAA THRU BBB.
BBBの範囲は次のパラグラフが現れるまで範囲となる。
例2---------------------------
01-AAA SECTION.
AAA.
【処理A】
BBB.
【処理B】
PERFORM 01-AAA.
01-AAAの範囲は次のセクションが現れるまで範囲となる。
-------------------------------------------------
1.処理Aを1回だけ実行する。
PERFORM 処理A END-PERFORM.
2.処理AをIX回実行する。
PERFORM 処理A IX TIMES.
3.処理Aを条件を満足するまで繰り返す。
PERFORM VALYING IX FROM 1 BY 1
UNTIL IX > 10
処理A
END-PERFORM.
PERFORM 処理A
VARYING IX1 FROM 1 BY 1
UNTIL IX1 > 10.
PERFORM 処理A
VARYING IX1 FROM 6 BY -1
UNTIL IX1 < 1.
PERFORM 処理A
VARYING IX1 FROM 1 BY 1
UNTIL IX1 > 10 OR XYZ = SPACE
AFTER IX2 FROM 1 BY 1
UNTIL IX2 > 9 OR UVW = ZERO.
PERFORM VARYING IX1 FROM 1 BY 1 UNTIL IX1 > 13
PERFORM VARYING IX2 FROM 1 BY 1 UNTIL IX2 > 3
MOVE XXAAAA (IX1 IX2) TO YYAAAA (IX1 IX2)
ADD XXAAAA (IX1 IX2) TO WWAAAA
END-PERFORM
MOVE 0 TO ZZAAAA (IX1)
END-PERFORM.
-------------------------------
01 IXALL.
03 IX1 PIC 9(2) VALUE ZERO.
03 IX2 PIC 9(2) VALUE ZERO.
03 IX3 PIC 9(2) VALUE ZERO.
1次元テーブル処理
PERFORM 処理A
VARYING IX1 FROM 1 BY 1
UNTIL IX1 > 31
END-PERFORM.
2次元テーブル処理
PERFORM 処理A
VARYING IX1 FROM 1 BY 1
UNTIL IX1 > 12
AFTER IX2 FROM 1 BY 1
UNTIL IX2 > 31
END-PERFORM.
3次元テーブル処理
PERFORM 処理A
VARYING IX1 FROM 1 BY 1
UNTIL IX1 > 2
AFTER IX2 FROM 1 BY 1
UNTIL IX2 > 12
AFTER IX3 FROM 1 BY 1
UNTIL IX3 > 31
END-PERFORM.
-------------------------------
1次元テーブル処理
PERFORM VARYING IX1 FROM 1 BY 1 UNTIL IX1 > 31
処理A
END-PERFORM.
2次元テーブル処理
PERFORM VARYING IX1 FROM 1 BY 1 UNTIL IX1 > 12
PERFORM VARYING IX2 FROM 1 BY 1 UNTIL IX2 > 31
処理A
END-PERFORM
END-PERFORM.
3次元テーブル処理
PERFORM VARYING IX1 FROM 1 BY 1 UNTIL IX1 > 2
PERFORM VARYING IX2 FROM 1 BY 1 UNTIL IX2 > 12
PERFORM VARYING IX3 FROM 1 BY 1 UNTIL IX3 > 31
処理A
END-PERFORM
END-PERFORM
END-PERFORM.
INSPECT
データの置換、カウントを行う
●データの置換
INSPECT データ名 REPLACING
(ALL または LEADING または FIRST) データ名 BY データ名
CHARACTERS BY データ名 (BEFORE または AFTER) [INITIAL データ名]
例1 AAS項目のスペースを0に変換する。数値項目だがSPACEもある時使用する。
01 AAX.
03 AAS PIC S9(10).
INSPECT AAX REPLACING ALL " " BY "0".
●データのカウント
INSPECT データ名 TALLYING データ名 FOR
(ALL または LEADING または FIRST) データ名 CHARACTERS)
(BEFORE または AFTER) [INITIAL データ名]
01 AAX.
03 FILLER PIC X(20) VALUE "YAMADA HANAKO".
03 FILLER PIC X(20) VALUE "ITOU TAROU".
03 FILLER PIC X(20) VALUE "YAMADA KAZU".
03 FILLER PIC X(20) VALUE "YAMAMOTO HAJIME".
01 IX PIC 9(5) VALUE ZERO.
INSPECT AAX TALLYING IX FOR ALL "YAMADA".
IXは2
REDEFINES
ワーク項目の再定義
01 AAA.
03 FILLER PIC X(6) VALUE "10 XXX".
03 FILLER PIC X(6) VALUE "31 YYY".
03 FILLER PIC X(6) VALUE "58 UUU".
03 FILLER PIC X(6) VALUE "05 WWW".
01 BBB REDEFINES AAA.
03 CCC OCCURS 4 TIMES.
05 AA1 PIC 9(2).
05 AA2 PIC X(3).
|
|