新規投稿 記事一覧 ホーム
●ご利用方法,ご利用に際しての規約はこちらをお読みください。
こちらからの投稿は、先頭に表示されているコメントへの返信になります。
複数キーがある場合のREADEの使い方 いわた さん [ 6月15日(火) 13時19分 ]

    複数キーがある場合のREADEの使い方について教えてください。
    現在、RPG3の勉強中なのですが、資料などを確認しても解らないので質問させていただきます。

    例えばキーがKEY1-3の3つあるとして、その内KEY1-2の2つが等しくKEY3が異なる全レコードに対して
    処理を行う場合はどのような記述をすればいいのでしょうか。
    例えば、以下のようなレコードがあるとして、KEY1=B かつ KEY2=ABD のレコードに対してのみ処理
    を行いたいとします。
    この場合、対象となるのは5番と6番のレコードです。
    --------------------
    KEY1   KEY2   KEY3  番号
    A      ABC    100   1
    A      ABC    200   2
    A      ABD    300   3
    B      ABC    100   4
    B      ABD    120   5
    B      ABD    300   6
    C      ABC    100   7
    C      ABD    150   8
    C      ABE    300   9
    --------------------

    最初はKLISTにKEY1とKEY2を指定して演算項目1に指定して読み込めば大丈夫なのかと思いましたが、
    これをやると、5番目のレコードは読み込むのですが、6番目のレコードは読み込んでくれません。
    原因はKEY3が5番と6番で異なるからだとお思います。
    なにかワイルドカード的なものをKEY3に指定すればいいのかと考えましたが、ワイルドカードを指定
    する方法が見つかりません。
    色々なサイトでREADEはSETLLとセットで使用するものだという情報も得ましたが、SETLLの演算項目1
    にKLISTを指定すると、5番目を読み込んだ後にまた5番目の位置に位置決めしてしまいループが止ま
    りません。
    なのでSETGTでも試しましたが、コレをやると5番目すら読み込んでくれなくなりました。

    このような場合、どのようにREADEを使用すれば、KEY1-2が等しいレコードだけを読み込み対象にし
    てくれるのでしょうか?
    ご教示いただければ幸いです。

    RE:複数キーがある場合のREADEの使い方 IKD さん [ 6月15日(火) 15時39分 ]

      下記のような例になります。
      つまり 上位2つのキー・フィールドを組み合わせたキー・リスト EQLKEY によって
      READE するとお望みの実行となります。

      0001.00      C*----------------------------------------------------+  
      0002.00      C           SETKEY    KLIST                              
      0003.00      C                     KFLD           KEY1                
      0004.00      C                     KFLD           KEY2                
      0005.00      C                     KFLD           KEY3                
      0006.00      C*----------------------------------------------------+  
      0007.00      C                     MOVE *LOVAL    KEY3                
      0008.00      C           SETKEY    SETLLFILE                          
      0009.00      C*----------------------------------------------------+  
      0010.00      C           EQLKEY    KLIST                              
      0011.00      C                     KFLD           KEY1                
      0012.00      C                     KFLD           KEY2                
      0013.00      C*----------------------------------------------------+  
      0014.00      C                     DO   *HIVAL                        
      0015.00      C                     SETOF                     50       
      0016.00      C           EQLKEY    READEFILE                     50   
      0017.00      C   50                LEAVE                              
      0018.00      C                     END  

    RE:複数キーがある場合のREADEの使い方 QQ さん [ 6月15日(火) 21時6分 ]

      SETLLは位置決めの為に一度行うものです。
      KEY1=B・KEY2=ABDの位置から読み始めなさい、とPGMに命令してます。
      ファイルにKEY3まで定義してあったとしても、KEY1・KEY2をキーリストに定義し
      SETLL・READEで問題ありません。
      むしろ今回の処理では、記述しない方がすっきりします。

      SETLL・READEでDOで回した時、に該当する一件目しか読み込まないというのであれば、
      ロジックを見直した方がいいかと思います。
      キーリスト
        KEY001 KLIST
            KFLD     KEY1
            KFLD     KEY2

      パターン1・・・IKDさんの記述した*HIVAL
        KEY001  SETLLFILEA
             DO  *HIVAL
          KEY001    READEFILEA                90
      90            LEAVE 
                 処理
             ENDDO
      パターン2・・・DOWEQ
        KEY001  SETLLFILEA
          KEY001    READEFILEA                90
          *IN90     DOWEQ*OFF
                    処理
        KEY001    READEFILEA                90
                    ENDDO
      パターン3・・・DOUEQ
        KEY001    SETLLFILEA                
          *IN90     DOUEQ*ON
          KEY001    READEFILEA                90
          *IN90     IFEQ  *ON
                    処理
                    ELSE
                    処理
             ENDIF
                    ENDDO

      この何れかに該当するようロジックを見直してください。
      DOの回し方は好みが分かれるところですが、それぞれ特性を生かした
      記述を心がけて下さい。
      極力余計な記述をさけ、特性を生かしメンテナンスの向上を意識しましょう。
      尚、CHAIN・LOKUP・READなどの命令直前でフラグを*OFFにする必要もありません。

    RE:複数キーがある場合のREADEの使い方 QQ さん [ 6月15日(火) 21時9分 ]

      位置がずれて見づらくてすいません。

お名前
パスワード
e-mailアドレス
タイトル
ホームページ
アドレス