🧩今日の学び
・CSVはそのままでは扱えず、FILE SECTIONで1行(レコード)の構造を定義する必要がある
・COBOLはカンマ区切りを理解せず、「位置(文字数)」でデータを切り出す
・READは文字列を読むのではなく、構造に基づいた項目データを取り出す命令である
なるお)ってことはですよ、「このファイルの中身はこういう形」っていう定義をするってことっすか?
係長)…ようやく話が伝わったか。「俺の苦労返せ」と言うかどうか迷ってたとこだ。
な)言ってるから!
FILE SECTIONは「ファイルの設計図」
係)そこを記述するのが、DATA DIVISIONのFILE SECTIONということになる。
な)ついに出てきましたね。犯沢さん。
係)何気に入ってんだよ。
な)最近コナンにハマってるんすよー。「犯人はいつもお前しかいない!」って。
係)指さすな。何が犯人だよ。
ま、「体は子ども、頭脳も子ども」だもんな、憧れるよな。
な)きぃぃ!
係)FILE SECTIONが書ければ、CSVもただの「箱」と言えるな。
な)ただの箱ってなんか雑っすね⋯
係)いいんだよ、最初はそれで。
ただし、その箱の中身は、ちゃんと決める必要があるんだよ。
な)出た、設計…
係)まずは、FILE SECTION
な)DATA DIVISIONの中のやつっすね。
係)そうだ。
係)ここで何をするかというと、「このファイルはこういう構造です」と宣言するってことだ。
な)いつも構造っすね。
はっ!でも、オレも構造、係長も構造と捉えると…
係)捉えると?
な)課長がこぼるん?
係)なんでだよ。
な)えーだって、課長って書類見て、うだうだ言って人を動かすだけじゃないすか。
オレが飲みに連れてかれるじゃないすか。飲み代高いんすよ!
係)知らねーよ!
ただまぁ、お前が構造だったら、課長というCOBOLは理解して使いやすくなるってのはわかるだろ?
例えば、お前が「仕事ができない」というのは一つの構造だ。
な)え!?
係)COBOLこと課長は、「だから重要な仕事はさせない」って判断ができるってことだ。
な)失礼すぎ!
係)それだけ構造が大事だって話だ。
な)例え話ですよね?
係)……次行くぞ。
な)「ただの例だ」って言って!
係)例えば、こうなる。
な)そうじゃなくて…
係)うるさいな。こういう書き方になるぞ。
DATA DIVISION. FILE SECTION. FD NARUO-FILE. 01 NARUO-RECORD.
ここで決めるのはCOBOL側の名前ということだ。
な)ふむぅ
係)それはどこだと思う?
な)えーと、FD NARUO-FILE.すか?
係)そうだ。FDがファイルの定義、File Descriptionで、「このファイルの説明」だな。
な)ふむふむ
1行(レコード)と項目を定義する
係)次の
01 NARUO-RECORD
これはなんだと思う?
な)えーと、レコードだから1行ってこと?
係)そう、レコード(1行)の定義だ。
そして、さっき分解した
日付:2025-12-31 商品:干し芋 金額:2500
これをそのまま変数として定義するぞ。
05 SALE-DATE PIC X(10). 05 ITEM-NAME PIC X(20). 05 AMOUNT PIC 9(5).
な)あ、これが項目?
係)そうだ。
つまり1行は
[日付][商品名][金額]
こうなったわけだ。
な)ほー
カンマ区切りやタブ区切りしておけば、それで自動的に読み取ってくれると?さすが我らがこぼるん。
CSVはそのままでは読めない
係)それは違う。
COBOLはCSVのカンマやスペースを理解しないぞ。
な)は?
係)だからこのままじゃ読めない。
な)え?いきなりのポンコツ展開?
係)CSVは「そのままでは扱えないデータ」ってことだ。
な)CSVの方がポンコツだったと…
COBOLは「位置」でデータを切る
係)使えないとは言ってないだろ。
そのままでは扱えないから、「位置」で切るんだよ。
な)位置…?
係)そう。何文字目から何文字目までという位置で区切るんだよ。
な)わがまま三昧!?
あ、すしざんまい行きません?
係)なんでこの展開ですしざんまいが出てくるんだよ!
文字数という位置で区切るために「固定長」で考えるんだ。
こういう形であれば、位置で区切れるだろう?
2025-12-31干し芋 2500 2026-01-01牛丼2つ 0900
な)1文字目から10文字目って数えてくれる感じ?
係)そういうことだ。
な)ひとーつ、ふたーつ、みっつー、1文字たりなーいって感じで?
係)番町皿屋敷にすんな!
な)最終的に、テレビから、もへーって出てくる感じってことっすね。
係)怨霊を混ぜ合わせんな!
いいか!そうすることで、レコードを読み込んでの処理が可能になる。
次は実際に読み込んでいくぞ。
おむすび
な)そういえば、爪の先にお経書いてなかったら、伸びた爪だけ切ってもってってくれるんすかね?
係)何の話なんだよ…
な)耳なし芳一ですよー。
ほら、床の上に切った爪が落ちて踏むと、むぎゃ!って痛いじゃないすか!
係)ちゃんと捨てればいいだけ…
な)そうだったら、便利っすよね!
係)もう呪われろよ。
な)え!?
係長のワンポイント
CSVはそのまま読めるデータじゃない。
COBOLでは、位置で区切られた構造に変換して初めて扱える。
よくある誤解は「カンマ区切りを自動で理解する」だが、それはしない。FILE SECTIONで1行の形を定義し、項目ごとに切り出す必要がある。
その結果、READは文字列ではなく“決められた位置のデータ”を取り出す。
COBOLは形式を読む言語ではなく、構造を決めてから読む言語だ。


コメント