プロが教える店舗&オフィスのセキュリティ対策術

現在COBOLで以下のようなプログラムを作成しています。

受付日と今日の日付を比較して1ヶ月経過したデータと振り分ける。
 1ヶ月経過したものは、削除分のデータとしてディスクに保存
 1ヶ月経過していないものは、保存分のデータとしてディスクに保存

ただし、入力データは、受付日(6桁)に書かれているのは6桁(例:080524)
本日の日付は、システム時間で8桁(例:20080824)

このままでは、桁数が違うので、比較することができないため、受付日を8桁にしたいと考えています。
つまり、「'20'+受付日」としたいのです。

この場合、どのようにすればよろしいのでしょうか?
よろしくお願いします。

A 回答 (2件)

COBOLといっても何COBOLなのかな?


ずいぶん離れて久しいので間違ってたらすみません。


REDEFINESを利用して以下のように宣言。

01 X8DATE.
   03 WK-PUNIPUNI   PIC  X(08).

01 X8DATE-R REDEFINES X8DATE. 
   03 YY20   PIC  X(02).
   03 X6DATE   PIC  X(06).

【使い方】
初回のみYY20に '20'を放り込む。
以降、X6DATEに '080524'を放り込んでからX8DATEを参照すると '20080524'に見えます。

この回答への補足

bin-chanさん、回答ありがとうございます。

使用しているのは、COBOLIIです。

補足日時:2008/07/24 21:39
    • good
    • 0

ANo1と殆ど変わらないのですが・・・


01 WK-DATE.
   03 X8DATE   PIC  X(08).
  03 X8DATE-R REDEFINES X8DATE. 
     05 YY20  PIC  X(02).
     05 X6DATE
       07 X6YY PIC  X(02).
       07 X6MMDD PIC X(04).
・・・・・
     IF X6YY > '60'
MOVE '19' TO X6YY
ELSE '20' TO X6YY
ENDIF.
或いは。
01 WK-DATE.
   03 X8DATE   PIC  9(08).
  03 X8DATE-R REDEFINES X8DATE. 
     05 YY20  PIC  9(02).
     05 X6DATE
       07 X6YY PIC  9(02).
       07 X6MMDD PIC 9(04).
・・・・・
     IF X6YY > 60
MOVE 19 TO X6YY
ELSE 20 TO X6YY
ENDIF.

 データが2000年以降と決まっているならば、
01 WK-DATE.
   03 X8DATE   PIC  9(08).
  03 X8DATE-R REDEFINES X8DATE. 
     05 YY20  PIC  9(02) VALUE 20.
     05 X6DATER PIC 9(6) VALUE ZERO.
・・・・
 MOVE 元の6桁日付 TO X6DATE.
(比較はX8DATEとシステム日付の一カ月前と比較する)
(WK-DATEを他用せないのならばこれだけで良い)

等など色々考えられます。
 

この回答への補足

LN-TFさん、回答ありがとうございます。
補足させていただきます。

・判定するのは、年月のみ
・現在年月の1ヶ月前の年月を別のエリアで計算する
・受付年月は、

  01 WORK-AREA.
   05 WK-UKETUKEBI
     10 WK-UKETUKE-YM PIC X(04).
     10 FILLER PIC X(02).
  01 DATE-AREA.
   05 SISUTEMU-DATE.
     10 SISUTEMU-NENGETU PIC X(06).
     10 FILLER PIC X(02).

です。

補足日時:2008/07/28 21:39
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!