HYOUSAKUSE I-SHORI . MOVE T-SCODE MOVE T-NAME SET SHIHYOU UP BY 1 READ TBLFILE MOVE ” 1 ” END-READ. HYOUSAKUSE I-EXIT. EXIT. AT END MOVE " 999999 " TO WT-SCODE (SHIHYOU) TO WT-NAME (SHIHYOU) TO WT-SCODE (SHIHYOU) TO W-TFLAG < 例 > 表引きをします。 使用して表を取り扱うことができます。 この記述により W-TABLE の領域にデータが読み込まれ , 表引き処理 PROCEDURE DIVISION. MOVE " 0 ” TO W-TFLAG SET SHIHYOU TO 1 READ TBLFILE AT END MOVE ” 1 ” TO W-TFLAG END-READ PERFORM HYOUSAKUSEI-SHORI THRU HYOUSAKUSEI-EXIT UNTIL W-TFLAG TO 1 AT END MOVE ” 1 ” TO W-FLAG 179 SHIHYOU を 表の最後は , 項目数ではなく , 表の最後を示す値によりチェッ クすることになります。 77 W-SEARCH-FLAG SHU-SHORI. MOVE I-SCODE MOVE I-TANKA TO O-TANKA PIC X. ・・・サーチフラグの領域の確保 TO O-SCODE COMPUTE O-KINGAKU = I-TANKA * I-SURYOU TO W-SEARCH-FLAG SET SHIHYOU MOVE ” 0 ” THEN MOVE WT-NAME (SHIHYOU) TO O-NAME IF W-SEARCH-FLAG = OR W-SEARCH-FLAG UNTIL WT-SCODE (SHIHYOU) ー " 999999 " ・・表の最後のチェック PERFORM HYOUBIKI THRU HYOUBIKI-EXIT ELSE MOVE SPACE HYOUBIKI. EXIT. SHU-SHORI-EXIT. END-READ. READ INFILE WRITE OUTREC END-IF TO O-NAME IF I-SCODE = WT-SCODE (SHIHYOU) THEN MOVE " 1 " TO W-SERACH-FLAG ELSE SET SHIHYOU UP BY 1 END-IF. HYOUBIKI-EXIT. EXIT.
176 IJ P B Y AT END MOVE " 1 " TO W-FLAG 逐次表引き 非逐次表引き が , 指標の値を増加するには SET 文を使用するところが異なります。 す。指標を使用したときと添字を使用したときのプログラムは , ほは、同しです PERFORM 文を使用しての表引きは , 指標を使用して行なうこともできま 第 6 章 整数は , 指標を増加する値を指定します。 指標名 U P B Y 整数 S E T 【プログラム】 77 W-SEARCH-FLAG SHU-SHORI. P I C X. ・・・サーチフラグの領域の確保 MOVE I-SCODE TO O-SCODE MOVE I-TANKA TO O-TANKA ELSE MOVE SPACE TO O-NAME THEN MOVE WT-NAME (SHIHYOU) TO O-NAME IF W-SEARCH-FLAG = UNTIL SHIHYOU > 10 OR W-SEARCH-FLAG ー PERFORM HYOUBIKI THRU HYOUBIKI-EXIT TO 1 SET SHIHYOU MOVE " 0 " TO W-SEARCH-FLAG COMPUTE O-KINGAKU ニ I-TANKA * I-SURYOU HYOUBIKI. EXIT. SHU-SHORI-EXIT. END-READ. READ INFILE WRITE OUTREC E ND ー I F 6 3 非逐次表引き処理 EXIT. HYOUBIKI-EXIT. END-IF. ELSE SET SHIHYOU UP BY 1 THEN MOVE " 1 ” TO W-SERACH-FLAG IF I-SCODE = WT-SCODE (SHIHYOU) 回数を減らすことができます。非逐次表引きとは , 表の真ん中のキー項目と比 から小さい方に並んでいるときは , 非逐次表引きという方法で行なうと比較の 表が表のキー項目の小さい方から大きい方に並んでいるか , あるいは大きい方 例題のように表の最初から順に行なう表引きを逐次表引きといいます。もし ,
表引き処理 添字に 1 を加える処理も PERFORM 文で行なうことができます。 P E R F O RM 手続き名 1 T H R U 手続き名 2 定数 1 V A R Y I N G データ名 1 F R O M データ名 2 定数 2 U N T I L 条件 B Y データ名 3 定数 1 およびデータ名 2 には , データ名 1 の初期値を指定します。定数 2 お よびデータ名 3 には , 増加値を指定します。データ名 1 の値が初期値から始ま り , 増加値分増加され条件が成立するまで PERFORM 文を実行します。 AT END MOVE " 1 " TO W-FLAG 【プログラム】 77 77 W-SEARCH-FLAG W-SOEJI PIC X. PIC S9 ( 2 ) COMP. ・・・サーチフラグの領域の確保 ・・・添字の領域の確保 SHU-SHORI. TO O-TANKA MOVE I-TANKA TO O-SCODE MOVE I-SCODE IF W-SEARCH-FLAG COMPUTE W-SOEJI ニ W-SOEJI UNTIL W-SOEJI > 10 OR W-SEARCH-FLAG ニ VARYING W-SOEJI FROM 1 BY 1 PERFORM HYOUBIKI THRU HYOUBIKI-EXIT MOVE " 0 " TO W-SEARCH-FLAG COMPUTE O-KINGAKU = I-TANKA * I-SURYOU ELSE MOVE SPACE TO O-NAME THEN MOVE WT-NAME (W-SOEJI) TO O-NAME HYOUBIKI. EXIT. SHU-SHORI-EXIT. END-READ. READ INFILE WRITE OUTREC E ND ー I F EXIT. HYOUBIKI-EXIT. END-IF. ELSE CONTINUE THEN MOVE ” 1 " TO W-SERACH-FLAG IF I-SCODE = WT-SCODE (W-SOEJI)
表引き処理 これで , 次のような表が確保されたことになります。 163 W-KOUMOKU(I) AAAOOI テレヒ X(6) WT-SCODE ( 1 ) X ( 20 ) W-TABLE W-KOUMOKU(2) B B B 002 センタクキ WT-SCODE(2) ・ X(6) WT-NAME(I) X ( 20 ) ・ WT-NAME(2) ・ W-KOUMOKU(IO) 」」」 01 0 ヒ・テ・オ X ( 20 ) ・ WT-NAME(IO) ・ WT-SCODE(IO) 6 SEARCH 文 表引きは , 指標を使用して SEARCH 文を使用して行ないます。 S E A R C H データ名 A T E N D 文 WH E N 条件文 E N D ー S E A R C H V A R Y I N G 指標名 •SEARCH 文 指標 •VA 日 YING A 丁 END ->WHEN → END-SEARCH データ名には , OCCURS と INDEXED の指定してある表形式の領域のデー 止符でも構いません。 の最後は , END-SEARCH で示します。また , END-SEARCH の代わりに終 理 , つまり , 表中に該当するものがある場合の処理を指定します。 SEARCH 文 ない場合の処理を指定します。 WHEN には , 指定した条件に一致したときの処 タ名を指定します。 AT END には , 表の最後まで調べて表中に該当するものが
( 4 ) (a) ① ② ③ ④ ⑤ ⑥ ⑦ 第 6 章 SEARCH 文 逐次表引き S E A R C H データ名 V A R Y I N G 指標名 A T E N D 文 WH E N 条件文 E N D ー S E A R C H データ名 条件 表中に該当するものがないときの文を記述します。 AT END 文 表に関係づけられた指標名を指定ます。 指標名 す。 OCCURS と INDEXED BY の指定してあるデータ名を指定しま す。 SEARCH 文の最後には , END-SEARCH あるいは終止符を付けま ③⑤の文を実行したあとは , SEARCH 文の次の文を実行します。 条件が成立したときの文を記述します。 WHEN 条件文 を使用して指定します。 探し出す条件を指定します。条件は , 比較演算子および論理演算子
186 第 6 章 6.5.2 Q@A Q 1 A Q 2 A Q 3 A 表の途中から表引きをすることはできますか ? できます。 指標に初期値を設定する SET 文で , 表の何番目の項目から表引きを開 始するかを整数で指定すれば , 表の途中から表引きができます。 表中に該当する項目が必すある場合 , SEARCH 文の AT END を省略 することはできますか ? できます。表中に該当項目がなかったとき , AT END の指定がないと , SEARCH 文の次の文を実行します。 ただし , プログラムの実行中にどんな場合が起こらないとも限りません できます。つまり , WHEN 条件文の記述を繰り返し指定することが SEARCH 文で条件を 2 つ以上指定することはできますか ? ので , 省略しないようにしましよう。 できます。 0
表引き処理 較し , 求めたいものが表の前半にあるか後半にあるかどうかを求めます。もし , 前半にあるとすると , 今度は , その前半の部分の前半にあるか後半にあるか求 めます。このように , 順に表を半分にしながら表引きを行ないます。 この非逐 次表引き処理は , SEARCH ALL で行ないます。 ->SEARCH ALL S E A R C H A L L データ名 A T E N D 文 WH E N 条件文 E N D ー S E A R C H データ名 , "AT END 文 " , "WHEN 条件文 " に対する指定内容は , 逐 次表引きの SEARCH 文と同じです。 さらに , 非逐次表引きを行なうときは , 表を確保する OCCURS にキー項目が 小さい方から大きい方に並んでいるかあるいは大きい方から小さい方に並んで いるという指定をしておかなければなりません。 O C C U R S 整数 A S C E N D I N G キー項目 D E S C E N D I N G I N D E X E D B Y 指標名 A S C EN D G D E S C E N D G 整数には表の項目数を指定します。キー項目が小さい方から大きい方に並ん でいるときには ASCENDING , 大きい方から小さい方に並んでいるときに は , DESCENDING と指定します。 < 例 > 例題の表を非逐次表引きで行ないます。 WORKING-STORAGE SECTION. 一ワしつ・」っっム 0 0 0 0 PIC X(6) VALUE ” AAA001 ” . VALUE " テレビ " PIC X ( 20 ) PIC X(6) VALUE " BBB002 ". PIC X ( 20 ) VALUE ”センタクキ ". PIC X(6) VALUE "JJJOIO" PIC X ( 2 の VALUE " ビデオ "
表引き処理 先頭の 1 ビットは符号部 , そのうしろ 15 ビットは数字部ですが , 10 進に換算 して 2 桁分が確保できる部分だけが使用され , 残りは使用されません。 符号部が 0 のときは正 , 1 のときは負のデータであることを示します。 指標を使用せす添字を使用して表引きを行なうときは , SEARCH 文を使用 することはできません。添字を使用しての表引きは , PERFORM 文を使用しま す。 6. 生 2 PERFORM 文による表引き PERFORM 文を使用して例題の表引きを行なうこともできます。このとき も SEARCH 文のときと同様に , 次の 2 つの場合について考えます。 等しい商品コードが見つかった 173 ①表中に該当するものがある場合 ① サーチフラグ← 0 添字← 1 表操作ループ サーチフラグ = 1 表引き処理 サーチフラグ← 1 ( 入 ) ・ ( 添字 商品コード・商品コード 入口 表引き処理 表操作ループ 添字←添字十 1 出 ② ④ ① 繰り返します。 添字に 1 を加え , 表引き処理を 品コードが等しくないときは , 入力した商品コードと表中の商 ます。 まで , 表引きの処理を繰り返し グが文字定数の 1 に等しくなる 字に 1 をセットし , サーチフラ ② , ③表の先頭より探すので , 添 セットします。 サーチフラグに文字定数の 0 を あったどうかを調べるための 表中に該当する商品コードが ④ [ 表引き処理 ] ⑤ ⑥ 入力した商品コードと表中の商 品コードが等しいかどうか比較 定数の 1 をセットします。 します。 ときには , サーチフラグに文字
178 01 第 6 章 W-TABLE REDEFINES W-TABLEC. INDEXED BY SHIHYOU. ASCENDING WT-SCODE . 02 WT-KOUMOKU OCCURS 10 ・ ・・・表の項目数の指定 ・・キー項目と小さいほうから 大きい方に並んでいる指定 03 WT-SCODE 03 WT-NAME SHU-SHORI. PROCEDURE DIVISION. PIC P I C SEARCH ALL WT-KOUMOKU X ( 6 ) . X ( 2 の . ・・・非逐次表引きの指定 AT END MOVE SPACE TO O-NAME WHEN I-SCODE = WT-SCODE (SHIHYOU) MOVE WT-NAME (SHI HYOU) TO O-NAME END-SEARCH 非逐次表引きの場合は , 指標に対する初期設定および指標の値の変更をする ための SET 文は必要ありません。 6.4 』ファイル入力による表の確保 表は , 例題のようにプログラム中に直接定数で確保する方法のはかに , ファ イルから読み込む方法があります。表の内容が変動する可能性が高い場合に便 利です。このとき , 表の大きさの最大は , 拡張を考えて少し大きく確保してお きます。さらに , 表の最後にセットする値も決めておかなけれはなりません。 < 例 > ファイルから入力して表を作成します。 ・表の入力ファイル名 : TBLFILE ・表形式領域のレコード名 : W-TABLE ・表の項目数の最大 ・表の最後の値 : 999999 FD 01 TBLFILE. TBLNREC. 02 T-SCODE 02 T-NAME P I C P I C WORKING-STORAGE SECTION. 01 W-TABLE. 02 WT-KOUMOKU OCCURS 11 03 WT-SCODE 03 WT-NAME PIC P I C X ( 6 ) . X ( 20 ) . INDEXED BY SHIHYOU. X ( 6 ) . X ( 2 の .
表引き処理 表中から商品名を探し出す処理のうち指標に 1 をセットするには , で行ないますが , 残りの部分は , SEARCH 文で行ないます。 6.2.7 S ET 文 指標に初期値をセットするには SET 文を使用します。 S E T 指標名 T O 整数 整数には , 初期値を指定します。 こまめテスト解答 SET J TO 2 45. 指標を使用した表引きのための文です。 REDEFINES で行ないます。 の指定を同時に行なうことができないためです。 43. 値を設定するための VALUE の指定と表の形式を指定するための OCCURS 46 . 44 . SET 文 SET 文 こまテスト 46 指標 J の値に 2 をセット するための文は ?