[掲示板に戻る]
Re: ファイルの各種情報をファイルに出... 温泉好きのうさぎ 2011-5-10 1:04 |
Re: ファイルの各種情報をファイルに出... ろろけい 2011-5-10 10:42 |
Re: ファイルの各種情報をファイルに出... ろろけい 2013-3-6 10:08 |
Re: ファイルの各種情報をファイルに出... TOM 2013-3-6 11:57 |
Re: ファイルの各種情報をファイルに出... ろろけい 2013-3-6 14:39 |
Re: ファイルの各種情報をファイルに出... TOM 2013-3-8 17:25 |
Re: ファイルの各種情報をファイルに出... ろろけい 2013-3-8 19:06 |
8 | Re: ファイルの各種情報をファイルに出力したい |
温泉好きのうさぎ 2011-5-10 1:04
[返信] [編集] 2バイトの2進数項目は、COMP-1 4バイトの2進数項目は、COMP-2 で定義します。 従って、レコード長やブロック長、キーブロック長、キー長、キー位置などはCOMP-1 アロケートサイズや二次アロケートサイズ、エクステントのアドレスはCOMP-2 となります。 お尋ねの有効レコード数は6バイトの2進数項目ですが、それを表現できるCOBOLの書き方はありません。 ただし、4バイトの2進数項目のとる値の範囲は約21億なので、常識的なデータ数を扱うのであれば前2バイトを無視するというのが最も手っ取り早いです。 正確に6バイトの2進数項目を表現しようとすれば、前2バイトをCOMP-1、後4バイトをCOMP-2と定義し、それぞれの値から計算することは可能ですが、マイナスの値となった場合は2の補数として換算しなければならず、少々複雑になります。 書き方としては、 01 FDF-REC. 02 FILLER PIC X(44). 02 RECCNT COMP-2. 02 FILLER PIC X(208). となります。 COMP-1項目およびCOMP-2項目にはPICTURE句を書きません。 |
|
9 | Re: ファイルの各種情報をファイルに出力したい |
ろろけい 2011-5-10 10:42
[返信] [編集] 温泉好きのうさぎさん とてもわかりやすい解説、ありがとうございます! 今までは、COMP-3しか使ったことがなかったのですが、 COMP-1、COMP-2の使い方がわかったので、とても嬉しいです! この解説をいただいた後に、改めてマニュアルを読んで、それで初めて、理解できました(^^; そして、「前2バイトをカットする」というテクニックも教えてくださり、ありがとうございます。 先ほど、テストプログラムで、数値を正しく読み取れることを確認しました。 今回もほんとうに助かりました。 ありがとうございました。 |
|
10 | Re: ファイルの各種情報をファイルに出力したい |
ろろけい 2013-3-6 10:08
[返信] [編集] なんと2年ぶりのろろけいです。 引き続き、SYS@FDFから情報を取得する件なのですが。 2年前は、とりあえず「有効レコード数」を得られればそれでよしとしていました。 ですが最近になって、#MAPで表示されるその他の項目も得られるとなおよいなと感じまして、 データ管理説明書から得られる情報をもとになんとか算出しようと試みたのですが、 残念ながら答えを導き出せずにいます。 下記の情報を得るのはどのようにすればよいか、ヒントを教えていただけると助かります。 USED RECORD COUNT : 15066 DELETED RECORD COUNT : 137 UNUSED RECORD COUNT : 14797 欲しいのは、この3項目(USEDは直接得られるのでその他の2項目)だけなのです。 ファイルの種類は、MIXのデータ部だけでOKです。 ファイル名がキーになっている「使用ファイルマスタ」みたいなものを用意して、 そこに、上記3項目を入れ込むプログラムを作れば、それを定期的にチェックすることで、 オーバーフロートラブルを防げるというわけです。 まぁ、上記3つを合計した「総レコード数」は、そうそう変動するものではないのだから、 「使用ファイルマスタ」にあらかじめ入れておけばいいだろ!ですし、 削除レコードだって、たとえば毎晩バッチで#MIXGNを実行しておけば、 そうそうたまることもないだろう!ではあるのですが…(^^; もしもSYS@FDFからこれらを得られるのであれば、それも知っておきたいなと思ったので、 質問させていただきました。 いかがでしょうか。 |
|
11 | Re: ファイルの各種情報をファイルに出力したい |
TOM 2013-3-6 11:57
[返信] [編集] SYS@FDF内の項目から「あと何件入るか」は計算できます。 例えば 順編成ファイルの時のSYS@FDFからは 1.ファイル編成=S 29バイト目 2.現在アロケートされている容量を計算する 217バイト目から257バイト目に第nエクステント終了、開始がありま す。この値はセクタ数かと思います。 3.レコード長とブロック長から2項のエクステント内に最大収容データ 件数を計算する。 4.有効レコード数 43バイト目を3項から減する。 結果が空いているレコード数が求められます。 5.MIXのデータ部も同じように求めることができます。 ただし、索引順編成場合は、3項にはキー部とデータ部が一緒に入っ ているため、ある程度のキー部容量を減してあげる必要があります。 昔々これらを計算し印刷するプログラムを作ったのですが、現時点で は所在が不明です。見付かればあげることが出来ますが。 |
|
12 | Re: ファイルの各種情報をファイルに出力したい |
ろろけい 2013-3-6 14:39
[返信] [編集] TOMさん 早速の返信ありがとうございます。 いただいた情報で計算してみたら、#MAPと同じ情報を得られました。 ありがとうございました。 ただ、ごめんなさい、この場合、削除レコードの数も「空き」側に入ってしまいますよね。 常時使われているファイルなので、あまり#MIXGNができない状態だったりするのです。 なので、削除レコードがたまってきたころに、タイミングを見計らって、 古いデータを削除したり#MIXGNを実行したりという運用なのです。 余談ですが、最近になってやっと、#AJOBCやA-VX自動運転管理ユーティリティの存在を知ったので、 先ほども述べたように、定期的に深夜にでも自動で#MIXGNを実行すれば、 削除レコードの心配はなくなりますよね。 なので、もはや「興味」の域に入ってしまっていますが。 #MAPで瞬時に削除レコード数が表示されるということは、その情報またはそれを導きだせる情報が、 SYS@FDF等のどこかに含まれているのかな?と思い投稿させていただいたというわけです。 |
|
13 | Re: ファイルの各種情報をファイルに出力したい |
TOM 2013-3-8 17:25
[返信] [編集] 削除レコード数が瞬時に出力される仕掛けは MISのデータを前提で 最終レコードアドレスが83バイト目にあります。データ部ですから、第1エクステント、第2エクステント・・と順番にデータはかかれます。 83バイト目には最終にデータを出力した位置を示しております。第1エクステントから最終にデータを出力した位置を計算すると、何レコードが作成されているかを知ることが出来ます。そこから有効レコード数を減算すれば、その差が削除レコード数となります。 |
|
14 | Re: ファイルの各種情報をファイルに出力したい |
ろろけい 2013-3-8 19:06
[返信] [編集] TOMさん なるほど! そういうことなのですね! よくわかりました! まだプログラムは組んでいませんが、光が見えてきました。 助かりました。 ありがとうございました! |
BluesBB ©Sting_Band