■  SORTプロシージャサンプル(重複レコードチェック)


EASYでは内部ソートを使ってデータ処理前にレコード順を変更することができます。

EX)
//FILEA    DD *                    ←INPUTデータ
AA1BB1001
AA2BB2   
AA3BB1003
AA2BB2   
AA2BB4005
AA1BB1006
AA2BB4007
AA1BB1008
//SYSLIN   DD   *
LIST OFF
PARM LIST(NOPARM NOFILE)
FILE FILEA                        ←INPUTデータ定義
AAA       1 3 A  HEADING('A')
BBB       * 3 A  HEADING('B')
CCC       * 3 A  HEADING('C')
*
FILE SORTFL VIRTUAL FB(80 8000)   ←仮想ファイル(DDステートメント不要)
  COPY FILEA
*
WKCNT    W 2 P 0 VALUE 0 HEADING('DUP COUNT') MASK('ZZ9')
*
SORT FILEA TO SORTFL BEFORE(ABC) USING(AAA BBB)
ABC. PROC                         ←SORT前プロシージャ
   IF CCC NE '   '
      SELECT                      ←対象レコードの抽出
   END-IF
END-PROC.
JOB  INPUT (SORTFL KEY(AAA BBB))
    IF   DUPLICATE SORTFL
       IF  FIRST-DUP SORTFL
          WKCNT = 0   
       END-IF
       WKCNT = WKCNT + 1
       PRINT REPT1
       IF  LAST-DUP SORTFL
           PRINT REPT2
       END-IF
*** ELSE
***    WKCNT =  0
    END-IF
REPORT REPT1
TITLE 1 '## DETAIL LIST ##'
LINE 1 AAA BBB CCC WKCNT
*
REPORT REPT2 SUMMARY
CONTROL FINAL NOPRINT AAA NOPRINT BBB
TITLE 1 '## SUMMARY LIST ##'
LINE 1 AAA BBB WKCNT
*
/*

                      ↓実行結果

        ## DETAIL LIST ##

  A     B     C    DUP COUNT
 AA1   BB1   001        1
 AA1   BB1   006        2
 AA1   BB1   008        3
 AA2   BB4   005        1
 AA2   BB4   007        2


        ## SUMMARY LIST ##
     A     B    DUP COUNT
    AA1   BB1         3
    AA2   BB4         2

 



BEFORE PAGE

TOP PAGE