🧩今日の学び
・CSVはUNSTRINGで分解すれば扱えるが、実務では可読性や検証性の面で課題がある
・固定長で設計することで、処理はシンプルになりミスを減らすことができる
・COBOLは「できる方法」ではなく「壊れない設計」を優先する言語である
なるお)あれ?ちょっとまってくださいよ?
さっきまで、固定長がどうとか、うだうだ言ってたじゃないすか?
係長)うだうだってなんだよ!
な)だって、こういう形なら読み込めるっていってましたけど、
2025-12-31干し芋 2500 2026-01-01牛丼2つ 0900
CSVは扱えるけど最適ではない
だったら、オレの完全栄養食.csvの形が、そもそもやっちゃいけない間違いってことっすか?干し芋二回食べてるのに?
日付,商品名,単価 2025-12-31,干し芋,2500 2026-01-01,牛丼2つ,900 2026-01-01,カレー8人前,1500 2026-01-02,牛丼2つ,900 2026-01-03,干し芋,2500
係)んー…
な)??
係)いや…、めんどくさいなと思ったから…だな。
な)はぁ!?
何言っちゃてんのこの人!仮にも上司の分際で!
係)仮にもってなんだよ!
別にできないわけじゃないが、その説明したところで、使わないなって。
となると、お前がやりたくないとか言い出すだろうなって思ったわけであってな…。
な)いや、そんなのわかんないじゃないすか!オレだってCOBOL学んでる身なんですからね!勝手にやらないって決めないでくださいよ!まったくもう失礼しちゃう!
係)すまん…お前がそんなにやる気になってるとは思わなかった。では、説明するぞ。
な)え!?
係)??
な)え…やるの?
係)なんでだよ?
な)だって、めんどくさいんでしょー!ややこしいんでしょー!じゃあやらなくてもいいじゃないっすか!
係)ここまでの話の流れは何だったんだよ!
な)えー
係)まったく…、お前のcsvを読み込む形にするなら、こうすることで読み込める。全部は書かないぞ。
カンマ区切りはUNSTRINGで分解する
1*> ENVIRONMENT DIVISIONとFILE SECTIONは省略 2DATA DIVISION. 3WORKING-STORAGE SECTION. 401 CSV-LINE PIC X(100). 501 DATE-FIELD PIC X(10). 601 ITEM-NAME PIC X(20). 701 PRICE-FIELD PIC 9(5). 801 DELIMITER PIC X VALUE ','. 9 10PROCEDURE DIVISION. 11 OPEN INPUT NARUO-FILE. 12 PERFORM UNTIL EOF 13 READ NARUO-FILE INTO CSV-LINE 14 AT END 15 SET EOF TO TRUE 16 NOT AT END 17 *> カンマで分割してそれぞれの変数に移す 18 UNSTRING CSV-LINE DELIMITED BY DELIMITER 19 INTO DATE-FIELD, ITEM-NAME, PRICE-FIELD 20 END-UNSTRING 21 DISPLAY "日付: " DATE-FIELD ", 商品: " ITEM-NAME ", 金額: " PRICE-FIELD 22 END-READ 23 END-PERFORM. 24 CLOSE NARUO-FILE. 25 STOP RUN.
な)なにこれ!?
係)これで、お前のデブ食.csvが使えるようになるってことだ。
な)ひど!
でも、残念でしたー!ファイル名が全角だから、読み込めませーん!
係)…・・・ほんとに可愛くないな!
な)こんなにカワイイのに!?
係)ほんと、うるさいからな。
できるけど、やらない理由がある
係)ただ、この方法だと、
可読性が低い:コードがごちゃごちゃして見づらい
データの検証が面倒:カンマの数が合ってないとエラーになる
柔軟性が低い:区切り文字や項目数が変わると修正が必要になる
パフォーマンス:固定長より不利になることがある
という問題がある。
な)めんどくさいだけじゃなかった!?
係)ま、めんどくさいってのもある。
ということは、ミスを起こす可能性が高いってことでもあるわけだ。
これは、今は考えなくて良い。さっき言ったとおり固定長で行け。
な)そっすね!止めましょ止めましょ!係長がやめようっていったんですからね!
係)その言い方!
固定長はシンプルで強い
ま、まぁ、COBOLは元々、パンチカード時代から続くレガシーを背負っているからこそ、固定長が最適化されているってところもあるし、固定長で読み込むのが一般的だからな。
そして、メリットとしてはこういうところになる。
処理がシンプル:READ一発で全データが取得できる
パフォーマンスが良い:UNSTRINGより高速
可読性が高い:コードがすっきりする
柔軟性が高い:データの検証がしやすい
な)ふむに。
レガシーを背負うって十字架背負うみたいでギルティ感ありますね。
係)ま、そう言えるところもあるな。
よし、では話を戻していくぞ。
今は宣言までしたところで、次はREADをするというところってことだ。
DATA DIVISION. FILE SECTION. FD NARUO-FILE. 01 NARUO-RECORD.
05 SALE-DATE PIC X(10). 05 ITEM-NAME PIC X(20). 05 AMOUNT PIC 9(5).
おむすび
…しっかし、よく気がついたな。
な)そりゃオレの気づき力を舐めちゃいけないっすよ!
もういろんなこと気づきますよー。
今もう12時だなとか!気づきまくりですよ!
ってことでランチっすね!
係)まだ11時過ぎたばかりだっての!
な)いいじゃないっすかー1時間ぐらい。
超級国民たるもの、食事はゆっくり会話を楽しみながら食べるもんなんですよー
係)牛丼屋でどんな会話を楽しむ気なんだよ!
係長のワンポイント
CSVはそのまま読めないわけじゃない。UNSTRINGを使えば分解できるが、それは“扱える”だけだ。
よくある誤解は「できるならそれでいい」だが、実務はそうじゃない。
可読性・検証・性能を考えると、固定長のほうが圧倒的に安定する。
その結果、処理はシンプルになり、ミスの入り込む余地も減る。
COBOLは“できる方法”ではなく、“壊れない設計”を選ぶ言語だ。


コメント