🧩今日の学び
・UNSTRINGとDELIMITED BY ALL “,” でCSVの1行を正確に分割できることを理解。
・連続カンマ=空欄をどう扱うかを、係長の辛口ツッコミでしっかり腹落ち。
・次回は「UNSTRING後のデータの扱い方」へ踏み込み、CSV処理の本丸に近づく。
今日のコード
UNSTRING IN-REC DELIMITED BY ALL ","
INTO F-ORDER-DATE-A
F-ORDER-ID-A
F-BUYER-A
F-SKU-A
F-QUANTITY-A
F-UNIT-PRICE-A
F-TAX-RATE-A
F-COUNTRY-A
END-UNSTRING.
UNSTRINGって何もの?最初の壁を突破する
UNSTRING IN-REC DELIMITED BY ALL ","
う…ん…UNSTRING?DELIMITED??INTO???
そうね、そうだよね。だよね。あれだよね。
変数がならんでるから、多分変数になにかを入れるんだよ。”,” これ?
変数に入れるの?全部ALL?
All for One?全ては俺のために?すべての愛はお前のために?ストーカーっすか?
係)お前、愛とか恋とかから遠い存在なのに、愛とかよく言えるな。
な)失礼な!恋愛ハラっすか!?ハラスメントビジネスに新しい枠作られますよ!?
係)でも、ま、だんだんCOBOL語を理解してきてるんだな。
な)へ!?なんでいきなりデレるとか!好きになっちゃうパターンですって!
そこら辺に転がってるようなラノベになっちゃいますって!
CSVを切り分ける:DELIMITED BY ALL の本当の意味
係)ここは CSV1行をカンマで分解して、変数に入れる処理 だ。
な)(やっぱり無視…)
UNSTRING
係)「文字列を切り分けろ」というCOBOLの命令。
Pythonでいう split(“,”) みたいなもんだ。
IN-REC
さっき READ INFILE で読んできた、512文字の「1行分の生データ」。
CSVの1行そのまんまだな。
DELIMITED BY ALL “,”
「区切り文字はカンマ。連続するカンマがあっても全部区切りと見なせ」って意味で、ALL があるから、,,, って続いても空欄扱いで分割してくれる。
INTO F-ORDER-DATE-A …
「分割して得られた1つめをF-ORDER-DATE-A、2つめをF-ORDER-ID-A…に順番に突っ込め」って指定。
な)カンマなんてどこにあるんです?
係)CSVの生データ(IN-REC)の中に「,(カンマ)」が並んでるんだよ。
注文日, 注文番号, バイヤー名, SKU, 数量, 単価, 税率, 国コード …って感じでな。
例えば IN-REC にこんなのが入ってるとする
2025-09-30,ORD12345,John Doe,SKU-999,2,199.99,0.1,JP
これを UNSTRING … DELIMITED BY ALL “,” で切ると…
- F-ORDER-DATE-A = “2025-09-30”
- F-ORDER-ID-A = “ORD12345”
- F-BUYER-A = “John Doe”
- F-SKU-A = “SKU-999”
- F-QUANTITY-A = “2”
- F-UNIT-PRICE-A = “199.99”
- F-TAX-RATE-A = “0.1”
- F-COUNTRY-A = “JP”
ってな感じで変数に入ってくるってわけだ
な)あーデータの中にカンマが入っていて、そのカンマまでをF-ORDER-DATE-A、次のカンマまでをF-ORDER-ID-Aに入れていけってことっすか。
ソースコードの中に「,」がいっぱい並んでるのかと。
係長のことだから、そんな嫌がらせがくるのかなと。
係)お前さ…コードがカンマで埋まってたら、誰も読めねーだろ。
CSV読んでるからカンマで区切ってんだよ。
な)そー言えば、CSVってカンマ区切りで決まりじゃないですよね?
係)まぁカンマが「事実上の標準」だな。
CSV = Comma-Separated Values の略だしな。
名前からして「カンマで区切る値」ってことだ。
ただなー、世の中はひねくれ者ばっかだから、
- アメリカ → カンマ区切りが普通
- ヨーロッパ → 小数点にカンマを使うから、区切りはセミコロン ; にしたりする
- Excel → 区切り文字は「その国のロケール(言語設定)」次第で、カンマだったりタブだったり
な)え、Excel のやつ、国ごとに区切り変わるんすか!?アメリケーヌのくせに!?
係)くせに言うな。
だから「CSVなんだからカンマだろ!」って思い込むと、海外のデータでズッコケる。
COBOL の DELIMITED BY ALL “,” ってのは、さっきも言ったとおり「カンマが1個でも2個でも3個でも、連続してるカンマをまとめて区切りとみなせ」って指定だ。
空欄はどう読む?連続カンマと人生の話
な)連続したカンマ?
データで連続したカンマとかそこに情報なさすぎってことっすよね?悲しい人生じゃないっすか?もっと激動な人生にしてあげてくださいよ!
「俺は58年前に生まれたが、気づいたら俺はもう寿命だった。」とか目も当てられないですよ。何もしてないっすよ?
あ、58歳だからって係長のことじゃないっすよ。目も当てられない人生じゃないっすよ?まだまだいけますって!!
係)そもそも、なんで俺が死にそうになってんだよ。お前のほうが健康診断の結果わるいだろ。
だから、いいんだよそんなことは。
例えばデータがこうだったとする。
2025-09-30,,Alice,,3,120.00,0.1,JP
空欄のとこはカンマが続くわけだ。
ここで DELIMITED BY “,” になると、例えば「,,」とか「,,,」が、ひとつのカンマと捉えてしまうから、空欄をうまく扱えなくなるってことだ。
おむすび
な)…愛が連続しても空欄になるんすね…。人生も愛も儚いですね…
係)今日ほんと愛愛うるせーな。振られたのか?まぁそうだろうな。それは仕方がない。やり直せ、やり直しても変わらんかもしれないが。まだ時間がある、死ぬまでやり直せるぞ!
な)うっさい…
係)お前の真似しただけだからな。
係長のワンポイント
“ALL” は「続く区切り文字をまとめて扱え」という指示だ。
CSV に ,, とか ,,, が出てきた時、
• ALL なし → カンマ1個分しか区切らず、空欄を見失う
• ALL あり → 連続したカンマを「空欄がある」と正しく認識する
要するに、
“ALL” は CSV の空欄(ブランク)を落とさないための安全装置。
これが入ってるかどうかで、後ろのデータが全部ズレる。
現場で一番やらかすポイントだから、ここだけは絶対に覚えとけ。

コメント