Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

@ushiday

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

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
0
Help us understand the problem. What are the problem?