今日のコード
INIT.
MOVE FUNCTION CURRENT-DATE TO CD-RAW.
*> YYYYMMDDHHMMSS+TZ など21桁想定
MOVE CD-RAW(1:4) TO CD-YYYY
MOVE CD-RAW(5:2) TO CD-MM
MOVE CD-RAW(7:2) TO CD-DD
MOVE CD-RAW(9:2) TO CD-HH
MOVE CD-RAW(11:2) TO CD-MN
MOVE CD-RAW(13:2) TO CD-SS
INIT ― ここから始まる物語
なるお)いきなりわからん。なめてんのかこれ!
むー INITはラベルだっけ?
係長)お、いいところに気づいたな。
そのとおり、INIT. はラベル(段落名)だ。
COBOL ではラベルの後ろに 「. 」を付けて「ここから始まる手続きのまとまりですよ」って宣言してる。
以前のここのコード
MAIN.
PERFORM INIT
PERFORM PROCESS-LOOP
PERFORM FINISH
STOP RUN.
この中に「PERFORM INIT」があるが、プログラムは「INIT. ってラベルのついたとこまで飛んで処理してこい」ってなる。
つまり「名前付きの処理ブロック」って理解でOKだ。
な)それはいいんすけど、
MOVE FUNCTION CURRENT-DATE TO CD-RAW.
MOVE は動く?何が?誰が?私とあなたが夢の国?
主語なさすぎじゃないっすか?
俺は論理的な話をするためにこの会社に入ったのに。その望みすら叶えられないなんて!
係) 「MOVE X TO Y」=「XをYに入れる」 だ。
MOVE FUNCTION CURRENT-DATE TO CD-RAW
これは「システム日付を CD-RAW に入れろ」って意味。
FUNCTION CURRENT-DATE ってのは COBOLに最初から用意されてる組み込み関数で、「今のシステム日時」を文字列として返してくれるんだ。
な)いや、望み…
係)それがこのコメント部分になる
YYYYMMDDHHMMSS+TZ
年月日時分秒で、TZがタイムゾーンだ。
な)男闘呼組っすか?
係)あん?(ギロリ)
な)そんなに睨まなくても…
21桁の真実と男闘呼組の呪い
ゴホン
では、コメントの21桁想定ってなんですか。
システムが返してくれるなら、一定値になるのでは?
嘘つきたぬきがまた山から降りてきました?
係)だから俺のこと言ってんじゃねーだろうな。
COBOLの処理系(メーカーやバージョン)ごとに、FUNCTION CURRENT-DATE が返す文字列の中身がちょっと違うんだよ。
例えば、こうだな
20250926094530+0900
+0900 は日本のタイムゾーンな。
別のだとこう。
20250926094530.123+0900
ミリ秒やマイクロ秒がついているパターンとかあって、桁数が変わるって話。
だからこのゆらぎを考えて21桁想定しておけば大丈夫だろうというところだ。
な)へー
MOVE CD-RAW(1:4) TO CD-YYYY
次のこれはワンダフルコードですけど、なんですこれ。
MOVE で TO なのはわかったけど、1:4とか新たなる挑戦を受けてる感じがします。
係長ぐらいだと、道場破りとか行ってたんですか?
係)また余計なことを…
CD-RAW (1:4) ってのはな、「CD-RAW の 1文字目から4文字分」 って意味だ。
要は「部分切り出し」
MOVE CD-RAW(1:4) TO CD-YYYY
って書いたら、
CD-RAW の先頭4文字(例: “2025”)を CD-YYYY にコピーする。
な)おおー!じゃあ (5:2) は?
係)「5文字目から2文字分」だ。
つまり “MM” のとこだけ抜き出して CD-MM に入れてる。
おむすび
な)ま、実は、わかってましたけどね!
できる部下としては、係長のメンツを保たないといけないから、全然わかんなーい、みたいなふりしてましたけどね!
係)じゃ、もうお前のこと無視していいんだよな。
さっさと一人で外回りいって、調整してこいよ。
な)いやぁ!怒らないでー!!かわいい部下演じますからー!!
係)演じてんじゃねーよ!

コメント