🧩今日の学び
・固定長データは自然に揃うものではなく、「埋める」「切る」という設計で作る
・データ本体と項目名は分離し、項目は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で定義するんだ。
つまり、データ本体とデータの説明を分けるという考え方だ。
な)ほへー
…えーと、こんな感じになるんすか?
2025-12-31 干し芋02500 2026-01-01 牛丼2つ00900 2026-01-01 カレー8人前01500 2026-01-02 牛丼2つ00900 2026-01-03 干し芋02500
係)逆だ。
な)逆?
係)スペースは後ろにいれるんだよ。
な)あ、そなのねっと…ってことはこう?
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はデータをそのまま扱うのではなく、扱える形に整えて使う言語だ。


コメント