9桁文字列型日付を7桁数値型日付に変換するCOBOLソース例

平成の改元という時代において、いまだにCOBOLのメンテをしています。
お察しください。

今回は「H30. 1.15」→「4300115」「R 1. 5.20」→「5010520」
みたいなこと。
9桁文字列型「H30. 1.15」から7桁数値型「4300115」への変換です。

実際の処理の流れは、
9桁文字型和暦の文字列を先頭からチェックして、
数字相当文字がある場合にそれを変換し、
7桁文字型和暦へのセットを繰り返します。
項目の定義はこんな感じ。

01 WK-9WAREKI X(9).
01 WK-7WAREKI-GROUP.
03 WK-7WAREKIX X(7).
03 WK-7WAREKI9 REDEFINES WK-7WAREKIX 9(7).
01 XA 9(2).
01 XB 9(2).

セット済7桁文字型和暦をREDEFINESで再利用して
7桁数値型和暦を取得します。
では処理ソースへ。

PERFORM   VARYING   XA  FROM  1  BY  1  UNTIL  XA  > 9
   EVALUATE XA
       WHEN  1
           EVALUATE WK-9WAREKI (XA:1)
               WHEN  'M'
                   MOVE  1  TO  WK-7WAREKIX (XA:1)
               WHEN  'T'
                   MOVE  2  TO  WK-7WAREKIX (XA:1)
               WHEN  'S'
                   MOVE  3  TO  WK-7WAREKIX (XA:1)
               WHEN  'H'
                   MOVE  4  TO  WK-7WAREKIX (XA:1)
               WHEN  'R'
                   MOVE  5  TO  WK-7WAREKIX (XA:1)
           END-EVALUATE
       WHEN  2
       WHEN  3
           IF  WK-9WAREKI (XA:1) = SPACE
               MOVE  '0'  TO  WK-7WAREKIX (XA:1)
           ELSE
               MOVE  WK-9WAREKI (XA:1)  TO  WK-7WAREKIX (XA:1)
           END-IF
       WHEN  5
       WHEN  6
           MOVE  XA  TO  XB
           ADD  -1  TO  XB
           IF  WK-9WAREKI (XA:1) = SPACE
               MOVE  '0'  TO  WK-7WAREKIX (XB:1)
           ELSE
               MOVE  WK-9WAREKI (XA:1)  TO  WK-7WAREKIX (XB:1)
           END-IF
       WHEN  8
       WHEN  9
           MOVE  XA  TO  XB
           ADD  -2  TO  XB
           IF  WK-9WAREKI (XA:1) = SPACE
               MOVE  '0'  TO  WK-7WAREKIX (XB:1)
           ELSE
               MOVE  WK-9WAREKI (XA:1)  TO  WK-7WAREKIX (XB:1)
           END-IF
   END-EVALUATE
END-PERFORM.

以上の処理によって、
7桁文字列型 WK-7WAREKIX を再利用した、
7桁数値型WK-7WAREKI9 を得ます。

ポイントは以下。

・PERFORMで◯文字目を順々に進める。
・EVALUATEで◯文字目の処置を分岐させ、それぞれ記述する。
・1文字目は元号符号(MTSHR)なので、EVALUATEで分岐させ、
 対応する数字を7桁和暦へ送る。
・9桁和暦の先頭から2・3文字目は、
 7桁和暦2・3文字目へ送る。(XA→XA)
・9桁和暦の先頭から5・6文字目は、
 7桁和暦4・5文字目へ送る。(XA→XB)
・9桁和暦の先頭から8・9文字目は、
 7桁和暦6・7文字目へ送る。(XA→XB)
・空白は0で送る。以上です。

おつかれしたー。

この記事が気に入ったらサポートをしてみませんか?