【COBOL 書き1-9-6】固定長を深堀る〜上げる編

🧩今日の学び
・固定長データは自然に揃うものではなく、「埋める」「切る」という設計で作る
・データ本体と項目名は分離し、項目はDATA DIVISIONで定義する
・COBOLはデータをそのまま扱うのではなく、「扱える形に整える」ことを前提とした言語

なるお)固定長、固定長ってうるさいのはわかったんですけど、CSVとは違うんすよね?それってどこでどう作るんすか?.koteichoとかファイル名にするんすか?

はっ!

まさか、石板に雷が落ちて十戒チックに字が刻まれる!?

係長)んなわけねーだろ!

どうゆうことなんだよ、十戒チックって…お前が雷に打たれて刻まれて来いよ!

な)なんつー脅迫!

係)お前が言ったんだろ!

固定長は「自然にできるもの」ではない

当たり前だが、固定長は「自然にできるもの」じゃないぞ。作るんだよ。

な)いや、なに当たり前のこと言ってんすか!?係長はもうあの人は今なんですね…

係)勝手に過去の人扱いすんな!

な)えー

係)なんで「えー」なんだよ…

いいか、お前のCSVのデータ。

💡 ポイント
2025-12-31,干し芋,2500
2026-01-01,牛丼2つ,900

これをそのまま読み込ませること自体はできるが、カンマで切るようなコードを書かないといけないわけだ。

な)ふむに

係)だから「形を揃えること」で使えるようにするんだ。

固定長は「埋める」ことで成立する

金額のところは0で埋める、その他はスペースで埋める。

💡 ポイント
2025-12-31干し芋      02500
2026-01-01牛丼2つ    00900

つまり、

💡 ポイント
日付   :10文字
商品名  :20文字
金額   :5文字

というように最初から文字数を固定にしたというわけだ。

な)埋めるのは、金額のところは、0の方が見やすいから0なわけ?

係)その考えでいいな。

な)ふむふむ

係)そして、決めた文字数に合わせてスペースや0で埋めるということだ。

文字列ならスペース、金額なら0で埋めると。

な)ほー、でも決めた文字数より短いのは対応できるとして、長かったらどうするんす?

お宅がくれた長さでは入らないじゃないの!?切れちゃうじゃないの!?どう責任取るんじゃい!責任者、社長呼んでこい!

って、カスハラで捕まる感じっすか?もう前科積むの止めたほうがいいですよ?

係)なんで何度も逮捕されてるんだよ!

長いデータは「切る」という設計が必要

係)長い場合は切るんだよ。

な)え!?

係)入らないんだから切るしか無いだろ?

な)そんな…スーツケースに入らないからって死体損壊しないで!

係)してねーよ!!

想定より長いデータはどうするかっていう設計が大事だって話だ!

な)あ、そゆこと。

なんか日常マーダーのおもしろい話なのかと。

係)日常マーダーってなんだよ…

な)って、どうやって作るんすかって話ですよ!

趣味マーダーの話はここまでで良いんですよ!

係)お前な…

いいか、方法は3つだ。

固定長データの作り方は3つある

方法①:手で作る

係)テキストエディタなどでスペース調整をする。

な)ふむ…めんどくさいっと…

方法②:Excelで整形

係)列幅を固定して出力し整形

な)ふむ…めんどくさいっと…

方法③:プログラムで変換

係)CSVを固定長に変換だ

これは前回のコードだな。

な)ふむ…やりたくないっと…

係)全部やりたくないんだろ!

いいからやってみろ!

な)あい…

とりあえずこれに合わせて作り直しますよー

💡 ポイント
日付   :10文字
商品名  :20文字
金額   :5文字

ん…と…項目(日付・商品名・単価)のところもスペース入れて文字数あわせるんすか?

データと項目名は分けて考える

係)項目名の「日付・商品名・単価」は見出しだからな、人間が見るためのものなので、固定長にする対象は基本的にデータ本体だけだ。

COBOLに読ませるなら、項目名を入れないというのが基本路線だ。

な)え?なんでですの?

係)1行目も普通のデータとして読もうとするからだ。

な)あー融通利かない君の本領発揮ですね⋯

係)金額のところに「単価」が入ることになるしな。

な)あらー

…ってことは、項目はどっかに書くわけっすか?

係)そうだ。

COBOLでは、項目名はデータの中に書くんじゃなく、DATA DIVISIONで定義するんだ。

つまり、データ本体とデータの説明を分けるという考え方だ。

な)ほへー

…えーと、こんな感じになるんすか?

📝 COBOL 間違い固定長
2025-12-31              干し芋02500
2026-01-01            牛丼2つ00900
2026-01-01        カレー8人前01500
2026-01-02            牛丼2つ00900
2026-01-03              干し芋02500

係)逆だ。

な)逆?

係)スペースは後ろにいれるんだよ。

な)あ、そなのねっと…ってことはこう?

📝 COBOL 正解固定長
2025-12-31干し芋              02500
2026-01-01牛丼2つ            00900
2026-01-01カレー8人前        01500
2026-01-02牛丼2つ            00900
2026-01-03干し芋              02500

係)…ま、いいだろう。

おむすび

な)おーさすが!

係)ま、喜んでいればいいさ。

な)なに、その含みのある言い方…

係)よし、それでは実際にお前の作ったデータを読み込んでいくぞ。

見た目は綺麗に揃ってるからな。

な)やな感じ!?

(次へ続く)

係長のワンポイント

固定長はデータの性質じゃない、人間が決めて作る設計だ。
短いものは埋め、長いものは切ることで形を揃える。
よくある誤解は「そのまま揃う」だが、実際は必ず加工が必要になる。
そして項目名はデータに含めず、定義として別に持つ。
その結果、READは位置で正確にデータを切り出せる。
COBOLはデータをそのまま扱うのではなく、扱える形に整えて使う言語だ。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

CAPTCHA