2017-11-02 3 views
0

レベル・インジケータが定義されている(計算目的でレベル・インジケータが使用されている)RPGプログラムからプライマリ・ファイルを置き換えた経験がありますか?RPGLEでのプライマリ・ファイルの置換

代わりのRPGサイクル、私は完全に手続きファイル(これ以上のプライマリファイル)として定義されます(プライマリファイルを置き換える)新しいファイルを導入する必要があります。..

感謝を。

+0

コードが必要ですが、処理の違いは一般的にプログラムの完全な書き換えを意味します。ファイルの読み込みだけでなく、サイクルの中断ロジックを置き換える必要があります。あなたが求めていることは、「WebアプリケーションのMVCフレームワークを削除するにはどうすればよいですか? – jmarkmurphy

+0

私は束をしました。 CLプライマリ・ファイルを新しいファイルに上書きし、RPGを呼び出します。すべてが引き続き機能します。懸念事項は、元のファイルと同じ順序で新しいファイルです。ブレーク処理(SQLでグループ化する)では、実際にはレコードの順序が異なります。 – danny117

+0

RPGサイクルを置き換えることにしたので、プライマリファイルに1つ以上のフィールドを追加する必要があります。RPGでプライマリになっているファイル1は30個のフィールドを持ち、新しいファイル2は30 + 10個の新しいフィールドを持ちます.... RPGサイクルのプライマリファイルからのレコードの読み取りを指して、私はそれをRead&dowと置き換える必要があります。 – MAS400

答えて

3

なぜプライマリファイルの使用を停止しますか?レベルインジケータをシミュレートするために独自の比較を行うことは、おそらくプライマリファイルを変更するよりもはるかに多くの作業になります。

一般に、プライマリファイルを完全手順ファイルに置き換えるには、計算の先頭に%EOF(プライマリファイル)以外のREAD + DOWを入れ、2番目のREADとENDDOを計算の最後に置きます。今などL0_subr、L1_subrのようなもの

との比較を処理するためにそれらを呼び出すために、列7および8のレベルの指標L0、L1などとの計算に

、私は最初、サブルーチンにこれらの計算を移動します前のレコード、最初のREADの後、DOWの前に、レベルインジケーターフィールドの現在の値を保存するステートメントを追加します。計算の最後に、2番目のREADの前に、現在の値と保存された値を比較するステートメントを追加し、異なる場合は、関連するLx_subrを呼び出します。すべてのLx_subrsが呼び出された後、その特定のレベルインジケータの保存された値を更新します。

この種の変更を行うとエラーが発生しやすくなります。私はそれをプライマリファイルとして残し、必要に応じてIスペックに余分なレベルインジケータを追加します。ここから始まる

2017年11月6日更新:

は、前のレコードと現在のレコードの両方を追跡する有効にするには、データ構造に読み込むことができる機能を使用します。

read rec cur_ds; 
dow not %eof; 
    ... 
    if have_prv_ds; 
     compare the previous record to the current record 
    endif; 
    eval-corr prv_ds = cur_ds; 
    have_prv_ds = *on; 
    read rec cur_ds; 
enddo; 

READはファイルに関連付けられたスタンドアロンのフィールドに影響を与えることはありませんので、誤ってこれらのスタンドアロンのフィールドを参照することを避けることをお勧めでも定義されたスタンドアロンのフィールドを持つ避けるためです。これを行うには、QUALIFIEDキーワードを使用してファイルを定義します。次に、file.fmtを使用してレコード形式を参照し、ファイルに関連付けられたフィールドは存在しません。

dcl-f myfile qualified; 
dcl-ds cur_ds likerec(myfile.fmt); 
dcl-ds prv_ds likerec(myfile.fmt); 

read myfile.fmt cur_ds; 
dow not %eof(myfile); 
    ... 
    if have_prv_ds; 
     compare the previous record to the current record 
    endif; 
    eval-corr prv_ds = cur_ds; 
    have_prv_ds = *on; 
    read myfile.fmt cur_ds; 
enddo; 
+0

バーバラありがとう、それは近代化と呼ばれています:)これは、次のレベルでコードを取得するために探しているものです。私はそれが危険であることを知っています....私たちは、セーブされた価値....READ、SAVE、DOW、DETAIL、変更がTOTALを行う場合はREAD。ただし、次のレコードを読み込むと、ファイルフィールドからすべての前のレコードが消去されます。 Fスペックで定義しています...皆さんはグループで、私や他の提案を安全に動かすのに役立つと思いますか?どんな提案も大きな助けになるでしょうか? – MAS400

+0

データ構造を読み込むと、新しいレコードと古いレコードの両方にアクセスできます。 (データ構造への読み込みとデータ構造からの書き込みは、 "モダン"とも呼ばれます。これは、レコードデータがどこに行くかをより詳細に制御できるためです)。 read rec cur_ds; %eofではありません。 ...if have_prv_ds; 前のレコードを現在のレコードと比較します endif; eval-corr prv_ds = cur_ds; have_prv_ds = * on; rec rec cur_ds; enddo; enddo; –

+0

上記のコメントのコードと、I/O用のデータ構造を使用するための最良の方法の詳細については、オリジナルの記事を参照してください。 –

関連する問題