LoginSignup
0
0

More than 5 years have passed since last update.

構造体サブフィールドでのソート

Posted at

V7R1からは、構造体配列のサブフィールドをキーにしてソートも出来る様になっています。
世の中当り前の事が、RPGの世界では未だに出来ないこともありますが、日々進歩していると言うことでしょう。ただし第2キーは指定出来ないので、第2キー以降のソート順については不明…。

USR403.rpgle
     H****************************************************************
     H*-‚------------------------------*
     H*-‚---<<日付・著作権    >>-----*
     H*-‚------------------------------*
     H DATEDIT(*YMD)
     H COPYRIGHT('(C) ushiday - ')
     H*-‚------------------------------*
     H*-‚---<<コンパイル条件  >>-----*
     H*-‚------------------------------*
     H DFTACTGRP(*NO) ACTGRP(*NEW)
     H OPTION(*NOUNREF)
     H BNDDIR('QC2LE')
     F*-š---<<ファイル定義   >>-----*
     FITEM      IF   E           K DISK
     D*-š---<<変数定義 >>-----*
     D*
     D REC           E DS                  EXTNAME(ITEM : *INPUT)
     D                                     QUALIFIED
     D                                     DIM(10)
     D*
     D COUNT           S              2S 0 INZ
     D IX              S              2S 0 INZ
     D*
     D print           PR                  EXTPROC('print')                     標準出力関数
     D    msg                      1000A   VARYING CONST
     C*-‚------------------------------*
     C*-‚---<<メインルーチン  >>-----*
     C*-‚------------------------------*
      /FREE

           print ( '---- PROGRAM START ----')    ;
           DOW COUNT <= 9   ;
               //読取り
               COUNT += 1 ;
               CLEAR REC(COUNT)      ;
               READ ITEM REC(COUNT)  ;
               IF %EOF ;
                 COUNT -= 1 ;
                 LEAVE ;
               ENDIF ;
           ENDDO ;

           IF  COUNT = *ZERO ;
               EXSR @END  ;
           ENDIF ;

           //コードと単価をそのまま出力
           FOR IX = 1 TO COUNT  ;
               print ( '(' + %EDITC(REC(IX).CODE :'X') + ')'
                           + %EDITC(REC(IX).PRICE :'3') +'円') ;

           ENDFOR ;

           print ( '==== PRICE SORT     ====')    ;
           //単価を昇順でソート
           SORTA REC(*).PRICE  ;

           //出力
           FOR IX = 1 TO COUNT  ;
               print ( '(' + %EDITC(REC(IX).CODE :'X') + ')'
                           + %EDITC(REC(IX).PRICE :'3') +'円') ;

           ENDFOR ;

           EXSR @END  ;

           //終了
           BEGSR   @END   ;
                print ( '---- PROGRAM END   ----')    ;

               *INLR = *ON    ;
               RETURN        ;
           ENDSR         ;

      /END-FREE
     P****************************************************************
     P** < print             >: 標準出力                          **
     P****************************************************************
     P print           B                   EXPORT
     P                 E 

●実行結果
2015-12-04_192407.png

0
0
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
0
0