【COBOL 書き1-9-4】CSVからを想定したレコードの読み込み方法〜混ぜるな危険

🧩今日の学び
・CSVはそのままでは扱えず、FILE SECTIONで1行(レコード)の構造を定義する必要がある
・COBOLはカンマ区切りを理解せず、「位置(文字数)」でデータを切り出す
READは文字列を読むのではなく、構造に基づいた項目データを取り出す命令である

なるお)ってことはですよ、「このファイルの中身はこういう形」っていう定義をするってことっすか?

係長)…ようやく話が伝わったか。「俺の苦労返せ」と言うかどうか迷ってたとこだ。

な)言ってるから!

FILE SECTIONは「ファイルの設計図」

係)そこを記述するのが、DATA DIVISIONFILE SECTIONということになる。

な)ついに出てきましたね。犯沢さん。

係)何気に入ってんだよ。

な)最近コナンにハマってるんすよー。「犯人はいつもお前しかいない!」って。

係)指さすな。何が犯人だよ。

ま、「体は子ども、頭脳も子ども」だもんな、憧れるよな。

な)きぃぃ!

係)FILE SECTIONが書ければ、CSVもただの「箱」と言えるな。

な)ただの箱ってなんか雑っすね⋯

係)いいんだよ、最初はそれで。

ただし、その箱の中身は、ちゃんと決める必要があるんだよ。

な)出た、設計…

係)まずは、FILE SECTION

な)DATA DIVISIONの中のやつっすね。

係)そうだ。

係)ここで何をするかというと、「このファイルはこういう構造です」と宣言するってことだ。

な)いつも構造っすね。

はっ!でも、オレも構造、係長も構造と捉えると…

係)捉えると?

な)課長がこぼるん?

係)なんでだよ。

な)えーだって、課長って書類見て、うだうだ言って人を動かすだけじゃないすか。

オレが飲みに連れてかれるじゃないすか。飲み代高いんすよ!

係)知らねーよ!

ただまぁ、お前が構造だったら、課長というCOBOLは理解して使いやすくなるってのはわかるだろ?

例えば、お前が「仕事ができない」というのは一つの構造だ。

な)え!?

係)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

これをそのまま変数として定義するぞ。

📝 COBOL 仮コード
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は形式を読む言語ではなく、構造を決めてから読む言語だ。

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

この記事を書いた人

コメント

コメントする

CAPTCHA