[掲示板に戻る]
ファイルの各種情報をファイルに出力し... ろろけい 2011-4-28 12:15 |
Re: ファイルの各種情報をファイルに出... 回転の達人 2011-4-28 12:40 |
Re: ファイルの各種情報をファイルに出... ろろけい 2011-4-28 13:36 |
Re: ファイルの各種情報をファイルに出... 温泉好きのうさぎ 2011-4-28 22:29 |
Re: ファイルの各種情報をファイルに出... 回転の達人 2011-4-29 22:15 |
Re: ファイルの各種情報をファイルに出... ろろけい 2011-5-9 14:31 |
Re: ファイルの各種情報をファイルに出... ろろけい 2011-5-9 17:18 |
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 |
1 | ファイルの各種情報をファイルに出力したい |
ろろけい 2011-4-28 12:15
[返信] [編集] みなさま、いつもお世話になっております。 また質問させてください。 題名の通りなのですが、#MAPで下記のように指定して得られる情報を、 プリンタではなく、ファイルに出力することは可能でしょうか? ACTION; ACT=FILE VOLUME NAME; VOL= DEVICE; DEV=MSD000 OWNER NAME; NAM= PRINT DEVICE; PRD=PRN999 DETAIL PRINT MODE; DPM=NO COMPANY ID; CID= SELECT FILE NAME; FIL=! MAP MODE; MOD=FILE やりたいことは、オフコン上のファイル情報を、Excel等で管理したいのです。 何らかの形でシーケンシャルファイル等にできれば、#NFCNVでWindows側に持っていき、 あとはどうにでも料理できるので便利だな、と思っているのです。 または、COBOLのプログラミングでファイル情報を取得する方法があれば、 そっちのほうがさらに自由度があるので嬉しいのですけど、無理ですかね…。 どなたか参考情報をお持ちでしたら、ご紹介していただけると幸いです。 よろしくお願いいたします。 |
|
2 | Re: ファイルの各種情報をファイルに出力したい |
回転の達人 2011-4-28 12:40
[返信] [編集] 1. SYS@FDFをSEQファイル(256バイト)にコピーすれば、簡単に見れます。 但し、レイアウトは公開されてないでしょうから、ダンプファイルと#MAPリストを比較すればほぼ分かります。 元がISファイルなので、キー部分が最初あたりにありますが、その後、同じレイアウトになりますので、わかります。 ファイルIDでソートすれば、OKです。 2.コボルで参照するには、システムサブルーチンがありますが、これも一般にはリリースされてないので、使用できませんが、もっている販売店もあると思います。 余談ですが、弊社もCOBOL74の時のシステムサブルーチンは社内にあって、ずーと昔、更新プログラムで更新前にSYS@FDFを読んで、空き容量をチェックし、事前にオーバーフローするかどうかチェックした事があります。 |
|
3 | Re: ファイルの各種情報をファイルに出力したい |
ろろけい 2011-4-28 13:36
[返信] [編集] 回転の達人さん ありがとうございますー! こんなに早く返信があって嬉しいですし、 まさに欲しい情報でしたので、嬉しさ倍増です! そうでしたか。 ファイル情報はここに入っているのですね。 ただ、まずはレイアウトの解析が必要ですね。 それがうまくいけば、今後はとても楽になります。 システムサブルーチンも、非公開とは言え存在するのですね。 あると便利だろうなとは思いますが、入手できるかどうか。 とにかく、一歩前に進むことができました。 本当にありがとうございました。 |
|
4 | Re: ファイルの各種情報をファイルに出力したい |
温泉好きのうさぎ 2011-4-28 22:29
[返信] [編集] SYS@FDFのレイアウトは、「データ管理説明書」に詳しく書かれています。 第2章 ボリューム形式とラベル 2.1.3 ファイルディレクトリファイル を参照してください。 なお、SYS@FDFは索引順編成ファイルではなく、相対編成ファイルです。 ファイルの構造は、前半にあるファイル名をキーとしたキーレコードの部分と、後半にあるデータレコードの部分に分かれています。 FDFを参照するためのCOBOLのシステムサブルーチンは、説明書に記載が無いだけで、CU自体はSYS@CULに存在しているかもしれません。"SYS@5A" というメンバがあるかどうかさがしてみてください。 |
|
5 | Re: ファイルの各種情報をファイルに出力したい |
回転の達人 2011-4-29 22:15
[返信] [編集] 温泉好きのウサギ様、間違いを訂正してくれてありがとうございます。 昔の事を思い出して誤りを書いてしまいました。 |
|
6 | Re: ファイルの各種情報をファイルに出力したい |
ろろけい 2011-5-9 14:31
[返信] [編集] 温泉好きのうさぎさん、回転の達人さん 10連休をいただいていたことがバレバレな、遅い返事ですみません(^^; さらに詳しい情報、ありがとうございました。 マニュアル、確認しました。 実は、SYS@FDF(のコピー)の中身をみて、最初ぜんぜん見当がつかず、 その後、どうやら項目によっては16進数らしい、 というところまではわかってきたのですが、 その後どうしたものか、悩んでいました。 このマニュアルの存在を知ったことで、さらに一歩前進です! が、残念ながら、私のところのSYS@CULには、SYS@5Aは、ありませんでした(>_<)。 ですが、このマニュアルを元にレコードレイアウトを作れば、 なんとか思うような処理に持っていけそうな気がしてきました。 今回もまた、助かりました。 ありがとうございました! |
|
7 | Re: ファイルの各種情報をファイルに出力したい |
ろろけい 2011-5-9 17:18
[返信] [編集] すみません。 できると思ったけど、まだできてません…。 続けてお聞きしたいのですが。 16進で格納されている項目は、COBOLソース上、どう書けばよいのでしょうか? たとえばSYS@FDFの「有効レコード数」の項目。 43桁目から6バイトが 00 00 00 00 1D 3E となっている場合、このファイルを#MAPで見ると、10進で7486と表示されますよね。 これを、COBOLで実現させたいわけです。 仮にこの部分だけを取り出すためのレコードレイアウト(256バイト/Rec)を作るとして、 その場合、下記のような感じでよいかと思ったのですが、 アンダーバーの部分に書くべき数値やキーワードが、わからないのです。 FD FDF-FILE (中略) 01 FDF-REC. 02 FILLER PIC X(42). 02 RECCNT PIC 9(__) USAGE __________. 02 FILLER PIC X(208). そもそも、上記の考え方であっているのかどうかも、あまり自信がないのですが…(>_<) どうかもう少しお付き合いいただけると幸いです。 よろしくお願いいたします。 |
|
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