3

私は現在、ファイルからいくつかのレコードを読み取る必要がある CL プログラムに取り組んでいます。ファイルは、そのメンバーの 1 つでそれ自体にオーバーライドされます。次に、その特定のメンバーのレコードを取得するための RCVF 操作がいくつかあります。ファイル終了メッセージを受信すると、オーバーライドされたファイルは削除されます。次に、別の OVRDBF がこのファイル内の別のメンバーで実行されます。今度は RCVF 操作が実行されると、すぐにファイルの終わりに達します。メッセージはその直後に受信されます。後続の RCVF 操作で 2 番目のメンバーのコンテンツを取得できるように、ファイル ポインターをリセットする方法はありますか?

4

2 に答える 2

2

CL でファイルを再読み込みするには、歴史的に 2 つの方法がありました。

まず、RTVMBRD を使用してメンバー内のレコード数を取得します。ファイル カウント レコードをループし、レコード カウントが最後のレコードに達したときに停止します。これにより、CPF0864 がスローされることが回避されるため、問題が回避されます。

2 つ目は、2 つのプログラムを作成することです。最初のプログラムは必要なオーバーライドを実行し、次に 2 番目のプログラムを呼び出して読み取りループを実行します。最初のプログラムに戻ると、CPF0864 はクリアされます。新しいオーバーライドを適用すると、2 番目のプログラムを再度呼び出すことができます。新しい呼び出しなので、同じファイルを問題なく再度読み取ることができます。

V5R3 では、単一の CL プログラムで最大 5 つの DCLF を許可することにより、部分的な解決策が提供されました。この場合、それは簡単に機能する可能性があります。最初のメンバーに 1 つの DCLF を使用し、別のメンバーに 2 番目の DCLF を使用するだけです。また、同じメンバーを再読み込みするために使用することもできます。(5 人以上のメンバーが必要な場合、これは役に立ちません。)

ただし、特定の DCLF の CPF0864 状態はまだクリアされません。

しかし、i 6.1 では、より完全なソリューションが提供されています。CLOSE コマンドが追加され、CPF0864 がクリアされます。これは完全クローズを実行するため、単一の CL プログラムでファイルを簡単に再利用できます。

于 2014-04-05T13:04:07.697 に答える