a.13. 2000年問題 其の拾参 |
なにから、話しましょうか。本当に、ここ2日間で、たくさんの事をしました。ギネスブックものですよ。いや、ほんと。昨日なんて、リモート先の物流の制御装置が朝から立ち上がらなくて、大変だったんですよ、もう。出荷=売上なのでね。 本当にすべてのDDSを修正したのかもちろん、2000年対象外のソースを一つ一つ見てゆけば、いいのだが、(実際、最初そうしていたのだが、)もういやになった。なにか方法は無いだろうか。早い話、ファイルの怪しい部分に気づくツールがあって、それが勝手に判断してくれれば、いいのだ。とにかく、
これが、踏み外せない、大事な一歩なのだ。これのために、いくつか、またツールを作成した。 レポータの自動生成あるファイルの、フィールドの桁を調べて、2,4,6,7,8のものを選び出し、H,F,C,O仕様書を自動生成するツールを作成した。自動生成も結構楽になってきたのだが、フィールド名を見出しに印刷したかったので、どうしても、フィールドの間が10バイトになる。すると、198にしても、一つのプリンターファイルでは、19個まで。さらに、一つのRPGでは、プリンターファイルは8個まで。フィールドを配列にセットして、その数を19で割、切り上げた数字で、F仕様書のプリンターファイルの定義が決まる(O仕様書の前に決めなくてはならない。ソースをキー付きにする手もあるが、SAV/RSTに時間がかかるらしいのでやめた)。さらに、OF標識も別個のものをつけた。(同じものをつけるとコンパイルエラーなので、OA,OB,OC,OD,OE,OF,OG,OV(以上8個)をつけた。01から99にすると、標識はオンにはなるが(当然)、オフは自分でしなくてはならないので、C仕様書の行数が増えるので、やめた。また、このオーバーフロー標識を一つにだけ定義したら、そのほかのプリンターファイルの動きが変になった。オーバーフロー標識をつけたものが、121ページなら、そのほかのプリンターファイルは242ページ(偶数ページが飛ぶ)になってしまった。いろいろいじくったが、うまく行く場合もあり、よく分からないので、すべてに、個別のオーバーフロー標識をつけた。こうすると、今までのおかしな動きがぴたりと無くなった。いままで、オーバーフロー標識を、はしょった、ことなど無かった。) O仕様書の桁位置だが、0010と記入して、10としなくても、コンパイルもきちんと通ることが分かったので、先行0消去はしなかった。編集APIで簡単に出来るが、しなくてもいいのなら、しなくてもいいのだ。(ちょっと出来るソースが汚いが)。 さて、自動生成された、RPGをコンパイルして実行すると、結構いい。QRYの様に、無用に編集コードがつかないのも、いい。むしろ見やすい。でも、データが多い。何でもかんでも、桁数が2,4,6,7,8のものは、数字だろうが、文字だろうが、出てくる。中には、一つのファイルだけで、数千頁出てくる。これが、100も200も(一つのファイルで3つプリンターファイル使っているものもある。)出てくるのだから、困る。これじゃあ、だめだ。 そして、昨晩、考えついた。DSPDみたいに、ファイルを読み込んで、フィールドを切り出し、限りなく、日付に近いものを、ファイルに出力したらどうか。 「限りなく」「日付」に近いもの
さらに、DSPOBJDのAPIを利用して、ライブラリー単位に物理ファイルを取り出し、上記のツールに投げるプログラムも作成した。APIのテンプレートが活躍した。ほんの15分くらいで出来た。 さて、思ったよりもうまくいった。おお、と思うようなフィールドも出てきた。いずれ、ソースもアップしようと思う。QRPGSRCのSRCDATも出てきた。しょうがない。 でも以下のことに気づいた。
「限りなく」は、日付と判定された数の全体からの割合で判断するあるフィールドを1000レコード分検索して、日付と思われるのが1000データあれば100%、500あれば、50%と扱う。あとは、人間の判断にする。これで、結構、税金などのフィールドが、年月とかと判定されるものが、偶然日付と同じだったか、それとも、限りなく100%に近く日付なのか、が判断できる。最終的に、判断するのは、やはり人間だが、前に比べて、ずっと楽になる。このレポートは「検索結果ファイル」を、QRYで出すが、フィールド単位にヒット件数と検索件数を入れてあるので、%計算も楽だ。また、かなり大きなファイルで、200万件のレコードをすべて検査するのは無駄なので、1000件を最小に、あとは1/3の件数検査にした。それも、10000件を越える場合は、10000件までとした。 日付判定の外部サブルーチンこれは、以前作った、日付移行プログラムとほとんど同じ。あまり同じなので、共有することにした。ただし、8バイトのパラメータではなく、20バイトになる。また、最初のものは、日付だけが入るものだったが、今度は日付以外も入るので、さらに、細かな検査が必要である。いづれ、またアップしようと思う。また、ここで、出てきたフィールドをもう一度検査するば、DDSの修正漏れはないと、信じている。しかし、先は長いなぁ。
※MYYとMDYは識別つかない。121998は12/19/1998とも12/1998ともとれる。でも、12/1998は無いだろう。 今頃、動いているんだろうなぁ。エラーで止まっているかな? 続く... |
You are at K's tips-n-kicks of AS/400
|
SEO | [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送 | ||