COBOLの帳票出力を徹底解説!LINE SEQUENTIALファイルで報告書作成
生徒
「COBOLで計算した結果を、画面に表示するだけでなく、メモ帳などのテキストファイルに保存して印刷できるようにしたいです!」
先生
「それには『LINE SEQUENTIAL(ライン・シーケンシャル)』という書き出し方を使うのが一番ですよ。」
生徒
「ライン・シーケンシャル……少し難しそうな名前ですね。普通のファイル保存と何が違うんですか?」
先生
「実は私たちが普段使っているテキストファイルと同じ形式のことなんです。一列ずつ順番に書き込んでいく、帳票作成の基本になります。実際のプログラム例を見ながら学んでいきましょう!」
1. LINE SEQUENTIALファイルとは?
COBOL(コボル)というプログラミング言語は、大量のデータを処理して「請求書」や「売上報告書」といった帳票(ちょうひょう)を作るのが得意な言語です。この帳票を、パソコンのメモ帳などで開ける形式で保存する方法がLINE SEQUENTIAL(行順次ファイル)です。
「SEQUENTIAL(シーケンシャル)」とは「順番に」という意味です。つまり、データの1行目、2行目、3行目……と順番に、まるでノートに一行ずつ文字を書いていくようにファイルへ書き込んでいく仕組みのことです。この形式で出力されたファイルは、Windowsのメモ帳やWordなどで開いて中身を確認したり、そのままプリンターで印刷したりすることができるため、事務処理の現場では非常によく使われます。
2. ファイルを出力するための準備:SELECTとASSIGN
COBOLでファイルを扱うときは、まずプログラムの冒頭で「これからファイルを使いますよ」という宣言をする必要があります。これをINPUT-OUTPUT SECTION(入出力節)と呼びます。ここで重要になるのが「SELECT句」と「ASSIGN句」です。
例えるなら、SELECTは「プログラムの中でのニックネーム」を決めることで、ASSIGNは「実際のパソコン上のファイル名」を紐付ける作業です。例えば、プログラムの中では「REPORT-FILE」という名前で呼び、実際には「SEIKYU.TXT」という名前で保存する、といった橋渡しをここで行います。ここで「ORGANIZATION IS LINE SEQUENTIAL」と書くことで、テキスト形式での保存が決定します。
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT REPORT-FILE ASSIGN TO "OUTPUT.TXT"
ORGANIZATION IS LINE SEQUENTIAL.
3. データの入れ物を定義する:FDとレコード
次に、ファイルに書き込む「1行分の長さ」や「中身の構成」を決めます。これをDATA DIVISION(データ部)のFILE SECTION(ファイル節)に記述します。ここで使うのが「FD(File Description:ファイル記述項)」です。
例えば、1行が80文字の帳票を作りたい場合は、その中身が「名前20文字」「金額10文字」「空白50文字」といった具合に、細かく部屋割りを決めておきます。この「1行分のデータの固まり」のことをプログラミング用語でレコードと呼びます。帳票作成では、このレコードをきれいに整えることが、美しい報告書を作る第一歩になります。
DATA DIVISION.
FILE SECTION.
FD REPORT-FILE.
01 REPORT-RECORD.
05 CUSTOMER-NAME PIC X(20).
05 FILLER PIC X(05).
05 SALES-AMOUNT PIC ZZZ,ZZ9.
05 FILLER PIC X(48).
4. ファイルを開いて、書き込んで、閉じる手順
実際にファイルを扱うときの手順は、現実世界で「ノートに日記を書く」ときと同じです。まず「ノートを開く(OPEN)」、次に「文字を書く(WRITE)」、最後に「ノートを閉じる(CLOSE)」という3つのステップを踏みます。
COBOLでは「OPEN OUTPUT ファイル名」という命令で、書き込み専用としてファイルを開きます。もし指定したファイルがなければ新しく作られ、すでにある場合は中身が空っぽにリセットされて上書きされます。書き込みが終わったら必ず「CLOSE ファイル名」を忘れないようにしましょう。これを忘れると、せっかく書き込んだデータが保存されずに消えてしまうことがあるため、非常に重要なルールです。
5. 帳票出力の具体的なプログラム例
それでは、実際に「名前」と「売上金額」をテキストファイルに出力するシンプルなプログラム全体像を見てみましょう。ここでは、計算した結果を先ほど学んだレコード(1行分の入れ物)に「MOVE」という命令で移してから、ファイルに書き出しています。
プログラミング未経験の方は、「MOVE」はコピー、「WRITE」はファイルへの保存、と覚えると分かりやすいでしょう。このプログラムを実行すると、パソコンの中に「REPORT.TXT」という名前のファイルが出来上がります。
IDENTIFICATION DIVISION.
PROGRAM-ID. SALES-OUT.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT OUT-F ASSIGN TO "REPORT.TXT"
ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD OUT-F.
01 OUT-REC.
05 OUT-NAME PIC X(20).
05 FILLER PIC X(02).
05 OUT-AMT PIC ZZZ,ZZ9.
WORKING-STORAGE SECTION.
01 W-NAME PIC X(20) VALUE "田中 太郎".
01 W-AMT PIC 9(06) VALUE 125000.
PROCEDURE DIVISION.
OPEN OUTPUT OUT-F.
MOVE W-NAME TO OUT-NAME.
MOVE W-AMT TO OUT-AMT.
WRITE OUT-REC.
CLOSE OUT-F.
DISPLAY "ファイル出力が完了しました。".
STOP RUN.
(REPORT.TXTの中身)
田中 太郎 125,000
6. 見やすい帳票にするための工夫:ヘッダーと明細
実際のビジネス現場では、単にデータを並べるだけでなく、一番上に「売上報告書」というタイトルや、「日付」「項目名」などを印刷することが求められます。これらを見出し(ヘッダー)と呼びます。
ヘッダーを出力するには、データを出力する「WRITE」命令の前に、あらかじめ用意しておいた見出し用の文字列をファイルに書き込みます。また、たくさんのデータがある場合は、ループ処理(繰り返し)を使って、1件ずつ順番に「MOVE」と「WRITE」を繰り返していきます。こうすることで、何百件、何千件という大量のデータを、整然としたリスト形式でファイルに書き出すことができるのです。
7. 初心者が注意すべきエラー:ファイルパスと権限
プログラムがうまく動かないときに、特に初心者がハマりやすいポイントがあります。それは「ファイルがどこに保存されるか」と「書き込み禁止になっていないか」です。ASSIGN句でファイル名だけを書いた場合、通常はそのプログラムを実行している場所と同じフォルダにファイルが作られます。
また、もし出力しようとしているファイルが別のソフト(Excelやメモ帳など)ですでに開かれていると、COBOLのプログラムが「誰かが使っているから書き込めないよ!」とエラーを出して止まってしまいます。これをファイルロックと呼びます。実行する前には、同じ名前のファイルを閉じておくという習慣をつけましょう。パソコンの操作に慣れていない方は、まずこの「ファイルの場所」と「ソフトを閉じる」ことを意識してみてください。
8. 複数の行を書き出す繰り返し処理
最後に、より実践的な「複数のデータを一行ずつ書き出す」流れを確認しましょう。現実の仕事では、売上データは1つだけではありませんよね。例えば3人分のデータを書き出すときは、「MOVEしてWRITE」という作業を3回繰り返します。この「同じ作業を繰り返す」ことはコンピュータが最も得意とする分野です。
COBOLでは「PERFORM(パフォーム)」という命令を使って、決まった回数だけ処理を繰り返すことができます。一行書き出すたびに、ファイルの中では自動的に「改行(次の行へ移動)」が行われるのが、このLINE SEQUENTIALの最大の特徴です。まるでタイプライターが一行打つたびにガチャンと改行するように、自動で綺麗なリストが出来上がっていくのです。
PROCEDURE DIVISION.
OPEN OUTPUT OUT-F.
* 1行目の書き出し
MOVE "佐藤 花子" TO OUT-NAME
MOVE 50000 TO OUT-AMT
WRITE OUT-REC
* 2行目の書き出し
MOVE "鈴木 一郎" TO OUT-NAME
MOVE 75000 TO OUT-AMT
WRITE OUT-REC
CLOSE OUT-F.
(出力されたファイルの中身)
佐藤 花子 50,000
鈴木 一郎 75,000
まとめ
今回はCOBOLにおける帳票出力の基本であるLINE SEQUENTIALファイルについて学びました。COBOLは古くから企業の業務システムで使われ続けているプログラミング言語であり、特に帳票出力やデータ処理に強いという特徴があります。その中でもLINE SEQUENTIALは、テキストファイル形式でデータを出力するための非常に重要な仕組みであり、初心者から実務レベルまで幅広く使われる基本技術です。 LINE SEQUENTIALの最大の特徴は、データを一行ずつ順番に書き込む点にあります。これにより、メモ帳やエディタで開ける分かりやすい形式のファイルを簡単に作成できます。帳票作成では、読みやすさや整列が非常に重要になるため、この形式は非常に相性が良いと言えます。特にCOBOLでは、レコード単位でデータを扱うため、1行ごとの構造をきちんと設計することが帳票品質を高めるポイントになります。 また、ファイル操作の基本であるOPEN、WRITE、CLOSEの流れも重要です。ファイルを開かずに書き込むことはできず、閉じないとデータが保存されない可能性があります。この一連の流れはCOBOLだけでなく他のプログラミング言語でも共通しているため、しっかり理解しておくことが大切です。 さらに、SELECT句とASSIGN句によって、プログラム内の名前と実際のファイル名を紐付ける仕組みも重要です。これにより、プログラムの柔軟性が高まり、ファイル名の変更にも強い設計になります。ORGANIZATION IS LINE SEQUENTIALを指定することで、テキスト形式として扱われる点も覚えておきましょう。 実務では、単純なデータ出力だけでなく、ヘッダーや明細の区別、繰り返し処理による大量データの出力が求められます。PERFORM文を使って繰り返しWRITEすることで、何百件ものデータを効率よくファイルに出力できます。これにより、売上報告書や一覧表といった帳票を自動生成することが可能になります。 また、初心者がつまずきやすいポイントとして、ファイルの保存場所やファイルロックの問題があります。ASSIGNで指定したファイルがどこに作られるのかを理解し、既に開かれているファイルには書き込めないことを意識することが重要です。こうした基本的なポイントを押さえることで、トラブルを未然に防ぐことができます。 以下に、複数行の帳票を出力する実践的なサンプルを示します。
IDENTIFICATION DIVISION.
PROGRAM-ID. REPORT-SAMPLE.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT OUT-F ASSIGN TO "MULTI.TXT"
ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD OUT-F.
01 OUT-REC.
05 NAME PIC X(20).
05 FILLER PIC X(02).
05 AMT PIC ZZZ,ZZ9.
PROCEDURE DIVISION.
OPEN OUTPUT OUT-F.
MOVE "売上報告書" TO NAME
MOVE 0 TO AMT
WRITE OUT-REC
MOVE "山田太郎" TO NAME
MOVE 120000 TO AMT
WRITE OUT-REC
MOVE "佐藤花子" TO NAME
MOVE 85000 TO AMT
WRITE OUT-REC
CLOSE OUT-F.
STOP RUN.
実行結果は以下のようになります。
売上報告書
山田太郎 120,000
佐藤花子 85,000
このようにLINE SEQUENTIALファイルを使うことで、COBOLで作成したデータをそのまま帳票として活用できます。COBOL LINE SEQUENTIAL ファイル出力 帳票作成 テキストファイル出力といった基本を理解することで、実務で求められるスキルに一歩近づきます。まずはシンプルな1行出力から始め、徐々に複数行やヘッダー付き帳票へとステップアップしていくことが大切です。
生徒
「LINE SEQUENTIALって普通のテキストファイルと同じなんですね」
先生
「そうです。だからメモ帳で確認できて扱いやすいんですよ」
生徒
「OPENとCLOSEの大切さも分かりました」
先生
「基本ですがとても重要です。忘れるとデータが保存されません」
生徒
「複数行の出力も簡単にできるんですね」
先生
「WRITEを繰り返すだけなので、実務でもよく使われます」
生徒
「帳票作成のイメージができました」
先生
「その理解があれば十分です。次はレイアウト調整にも挑戦してみましょう」