0

RPG IIIでは、巨大な配列をファイルに格納する必要があります。最大フィールド長は256であるため、それぞれ250文字の長さの16フィールドでファイルを定義しました。移動せずに配列の1000個の値を16個のフィールドに入れる方法はありますか?COBOLのREDEFINESと同じように?

プログラム内の配列:

 E                    MPDV     1000  4   

ファイルの仕様:

 D000001                                           1   4 WRPMOD 
 D000002                                           5 254 W01PDV 
 ... etc. until     
 D000017                                        37554004 W16PDV   

Cobolでは次のように書きます。

 01 MPDV-TOP.
     03 MPDV-ARR OCCURS 1000.
        05 MPDV PIC X(4).
  01 WRPREC REDEFINES MPDV-TOP.
     03 W01PDV PIC X(250).
     .... ETC. UNTIL
     03 W16PDV PIC X(250).

ファイルを読み取ると、その値を含む配列MPDVを取得し、MPDVの値を使用してファイルを書き込むことができます。

私のソリューションは次のようになります:追加の配列

    E                    MPX        16250               MPDV REDEF   

そしてたくさんの動き:

C                     MOVELMMEMOD    WRPMOD    
C                     MOVEAMPDV      MPX       
C                     MOVELMPX,1     W01PDV    
C                     MOVELMPX,2     W02PDV    
.... etc until
C                     MOVELMPX,16    W16PDV  
C                     WRITEWRPASM         

逆に読んでください。

4

2 に答える 2

4

データ構造を使用して、個々のフィールドをメインフィールドにオーバーレイします。

IMPDV        DS                                      
I                                        1 250 W01PDV
I                                      251 500 W02PDV
I                                      501 750 W03PDV
                      . . .
I                                     37514000 W16PDV

詳細については、次のリソースをお勧めします。

IBMi情報センター
ILERPGプログラマー・ガイド
ILERPG言語リファレンス

SafariBooksOnline
現代のRPGIV言語

于 2011-11-05T15:56:37.307 に答える
0

RPG III?RPGIVを使用する方がはるかに優れています。本当に。

RPG IIIでは、データ構造法が適しています。ただし、問題にアプローチする別の方法があります。ファイルをより現実的に定義します。配列の任意のサイズの「チャンク」ではなく、各フィールドを定義します。たとえば、週ごとの売上高について話していて、何週間も価値を維持したいとします。毎週の売り上げを、実際に格納されているデータを反映しない250バイトの文字フィールドを構成するのではなく、テーブル内の個別の列として定義します。

以下の例では、プログラムでファイルを記述しましたが、外部で定義されたファイルでも同じ手法が機能します。私は10列しか実行しませんでしたが、どのように機能するかを確認できます。データベースファイルには、実際には本物の列が定義されています。つまり、クエリユーザー、SQLユーザー(ODBC ... Webアプリケーション?)はすべて、cast(substring())体操に頼ることなく実際のデータにアクセスできます。

それが機能する方法は、データベーステーブルの定義がデータ構造にコピーされることです。RPGでは、データ構造はストレージを共有するため、列1から10で定義したものはすべて、列1から10で定義された別のフィールドに再マップできます。ここでは、販売配列全体を個々の販売列の上にマッピングします。ストレージは共有されているため、ARY、1を変更すると、WEEK01が自動的に変更され、その逆も同様です。これはまったく同じストレージです。

 E                    ARY        10 10 0              
 IDUMMY   AA  01                                      
 I                                        1  100WEEK01
 I                                       11  200WEEK02
 I                                       21  300WEEK03
 I                                       31  400WEEK04
 I                                       41  500WEEK05
 I                                       51  600WEEK06
 I                                       61  700WEEK07
 I                                       71  800WEEK08
 I                                       81  900WEEK09
 I                                       91 1000WEEK10
 I            DS                                      
 I                                        1  100WEEK01
 I                                       11  200WEEK02
 I                                       21  300WEEK03
 I                                       31  400WEEK04
 I                                       41  500WEEK05
 I                                       51  600WEEK06
 I                                       61  700WEEK07
 I                                       71  800WEEK08
 I                                       81  900WEEK09
 I                                       91 1000WEEK10
 I                                        1 100 ARY    
于 2011-11-07T16:11:56.360 に答える