▲ファイル定義ステートメント
FILE ファイル名 [ファイル属性]
↑ ↑ ↑
固定 (必須)なんでも良い (任意)FBとかVBとかVSAMとか
EX) FILE INFILE ←INFILEを定義。JCL上のDD名です。
※ここの定義にエグジットルーチンを指定するとオンラインのデータベースもアクセスできます。
EX) FILE INFILE EXIT(rotin-name USING(引数1,引数2,....))
↑
こんな風に指定します。詳しくはマニュアルをご参照ください。
▲フィールド定義ステートメント
フィールド名 開始位置 長さ 属性 [HEADING] [MASK]
↑ ↑ ↑ ↑ ↑ ↑
(必須) (必須) (必須)(必須) リスト用 ゼロサプレス
EX) NAME 1 10 A ←キャラクタータイプで10桁を定義
TEL 11 5 P MASK('Z9999-9999') ←パックタイプで5桁を定義
ADDR * 20 A ←*は前のフィールドの次の位置(16桁目から)
※フィールド属性
タイプ | 最大長 |
A | 英数字 | 32,767 |
N | ゾーン十進数 | 18 |
P | パック十進数 | 10 |
U | サインなしパック十進数 | 9 |
B | 2進数 | 4 |
K | 漢字 | 32,766 |
M | ミックス | 32,767 |
※Bはビットでなくバイナリーのことです!
例えば、
FLD1 W 2 B MASK HEX
FLD2 W 2 B
FLD3 W 2 B
;
JOB NULL
FLD1 = 10
FLD2 = 10
FLD3 = X'0A'
PRINT
REPORT
LINE 1 AAA BBB CCC
のようなロジックでは、FLDxの中身は全て16進数で000Aとなります。
上記の結果例↓
FLD1 FLD2 FLD3
000A 10 10
▲JOBステートメント
JOB INPUT ファイル名
↑ ↑ ↑
(必須)(任意)(任意)定義したファイル名
EX1) JOB INPUT INFILE ←これ一行でINFILEを全件処理してくれる
EX2) JOB ←これはファイル定義が1つしかない場合、EX1と同じ意味です
▲ロジックの主なステートメント
・PRINT ←レポートを印刷する命令
・IF/ELSE/ENDIF ←条件分岐の命令
・PUT ←ファイル出力の命令
・= ←移送命令
・+ - * / ←四則演算命令
EX) IF ID = 1 ←もしIDが1なら
WK = A + B ←WKにAとBを加算した結果を移送して
PRINT REPA ←REPAというリストを出力
ELSE ←もしIDが1以外なら
PUT OUTFL ←OUTFLを出力
ENDIF
▲レポート定義ステートメント
REPORT [レポート名] [制御パラメータ] [フォーマット定義パラメータ]
↑ ↑ ↑ ↑
(必須) (任意) (任意) (任意)
SEQUENCE ←レポートデータを並び替える
CONTROL ←数値フィールドを自動的に加算し、合計行をプリントする
※自動的に加算されるのは小数点以下桁数を指定する必要があります。
EX) KINGAKU 1 4 P 0
※合計したくないコントロールフィールドには、NOPRINTを記述します。
EX) CONTROL FINAL NOPRINT SITEN NOPRINT MISE
↑ ↑ ↑ ↑ ↑
最終計不要 SITEN計不要 MISE計を出力
TITLE ←レポートの見出しを指定する
LINE n フィールド名1 フィールド名2 フィールド名3.....
↑ ↑ ↑ ↑
(必須) (任意) (任意) (任意) .....
EX) REPORT REPA ←REPAというリストを定義
LINE 1 NAME TEL ADDR ←出力明細の1行目の項目は、NAME,TEL,ADDRを表示
※主なREPORT制御パラメータ
PAGESIZE | 1ページあたりの行数(標準は58行) |
LINESIZE | 1行あたりの桁数(標準は132桁) |
SPACE | 各フィールド間に挿入されるブランクの数(標準は3桁) |
NOADJUST | タイトル行およびフィールドを左寄せでプリントする |
※主なフォーマット定義パラメータ
DTLCTL |
コントロールフィールドの値を明細行にプリントするかを制御 |
EVERY | 各明細行にプリント |
FIRST | 最初の明細行にプリント(標準値) |
NONE | プリントしない |
SUMCTL |
コントロールフィールドの値を合計行にプリントするかを制御 |
ALL | 全てのコントロールフィールドを
全ての合計行にプリント |
HIAR | 全てのコントロールフィールドを
大合計から小合計の順に階層的にプリント(標準値) |
TAG | 合計行の左端に
「コントロールフィールド名+TOTAL」をプリントする |
DTLCOPY | 明細行の値をプリントする |
SUMMARY |
合計行のみのサマリーレポートを作成する |
◆ 実際のコーディング例(世界一短いロジックのEASY)
FILE INFILE
ID 1 5 P HEADING('ID') MASK('ZZ999')
NAME * 10 A HEADING('シメイ')
ADDR * 10 A HEADING('ジュウショ')
TEL1 * 3 P HEADING('シガイキョクバン') MASK('ZZZZ9')
TEL2 * 5 p HEADING('TEL') MASK('Z999-9999')
JOB INPUT INFILE
PRINT ←ロジックはこれ1行です
REPORT REPT1
LINE 1 ID NAME ADDR TEL1 TEL2
↓ 実行結果
ID シメイ ジュウショ シガイキョクバン TEL
001 ヤマダ ハナオ トウキョウトミナトク 03 3333-4444
002 スズキ ジロウ ホツカイドウサッポロシ 011 222-1111
003 タナカ ヤスコ サイタマケンサイタマシ 046 456-1234
;
;