私のシーケンシャルファイルにnレコードがあり、COBOLプログラムを使用してシーケンシャルファイルの最後の3レコードを削除する必要があります。これどうやってするの?シーケンシャルファイルの最後の3レコードを削除する方法
答えて
はい、トリックはありますが、異なるCobolコンパイラと異なるOSバージョンを移植するものはありません。
完全に移植可能なCobolスタイルで実行する場合は、一度に3つのレコードをバッファリングするファイル全体を読み取り、バッファから落ちるごとに各レコードを書き込みます。ファイルの終わりに達すると、バッファリングされたレコードの書き込みを停止し、最後の3つを削除します。
いくつかの擬似COBOLは、次のようになります。
Perform Fill-Buffer
Perform until End-Of-File
Perform Write-Buffer
Perform Fill-Buffer
End-Perform
.
Write-Buffer.
Write OUTPUT-FILE
from The-Buffer (TOP-OF-BUFFER)
End-Write
.
Fill-Buffer.
* Do reads to fill a 3 position ring buffer
* and adjust TOP-OF-BUFFER to the current record...
.
これは実際にはより良いSORTのように、ユーティリティを使用して行われるものです。しかし、あなたはCobolでそれを行うことができます。
+1これは、プログラムを書く価値があるものではないことを示唆しています - ユーティリティを使用してください! – NealB
あなたが読んでいるファイルの数を知っていますか、またはプログラムを実行するたびに変更されますか?
カウントを知らなくても簡単な方法はありません。それ以外の場合は、ファイルを2回、1回はカウントに、2回目には新しい更新レコードを保存する必要があります。
スペースとメモリが大きな問題でない場合は、作業記憶域にファイル全体を表にしてから、最後の3レコードを差し引いたファイルをテーブルから書き戻します。その結果、1回だけファイルが読み込まれ、余分な読み書きは行われません。
以下に示すように、dfssortユーティリティを使用すると、非常に効率的かつ高速にこの作業を行うことができます。これは単なる例です。レコードの長さなどのパラメータを適宜変更してください。また、ここで手動でレコード数を数える必要があります。
//SORTT001 EXEC PGM=SORT 00100003
//SYSOUT DD SYSOUT=* 00110003
//SORTIN DD DSN=INPUT.FILE,DISP=SHR 00160003
//SORTOUT DD DSN=OUTPUT.FILE, 00170003
// SPACE=(2790,(5376,1075),RLSE), 00180003
// UNIT=SYSSF, 00190003
// DCB=(RECFM=FB,LRECL=0080,BLKSIZE=0), 00200003
// DISP=(NEW,CATLG,DELETE) 00210003
//SYSIN DD * 00220003
SORT FIELDS=COPY,STOPAFT=100 00230003
/*
レコードの数を数えて、それに応じて「STOPAFT = 100」を更新してください。一般化されたソリューションをご希望の場合はお知らせください。
なぜ汎用ソリューションが必要なのでしょうか?私がファイルから3つのレコードを削除しなければならないたびに、私はそのファイルに103レコードを正確に持っていたので、他のすべてのレコードと同じになると確信しています。 LRECLとRECFMは指定しないでください。ソートはそれを行います。 JCLで指定した場合は、2つの注意すべき点があります。効率的で速く、どこからカウントを取得していますか?ファイルをもう一度読みますか? –
一般的な解決策から、私はファイルレコードが変化し続けるかどうかを意味しました。または、一度だけ必要な場合。したがって、レコード数は手動で数えることができ、最後の3つはstopafterを使用することで無視できます。私は例を挙げました。はい、あなたは正しいです、私はそれをあまりにも具体的にしました。 – deepaklearner
手でカウントするか目でカウントするかはあまり効果的ではありません。ブラウズ/表示やm-PF8の操作もありません。とにかく、それはかなり愚かな要求です。しかし、ICETOOLを見ると、十分なものがあるはずです。 SUBSETはヒントです。 –
- 1. FMDBのレコードを削除する方法swift 3
- 2. 最後のレコードを削除するとUITableView deleteRowsAtIndexPathがクラッシュする
- 3. --safe-updatesモードで最新のレコードを削除する方法
- 4. テーブルの最後の3行を削除する
- 5. DataGridの最後の行の下端を削除する方法
- 6. テーブルの最後の行の境界を削除する方法
- 7. テキストの最後の文字を削除する方法は?
- 8. 角度要素の最後の子を削除する方法
- 9. コマンドプロンプトでファイルパスの最後のセグメントを削除する方法
- 10. 配列の最後の\ t(タブ)を削除する方法
- 11. 文字列の最後のインスタンスを削除する方法
- 12. JavaScriptを使って最後のdivを削除する方法
- 13. 最後のカンマを削除する方法 '、' jqueryで
- 14. URLの最後からダブルスラッシュを削除する方法
- 15. Elasticsearch - 単語の最後からsを削除する方法
- 16. 最後のCR文字を `cut 'で削除する方法
- 17. バッチスクリプトでテキストの最初と最後の3行を削除するには?
- 18. 削除ボタンをクリックすると現在のレコードを削除する方法
- 19. 特定の時間の後にMySQLレコードを削除する方法
- 20. 2ページ目の最後のレコードを削除すると、1ページに戻る
- 21. oracleデータベースの表から最後のレコードを削除する方法はありますか。
- 22. DBの最初と最後のレコードを取得する方法
- 23. サブフォームの最後に新しいレコードを追加する方法を削除しますか?
- 24. UITableViewのトップラインを削除するには?検索バーの後の最初の行を削除する方法
- 25. Djangoテンプレート内の文字列の最後の3つの文字を削除[:-3]
- 26. Symfony 3 - 複数の削除フォーム1つのレコードのみを削除します
- 27. レコードを追加してJavaでシーケンシャルファイルを自動ソートする方法は?
- 28. アレイから最後のアイテムを削除しない方法
- 29. Typo 3 Extension:BEのレコードを削除し、すべてのレコードを自動的に削除しますか?
- 30. 3つのタブしかない場合、uitabbarcontrollerから最後のタブを削除する方法
http://codeblog.jonskeet.uk/2010/08/29/writing-the-perfect-question/ – Oded
SELECT ... ORGANIZATION ISはxxxxですか?相対的な? –
しかし、いくつかのトリックがコンパイラとOSに依存します。両方を指定してください。 –