今、西暦2000年問題で、プログラムを修正したり、実行テストをしていますが、場合によって、他の人が作成したプログラムも実行したりします。そのとき、気が付いたのが、これです。本当は、予備校で、紹介したのですが、私も、やっている部分がありました。つまり...
すべて値が0だったら、スペースにしたい場合、やり方としては、大抵、
値が0かどうか判定して、0の場合にオンになる(オフになる)標識を使って表示または印刷を抑制する
編集語で、'__/__/__'(ローアースコア[ _ ]は、空白の意味)としてしまう
のどちらかを使っていませんか?
このとき、編集語のパターンだと、2000年の時に、問題になります。
このような、ファイルを作成してみます。
つまり、編集語の比較をしようと言うわけです。で、DFUで入力してみます。3レコード入力しました。尚、A1YM1、A1YM2は西暦2桁の年月、A1YYM1,A1YYM2は西暦4桁の年月です。後はおわかりでしょう。
1レコード目:すべて、値は0にする。
2レコード目:2000年を想定した値。
3レコード目:1998年を想定した値。
これを、QRYで表示してみました。
まずは、ゼロサプレスを、1桁目まで、指定した場合。最初の0が出ないものの、セミコロン、ハイフンやスラッシュは表示されていますよね。そのかわり、値が0の場合も、表示されてしまっています。↓
次に、0は全く表示しない場合。よく見て下さい。↓
1レコード目は、思惑通り、スペースになっていますよね。でも、00:00:01がただ1と出て、00/01/01が
1/01としか出ていません。00/01は1としか出ていませんね。スラッシュや、ハイフン、セミコロンは、消えてしまうのです。値は皆正しいのですが、最後にユーザーに表示する部分が、これでは、データが間違っていると、思われてしまいます。
システム日付を2000年にしたり、2000年のデータを入力して、結構、多いことに気づきました。本来は、Y2Kコーナーに入れるべきかもしれないのですが、あえて、ここに入れました。00/00/00をスペースにする場合は、なるべく、比較+抑制の方法を取りましょう。