REXX > レシピ集

ファイルの入力

ファイルからレコードを読むなら、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