V7R5 ,V7R3+PTF 以上 で %FIELDS
関数を使用した 複合キー のソートが可能になっています。
オープン系と連携したり、ちょっと複雑な事をやっていると、何かと便利なデータ構造の配列化ですが、ソートが単一キーだった事が解消されています。
使用例
以下は、使用例です。固定フォームRPGでも使用可能です。
QII0220R.rpgle
H DATEDIT(*YMD)
H*- ***************************************************************
H*- * F仕様書 **
H*- ***************************************************************
F*- ---<< ファイル定義 >>-----*
FITEM IF E K DISK
D*- ---<< 定数/変数定義 >>-----*
D MAX C 9999
D*
D R1 DS LIKEREC(ITEMR :*ALL )
D*
D REC DS LIKEDS(R1 )
D DIM(*AUTO : MAX )
D*
D MSG S 40A
C*- ***************************************************************
C*- * KLIST **
C*- ***************************************************************
C*- ***************************************************************
C*- * メインロジック **
C*- ***************************************************************
C*
C*-----------------------
C*- レコードキャッシュ
C*-----------------------
C DO *HIVAL
C READ ITEMR R1
C*
C IF %EOF
C LEAVE
C ENDIF
C*
C EVAL REC(*NEXT) = R1
C*
C*- 許容最大に達した
C IF %ELEM(REC) >= MAX
C LEAVE
C ENDIF
C*
C ENDDO
C*
C*- ソート前
C EVAL R1 = REC(1)
C EVAL MSG = ' ソート前( ) '
C + %EDITC(R1.CODE :'X')
C + ' '
C + R1.KANA
C MSG DSPLY
C*
C*- 単一キー・ソート(仕入先コード、カナ)
C**** SORTA REC(*).VENDC
C*--------------------------------------------------------------------
C*- マルチキー・ソート(仕入先コード、カナ)
C SORTA(A) REC %FIELDS(VENDC : KANA )
C*
C EVAL R1 = REC(1)
C EVAL MSG = ' ソート後(昇順) '
C + %EDITC(R1.CODE :'X')
C + ' '
C + R1.KANA
C MSG DSPLY
C*--------------------------------------------------------------------
C*- 降順
C SORTA(D) REC %FIELDS(VENDC : KANA )
C*
C EVAL R1 = REC(1)
C EVAL MSG = ' ソート後(降順) '
C + %EDITC(R1.CODE :'X')
C + ' '
C + R1.KANA
C MSG DSPLY
C*
C SETON LR
C RETURN
実行元データ(QUERY400でソート)
実行結果
RPG も日々進化!