• ベストアンサー

[COBOL]日付比較 その2

http://oshiete1.goo.ne.jp/qa4201503.htmlと同様の質問です。 受付日と今日の日付を比較して1ヶ月経過したデータと振り分ける。  1ヶ月経過したものは、削除分のデータとしてディスクに保存  1ヶ月経過していないものは、保存分のデータとしてディスクに保存 ただし、入力データは、受付日(6桁)に書かれているのは6桁(例:080524) 本日の日付は、システム時間で8桁(例:20080824) 入力データに記載されている受付日は2000年以降のものしかないため、受付日の先頭に20を追加します。 なお、判定日の1ヶ月前年月はサブモジュールで実装しています。 振り分けの条件では、年月のみで比較します。 (例)  受付日 080629   →200806 ('20')を追加  判定日 20080806  →200808   また、Copy句ファイル(BSCP10A)には、  10 'XXX-KEY-KOMOKU'   15 'XXX'-RIYOU-YMD PIC X(06).   15 'XXX'-RIYOU-ZIKOKU PIC X(06).   と定義されています。 以下のように実装してみました。(抜粋) WORKING-STORAGE SECTION. 01 DATA-IN. COPY BS10A SUPPRESS PREPLACING =='XXX'==BY==BS10A==. 01 DATA-OUT1. COPY BS10A SUPPRESS PREPLACING =='XXX'==BY==BS10A==. 01 DATA-OUT2. COPY BS10A SUPPRESS PREPLACING =='XXX'==BY==BS10A==. 01 WORK-AREA. //ここに受付日を8桁にする方法を記述? 05 WK-DATA-RIYOBI. PROCEDURE DIVISION. *--<主処理>-- MOVE BS10A-RIYOU-YMD TO WK-DATA-RIYOBI. //以下に振り分け条件記述 6桁にした受付日と判定日の1ヶ月前年月を比較 入力データの受付日に20を追加して6桁にする方法を教えてください。どうか皆様のお力を貸してください。 お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • tetsu-k
  • ベストアンサー率46% (196/426)
回答No.5

#2様の方法のほかに REDEFINES を使用する方法もあります。 01 WORK-AREA. 05 FILLER PIC X(2) VALUE '20'. 05 WK-DATA-RIYOBI PIC X(6). 01 WORK-AREA-R REDEFINES WORK-AREA. 05 WK-DATA-RIYOBI-YM PIC X(6). 05 FILLER PIC X(2). MOVE BS10A-RIYOU-YMD OF DATA-IN TO WK-DATA-RIYOBI. このあと WK-DATA-RIYOBI-YM が年月部分になります。

その他の回答 (4)

回答No.4

#2です。失礼しました。 01 WORK-AREA. 05 FILLER PIC X(2) VALUE '20'. 05 WK-DATA-RIYOBI PIC X(6). MOVE BS10A-RIYOU-YMD TO WK-DATA-RIYOBI. 部分参照が可能なら、WORK-AREA(1:6)で参照すると、yyyymmの形式で得られます。

  • saburo0
  • ベストアンサー率35% (76/216)
回答No.3

#1です。 「MOVE '20' TO WK-DATA-RIYOBI(1:2).」の部分はコンパイルエラーにならなかったのですね? BS10A-RIYOU-YMDを複数定義されている為だと思います。 質問の内容を拝見致しますと、COPY句を3箇所使われていて、REPLACING =='XXX'==BY==BS10A==. も同一内容となっております。 DATA-IN以外のREPLACINGの変換後の文字列を「BS10B」「BS10C」のように修正して頂くか、 「MOVE BS10A-RIYOU-YMD OF DATA-IN TO WK-DATA-RIYOBI.」 のように、OF修飾を付けて頂くかのどちらかで対応出来ると思います。

回答No.2

01 WORK-AREA. 05 FILLER PIC X(2) VALUE '20'. 05 WK-DATA-RIYOBI PIC X(6). MOVE BS10A-RIYOU-YMD TO WK-DATA-RIYOBI. 以上で、WORK-AREAで参照すると、8桁の日付になります。

lovelace
質問者

補足

chukenkenkouさん、回答していただきありがとうございます。 8桁の日付にするのではなく、6桁にしたいのです。 (例 080729 → 200807) よろしくお願いします。

  • saburo0
  • ベストアンサー率35% (76/216)
回答No.1

入力データの受付年月日(YYMMDD)が「BS10A-RIYOU-YMD」、 変換後の受付年月(YYYYMM)が「WK-DATA-RIYOBI」という前提ですが、 MOVE '20' TO WK-DATA-RIYOBI(1:2). MOVE BS10A-RIYOU-YMD(1:4) TO WK-DATA-RIYOBI(3:4). ではいかがでしょうか。

lovelace
質問者

補足

saburo0さん、回答していただきありがとうございます。 追加で質問なのですが、TSOにて開発しています。 しかし、コンパイル(COBOLII)すると、 MOVE BS10A-RIYOU-YMD TO WK-DATA-RIYOBI. の部分で、「BS10A WAS NOT A UNIQUELY DEFINED NAME.」 というメッセージが出てしまいます。 これを解決するにはどうすればよいでしょうか?