COBOLのFILE SECTIONとレコードレイアウトをやさしく解説!初心者にもわかるファイル処理の基本
生徒
「COBOLでファイルを読み込むときって、どうやってデータの形を決めるんですか?」
先生
「それにはFILE SECTIONと呼ばれる部分で、データのレコードレイアウトを定義します。」
生徒
「レコードレイアウトって、なにか図のようなものですか?」
先生
「その通りです!ファイルの中に並んでいるデータの“設計図”みたいなものですね。今からやさしく説明していきますよ!」
1. FILE SECTIONとは?
FILE SECTION(ファイルセクション)は、COBOLプログラムの中でファイルの中身をどのように取り扱うかを定義する場所です。
ファイルとは、パソコンの中に保存されているデータのことで、「名前・年齢・住所」などの情報が1行ずつ入っていることが多いです。
FILE SECTIONでは、その1行を「どういう項目でできているか」をCOBOLに教える必要があります。それをレコードレイアウトと呼びます。
2. レコードレイアウトとは?
レコードレイアウトとは、ファイルの1行の中にどんなデータが、どの位置に、どれくらいの長さで入っているかを決めた設計図です。
例えば、次のような1行のテキストがあるとします:
001たなか 020
このデータを分解すると:
- 最初の3文字:社員番号(001)
- 次の6文字:名前(たなか)
- 最後の3文字:年齢(020)
このように「何文字目から何文字分が何のデータか」を定義するのがレコードレイアウトです。
3. FILE SECTIONの基本的な書き方
実際にCOBOLでFILE SECTIONを書くと、以下のようになります。
FILE SECTION.
FD 社員ファイル.
01 社員レコード.
05 社員番号 PIC 9(3).
05 氏名 PIC X(6).
05 年齢 PIC 9(3).
それぞれの意味を説明します:
- FD:File Description(ファイルの説明)の略で、ファイル全体を定義する部分です。
- 01:レコード全体の名前を決めます。
- 05:そのレコードの中の項目(社員番号・氏名・年齢)を定義します。
- PIC(ピクチャ):データの種類と長さを表します。
9(3):数字を3桁X(6):文字を6文字
4. FDと01と05の違いと関係
このあたりが初心者にとって混乱しやすいポイントです。簡単にたとえてみましょう。
FDは、ファイルそのもの。たとえば「書類フォルダ」です。
01は、そのフォルダの中の1枚の書類=1レコード。
05は、その書類の中の個々の情報=社員番号や氏名や年齢などの項目です。
つまり:
- FD:ファイルの入り口(大きな箱)
- 01:その中の1枚分の情報
- 05:その1枚に書かれている情報の項目
5. PIC(ピクチャ)の基本
PICは「ピクチャ句」と呼ばれ、データが数字か文字か、どれくらいの長さかを指定します。
PIC 9(3):半角数字3桁(例:123)PIC X(6):任意の文字6文字(例:たなか )
COBOLでは、スペースも文字としてカウントします。なので名前が5文字で、スペース1つを入れて6文字にするといった調整が必要です。
6. 空白やゼロで埋まるってどういうこと?
ファイルの中のデータが決まった文字数より短い場合、残りは自動的にスペース(空白)やゼロで埋められます。
たとえば、PIC 9(3)に5という数字を入れた場合、「005」となって保存されます。
このように、COBOLでは「文字数」がとても大切なので、正しくレイアウトを決める必要があります。
7. レコードレイアウトはなぜ必要?
ファイルの中のデータを正しく読み取ったり書き込んだりするには、「どこに何があるか」をプログラムが理解していないといけません。
レコードレイアウトを作ることで、COBOLが「ここには社員番号がある」「ここには名前がある」と判断できるようになります。
設計図がなければ、プログラムはどこから読み取ればいいかわからず、間違ったデータを表示したり、エラーになります。
8. 実行時にどう使うの?
このFILE SECTIONで定義したレコードは、実行時にREAD命令などでファイルから読み込まれ、社員レコードに自動的にデータが入ります。
その中の社員番号や氏名の部分を使って表示したり、計算したりすることができます。
9. よくある初歩的なミスと注意点
- スペースの数が合っていない → 読み取る位置がズレる
- PICの長さとファイルの実際の長さが合わない → データが切れる
- 日本語の全角・半角の混在 → X(6) には全角3文字分しか入らない
とくに全角と半角の混ざりは初心者がつまずきやすいので、最初は半角英数字で練習するのがオススメです。
10. FILE SECTIONとCOBOLファイル処理の基本用語まとめ
- FILE SECTION:ファイルの中のデータの形(レイアウト)を決める部分
- FD:ファイル全体の情報(File Description)
- 01:レコード全体の名前
- 05:レコードの中の各項目
- PIC:データの形式(数字・文字など)と長さを決める
- レコードレイアウト:ファイル1行の中身をどう区切るかの設計図
まとめ
COBOLでファイルを扱うときに欠かせないFILESECTIONやレコードレイアウトについてすこしずつ学んできたけれど、あらためて振り返ってみると、この仕組みがいかにしっかりと整理されていて、複雑な処理をわかりやすく表現できるようになっているのかがよく見えてくるようになる。とくにCOBOLでは、ファイルの中の各項目がきちんと決まった長さで並んでいるという前提があるため、その構造を理解することがとても大切になる。文字の区切り幅がほんの少しずれただけでもデータを正しく読み出せなくなるため、FILESECTIONで定義するレコードレイアウトは、まさに設計図そのものとして動作の基盤を支える役割を果たしている。こうした設計図を正確に作ることで、社員番号や氏名や年齢といった情報がどの位置に存在するのかを確実に捉えることができ、プログラム全体が安定して動作するようになるのである。 またCOBOLでは、FDを使ってファイルそのものの入り口を定義し、さらに01でレコード全体の形を決め、その内部で05を使って個々の項目を指定するという階層構造によって、複雑なデータの構成をわかりやすく整理している。この階層があるおかげで、プログラムを読む側も、どこにどの情報があるのかを自然に理解できるようになっている。さらにPICを使えば、数字なのか文字なのか、どれくらいの長さなのかを細かく決められるため、意図しないデータが入ってしまうことを防いだり、処理の流れをわかりやすくしたりすることもできる。とくに数字の場合はゼロ埋め、文字の場合はスペース埋めが行われるため、レコードの長さが常に一定であることが保証され、ファイル処理全体の安定性につながっている。 こうした特徴は、たとえば固定長ファイルを扱う企業向けの基幹システムなどでとても役に立つ。読み取る位置がずれてしまうと業務に支障が出てしまうような場面では、レコードレイアウトの正確さが欠かせない。とくに全角と半角が混ざると文字数が思ったようにならないことが多いため、最初は半角で練習してから徐々に複雑なデータに移っていくと理解しやすくなる。また実際にプログラムを書きながら、自分でレコードの構造を作り、そのレイアウトに従ってデータを読み書きしてみると、その重要性がより深く実感できるようになる。 下記のようなFILESECTIONのサンプルを眺めながら、それぞれの項目がどのように並んでいるのかを具体的に理解していくと、全体像がさらに見えやすくなるはずだ。
サンプルプログラム
FILE SECTION.
FD 取引ファイル.
01 取引レコード.
05 取引番号 PIC 9(5).
05 顧客名 PIC X(10).
05 金額 PIC 9(7).
05 状態コード PIC X(2).
このように番号や名前や状態といった情報がきちんと並んでいることで、COBOLのREAD命令によってデータが取引レコードに取り込まれたとき、プログラムはその区切りを正確に理解することができる。もし金額の桁数がずれていたり、顧客名が全角と半角で混在していたら、読み取り結果が崩れてしまうこともあるため、レイアウト設計の重要性は非常に高い。とくに実務では、他システムから送られてくる固定長ファイルの形式を厳密に守りながら処理する必要があるため、レコードレイアウトを正確に定義できるスキルは必須といえる。 FILESECTIONやFDやPICといった要素は初心者にとっては少し難しく感じられるかもしれないが、構造が理解できるとCOBOLがとても論理的に整理された言語であることがわかるようになる。数字を扱うならPIC9、文字を扱うならPICX、その長さを指定し、項目を階層的にまとめるという基本形さえ理解すれば、どんなファイルでも同じようにレイアウトできるようになる。ファイル処理の基礎をしっかりと押さえておけば、後から検索処理や集計処理を作るときにも役立つため、今回の内容はCOBOL学習の中でも特に重要な部分といえる。
生徒「今日の内容を振り返ってみると、レコードレイアウトがほんとうに設計図みたいな役割なんだってよくわかりました。」
先生「その通りです。レコードの枠組みを理解できると、ファイルから読み込むデータの意味が自然に理解できるようになりますよ。」
生徒「PICの数字や文字の指定って最初はむずかしいと思っていたけど、決まりを覚えれば意外とシンプルですね。」
先生「慣れるととても使いやすいですよ。特に固定長のファイルではPICの指定が命綱になるので、しっかり覚えておくと後で苦労しません。」
生徒「FDや01や05が階層になっている理由も、整理して考えると理解しやすかったです。」
先生「階層構造を使うことで、データのまとまりを視覚的にも理解できるようになっています。とても理にかなった仕組みなんですよ。」
生徒「ファイル処理がもっと身近に感じられるようになりました!これなら他のファイルでも応用できそうです。」
先生「今日の理解を大切にして、ぜひ次のステップも楽しんで学んでいきましょう。」