212 く例〉 第 7 章 得意先コードと商品コードを 1 つのキーとします。 ード 商品コード ' 号・音先コ 入力領域 I- TCODE I ー SCODE 作業領域 W-TCODE W-SCODE 退避領域 W-TCODE 1 W- SCODE 1 作業領域は , 入力領域のキーを 1 つにするための領域で , 退避領域は , されたキーと比較するための領域です。 WORKING-STORAGE SECTION . 02 1-TCODE 02 1-SCODE INREC . F I L E . P I C X ( 4 ) . P I C X ( 6 ) . 入力 0 1 0 1 W-KEY . 02 W-TCODE 02 W-SCODE W-KEYI . P I C 円 C 02 W-TCODEI PIC 02 W-SCODEI PIC MAE-SHORI. REÅD INFILE AT END MOVE END-READ W-FLAG NOT THEN ” 1 ” X ( 4 ) . X ( 6 ) . X ( 4 ) . X ( 6 ) . TO W-FLAG MOVE I-TCODE TO W-TCODE MOVE I-SCODE TO W-SCODE T H E N IF W-FLAG NOT = END-READ AT END MOVE READ INFILE MOVE W-KEY TO W-KEYI S H U ー S H 0 R I. E X け . MAE-SHORI-EXIT . END-IF . PERFORM UNTIL W-KEY NOT = W-KEYI OR W-FLAG = ” 1 ” TO W-FLAG EX . SHU-SHORI-EXIT . END-PERFORM END-IF MOVE I-SCODE TO W-SCODE MOVE I-TCODE TO W-TCODE
213 コントロールプレイク処理 部分キーによるコントロール 7 』 . 3 プレイク処理 項目全体ではなく項目の一部分をコントロールプレイクキーとして処理した いときには , 次のように行ないます。 く例〉商品コード ( 6 桁 ) の先頭の 2 桁目からの 4 桁分をキーとします。 作業領域 退避領域 入力領域 I-SCODE W ー SCODE W- SCODEI 部分キー 商品コード 作業領域は , 入力領域のキーから 1 部分を取り出すための領域で , 退避領域 は , 入力されたキーと比較するための令印或です。 は F I L E . INREC . 02 1-SCODE PIC X ( 6 ) . WORKING-STORAGE SECTION . 77 W-SCODEI PIC X ( 4 ) . -4 ・ 1 一り 0 乙り MÅE-SHORI. REÅD INFILE ” 1 ” TO W-FLÅG ÅT END MOVE END-REÅD IF W-FLÅG NOT THEN MOVE I-SCODE TO W-KEY E N D ー I F . MAE-SHORI-EXIT . EX け . SHU-SHORI . MOVE W-SCODE TO W-SCODEI PERFORM UNTIL W-SCODE NOT = W-SCODEI OR W-FLÅG READ INFILE ÅT END MOVE ” 1 ” TO W-FLAG END-READ W-FLAG NOT T H E N MOVE I-SCODE TO W-KEY END-IF END-PERFORM SHU-SHORI-EXIT . EX け .
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.
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 の .
206 ” 0 ” TO W-FLAG MOVE W-SCODE UNTIL W-FLAG PERFORM SHU-SHORI THRU SHU-SHORI-EXIT PERFORM MAE-SHORI THRU MAE-SHORI-EXIT HAJIME. PROCEDURE DIVISION. 第 7 章 OUTPUT OUTFILE I N F I L E PERFORM ATO-SHORI THRU ATO-SHORI-EXIT MAE-SHORI . STOP RUN. READ MOVE 0 MOVE 0 MOVE MOVE OPEN I N F I L E INPUT 25 TO W-LCOUNT TO W-SGOUKEI TO W-NGOUKEI AT END MOVE " 1 ” TO W-FLAG TO W-SSOUGOUKEI TO W-NSOUGOUKEI MOVE 0 MOVE 0 SHU-SHORI . EXIT. MAE-SHORI-EXIT. END-READ. IF W-LCOUNT END-PERFORM END-READ AT END MOVE " 1 ” TO W-FLAG READ INFILE ニ W-SGOUKEI + I-SHUKKO COMPUTE W-SGOUKEI ニ W-NGOUKEI + I-NYUUKO COMPUTE W-NGOUKEI PERFORM UNTIL I-SCODE NOT = W-SCODE OR W-FLAG MOVE I-SCODE TO W-SCODE MOVE W-SGOUKEI TO WM-SHUKKO MOVE W-NGOUKEI TO WM-NYUUKO TO WM-SCODE E L S E C 0 N T I NU E MOVE 0 TO W-LCOUNT WRITE OUTREC FROM W-KOMIDASHI AFTER 2 THEN WRITE OUTREC FROM W-OOMIDASHI AFTER PAGE END-IF EXIT. ATO-SHORI-EXIT. CLOSE INFILE OUTFILE. WRITE OUTREC FROM W-SOUGOUKEI AFTER 2 MOVE W-SSOUGOUKEI TO WS-SHUKKO MOVE W-NSOUGOUKEI TO WS-NYUUKO ATO-SHORI . EXIT. SHU-SHORI-EXIT. ニ W-SSOUGOUKEI + W-SGOUKEI. COMPUTE W-SSOUGOUKEI = W-NSOUGOUKEI + W-NGOUKEI COMPUTE W-NSOUGOUKEI COMPUTE W-LCOUNT = W-LCOUNT + 1 WRITE OUTREC FROM W-MEISAI AFTER 2
225 マッチング処理 【ファイルレイアウト】 〔在庫マスタファイル〕 ファイル名 : INFILEM, レコード名 :INRECM 商品コード :IM—SCODE 価 :IM—TANKA 早 在庫 匣 :IM—ZAIKO X(6) 9 ( 5 ) 田 02 03 04 05 06 07 08 09 Ⅱ にロ丐ロ 〔入出庫ファイル〕 ファイル名 : INFILET, レコード名 : INRECT 商品コード :IT—SCODE . 及丿車 匣 :IT—NYUUKO 出丿車。 里 :IT—SYUKKO X(6) 例 02 03 04 05 06 07 08 09 Ⅱ にロ巧 9 ( 5 ) 9 ( 5 ) 〔新在庫マスタファイル〕 ファイ丿レ名 : OUTFILE, レコード名 :OUTREC 商品コード : O-SCODE 価 : O—TANKA 早 新在庫量 : O-ZAIKO 9 ( 5 ) X(6) 田 02 03 04 05 06 07 08 09 田Ⅱ にロ丐馬ロ絽
232 第 8 章 8 5 最大値の取り出し 英数字項目に対する最大の値とは , EBCDIC コード表の一番右下の状態で EBCD ℃コード表 す。 ト 0000 0001 0010 0011 0100 0101 0110 01 1 1 1000 1001 1010 1011 1 100 1 101 1 1 10 1 1 1 1 空白 & 0 1 人ワ」っ 0 -4 -0 っー 8 ミムメモャュ ソタチッテトナニスネノ アイウェオカキクケコ ト・ 4 ヒ ツ ト レロワン ヒフ サシスセ 十 最大値 つまり , これ以上大きい文字の状態はないことになります。この最大の値を 最大値といい , セットするためには表意定数の HIGH ー VALUE を使用します。 < 例 > W ー SCODE に最大値をセットします。 最大値 •HIGH-VALIJE P I c X ( 6 ) . 77 W-SCODE MOVE HIGH-VALUE TO W-SCODE W— S C O D E こまテスト 61 A に最大値をセットする ための文は ? 77 A PIC X ( 3 ) . 11111111 11111111 11111111 11111111 11111111 11111111 領域のすべてのピットに 1 がセットされます。
索引ファイルの取扱い 257 【ファイルレイアウト】 〔在庫マスタファイル〕 ファイル名 :IOFILEM, レコード名 :IORECM 商品コード :IOM-SCODE 早 価 :IOM-TANKA 在庫 匣 :IOM-ZAIKO 9 ( 5 ) 9 ( 7 ) X(6) 01 02 03 04 05 06 07 08 09 10 1 1 12 13 14 1 5 16 17 18 〔入出庫ファイル〕 ファイル名 : INFILET, レコード名 :INRECT 商品コード : IT—SCODE 価 : IT-NYUUKO 在庫 里 :IT-SYUKKO X(6) 9 ( 5 ) 9 ( 5 ) 01 02 03 04 05 06 07 08 09 1 0 1 1 12 1 3 14 15 16
296 02 WM-SCODE 02 WM-NYUUKO 02 WM-SYUKKO PROCEDURE DIVISION . < 例 > 第 10 章 整列併合用ファイル名 整列併合用レコード名 : SORTREC キー ( 昇順 ) 入力手続きの手続き名 : SORT-JYUNBI 出力手続きの手続き名 : SORT-ATO : SORTFILE : S-SCODE E N 日 C AT N 旧引 0 N . PROGRAM-ID. SORTIO. ENVIRONMENT DIVISION . CONFIGURATION SECTION . SOURCE-COMPUTER. ITEC. OBJECT-COMPUTER. ITEC. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT SORTFILE ASSIGN TO DISK103. SELECT OUTFILE ASSIGN TO PRINTER. SEL E CT 燼 F I L E ÅSS I G N T 0 旧 S K 101 . F I L E SE C T 1 0 N . D Å T Å D I V I S 1 0 N. FD FD 01 S D 01 INF I L E. INREC. 02 1-SCODE 02 1-KUBUN 02 1-RYOU 0 UT F I L E. OUTREC SORTFILE . SORTREC. 02 S-SCODE 02 S-NYUUKO 02 S-SYUKKO P I C X ( 6 ) . P I C X( I) . PIC S9 ( 5 ) . P I C X ( 13 3 ) . PIC X ( 6 ) . PIC S9 ( 5 ) . PIC S9 ( 5 ) . WORKING-STORÅGE SECTION. 01 W-FLÅG 01 W-M 日 S A I . 円 C 02 02 02 HÅJIME. SORT SORTFILE X . X ( 1 D X ( 6 ) . X ( 10 ) P I C S 9 ( 5 ) . P I C P I C P I C P I C 円 C VALUE SPACE. VALUE SPÅCE . VÅLUE SPACE . X ( 1 の S9 ( 5 ) . ON ASCENDING S-SCODE INPUT PROCEDURE SORT-JYUNBI OUTPUT PROCEDURE SORT-ATO STOP RUN .
297 整列併合処理 SORT-JYUNBI. OPEN INPUT INFILE MOVE ” 0 ” TO W-FLAG READ INFILE ÅT END MOVE ” 1 ” TO W-FLÅG END-REÅD PERFORM YOMU-SHORI THRU YOMU-SHORI-EXIT UNTIL W-FLAG = CLOSE INFILE . SORT-ATO. OPEN OUTPUT OUTFILE MOVE ” 0 ” TO W-FLÅG RETURN SORTFILE ÅT END MOVE ” 1 ” TO W-FLAG ←整列併合用ファイルからの受取り END-RETURN PERFORM KAKU-SHORI THRU KÅKU-SHORI-EXIT UNTIL W-FLÅG ニ CLOSE OUTFILE. I-RYOU TO S-NYUUKO I-RYOU TO S-SYUKKO MOVE I-SCODE TO S-SCODE KÅKU-SHORI. E X け . YOMU-SHORI-EXIT. END-REÅD. AT END MOVE ” 1 ” TO W-FLÅG READ INFILE RELEÅSE SORTREC RETURN SORTFILE WRITE OUTREC FROM W-MEISAI ÅFTER 2 MOVE S-SYUKKO TO WM-SYUKKO MOVE S-NYUUKO TO WM-NYUUKO MOVE S-SCODE TO WM-SCODE YOMU-SHORI . IF I-KUBUN = THEN MOVE 0 MOVE ELSE MOVE 0 MOVE E N D ー I F TO S-SYUKKO TO S-NYUUKO ←整列併合用ファイルへの受渡し ←整列併合用ファイルからの受取り します。 並べ替えのもとになる商品コードがバラバラになるような入力データを使用 この例題では , 整列が正しく行なわれるかどうかチェックします。 1 圧 4 - 3 テストテータの作成とテスト EX 灯 . KÅKU-SHORI-EXIT . END-RETURN . ÅT END MOVE ” 1 ” TO W-FLÅG