【COBOL 書き1-9-5】CSVはカンマ、スペース、固定長?〜気づき力

🧩今日の学び
・CSVはUNSTRINGで分解すれば扱えるが、実務では可読性や検証性の面で課題がある
・固定長で設計することで、処理はシンプルになりミスを減らすことができる
・COBOLは「できる方法」ではなく「壊れない設計」を優先する言語である

なるお)あれ?ちょっとまってくださいよ?

さっきまで、固定長がどうとか、うだうだ言ってたじゃないすか?

係長)うだうだってなんだよ!

な)だって、こういう形なら読み込めるっていってましたけど、

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

CSVは扱えるけど最適ではない

だったら、オレの完全栄養食.csvの形が、そもそもやっちゃいけない間違いってことっすか?干し芋二回食べてるのに?

naruo.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で分解する

📝 COBOL 参考コード
  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をするというところってことだ。

📝 COBOL 仮コード
DATA DIVISION.
FILE SECTION.

FD NARUO-FILE.
01 NARUO-RECORD.
📝 COBOL 仮コード
05 SALE-DATE   PIC X(10).
05 ITEM-NAME   PIC X(20).
05 AMOUNT      PIC 9(5).

おむすび

…しっかし、よく気がついたな。

な)そりゃオレの気づき力を舐めちゃいけないっすよ!

もういろんなこと気づきますよー。

今もう12時だなとか!気づきまくりですよ!

ってことでランチっすね!

係)まだ11時過ぎたばかりだっての!

な)いいじゃないっすかー1時間ぐらい。

超級国民たるもの、食事はゆっくり会話を楽しみながら食べるもんなんですよー

係)牛丼屋でどんな会話を楽しむ気なんだよ!

係長のワンポイント

CSVはそのまま読めないわけじゃない。
UNSTRINGを使えば分解できるが、それは“扱える”だけだ。
よくある誤解は「できるならそれでいい」だが、実務はそうじゃない。
可読性・検証・性能を考えると、固定長のほうが圧倒的に安定する。
その結果、処理はシンプルになり、ミスの入り込む余地も減る。
COBOLは“できる方法”ではなく、“壊れない設計”を選ぶ言語だ。

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

この記事を書いた人

コメント

コメントする

CAPTCHA