ファイルの入力
ファイルからレコードを読むなら、TSOのEXECIOを利用。
"EXECIO 1 DISKR INDD (STEM LINE.)" /* INDD というDDから1レコード読んで、配列 LINE に入れる
SAY LINE.1
使用メモリを気にしないなら、いっぺんに全レコードを読んでしまうこともできる。
"EXECIO * DISKR INDD (STEM LINE.)" /* INDD というDDから全レコードを読んで、配列 LINE に入れる
DO I=1 TO LINE.0 /* 配列の添字 0 の要素はレコード数
SAY LINE.I /* 1レコードずつ順に表示
END
ファイルを1レコードずつ読んで処理をする典型的なコード
DO WHILE 1
"EXECIO 1 DISKR INDD (STEM LINE.)"
IF RC<>0 THEN LEAVE /* ファイルの終わりに達したら DO WHILE ループから抜ける
(do something)
END /* DO WHILE 1 の終わり
ファイルの出力
LINE.1='HELLO,WORLD'
"EXECIO 1 DISKW OUTDD (STEM LINE.)" /* OUTDD というDDに LINE.1 の内容を1レコード書き込む
複数レコードをいっぺんに出力する場合
LINE.1='//JOBNAME JOB CLASS=A,MSGCLASS=A'
LINE.2='//IEFBR14 EXEC PGM=IEFBR14'
LINE.3='//DD1 DD DSN=DATASET,DISP=(MOD,DELETE),SPACE=(TRK,1),UNIT=SYSDA'
"EXECIO 3 DISKW OUTDD (STEM LINE.)" /* OUTDD というDDに LINE.1〜LINE.3 の内容を書き込む
レコード数を変数で指定する場合
LINE.1='//JOBNAME JOB CLASS=A,MSGCLASS=A'
LINE.2='//IEFBR14 EXEC PGM=IEFBR14'
LINE.3='//DD1 DD DSN=DATASET1,DISP=(MOD,DELETE),SPACE=(TRK,1),UNIT=SYSDA'
(略)
LINE.9='//DD7 DD DSN=DATASET7,DISP=(MOD,DELETE),SPACE=(TRK,1),UNIT=SYSDA'
LINE.0=9 /* 出力するレコード数
"EXECIO * DISKW OUTDD (STEM LINE.)"
TSOコマンドを発行し、その結果を受け取る
OUTTRAP() で、TSOコマンドのレスポンスを配列に受け取るようにする。
X=OUTTRAP('LINE.')
"LISTDS ('dataset name') MEMBERS" /* 配列 LINE. にLISTDSコマンドのレスポンスが入る
DO I=1 TO LINE.0 /* LINE.0 はコマンドレスポンスの行数
(do something)
END
X=OUTTRAP('OFF')
最終更新:2009年11月11日 21:19