LoginSignup
1
1

More than 1 year has passed since last update.

%FIELDSを使用した複合キーのソート

Last updated at Posted at 2022-12-21

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でソート)

2022-12-10_161227.png2022-12-10_161400.png
2022-12-10_161504.png

実行結果

2022-12-10_162340.png

RPG も日々進化!

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1