|
KLISTを自動的に生成するプログラムを作ってみましょう。この程度なら、何も、APIを使わなくても、DSPFFDのOUTFILEから作成できます。ポイントは、DSPFFDで生成されるOutfileの中のレコードに、キーとなるフィールド名が、そのキー順に、入っているということです。つまり、データを到着順に読み込んで、RPGソースを作ればいいのです。
また、ソースデータを作成する時は、SEQをカウントアップするようにしてください。カウントしなくても、確か、問題はないと思いましたが、ソースを開くと、画面の下に、順番がどうのこうのというメッセージが出てしまいます。また、ソースのSEQをキーにしている場合は、必ずカウントアップした方がいいでしょう。
たいしたプログラムではないので、説明代わりに、ソースを掲載します。(手抜きです。はい。)
KLISTのダウンロード
CMD ('KLISTソースコード生成')
PARM KWD(FILE) TYPE(QUAL1) MIN(1) +
PROMPT('索引付きファイル')
PARM KWD(SRCFILE) TYPE(QUAL2) +
PROMPT('原始ファイル')
PARM KWD(SRCMBR) TYPE(*NAME) LEN(10) DFT(*FILE) +
SPCVAL((*FILE)) +
PROMPT('原始メンバー ')
QUAL1: QUAL TYPE(*NAME) LEN(10)
QUAL TYPE(*NAME) LEN(10) DFT(*LIBL) +
SPCVAL((*LIBL)) PROMPT('ライブラリー')
QUAL2: QUAL TYPE(*NAME) LEN(10) DFT(QRPGSRC)
QUAL TYPE(*NAME) LEN(10) DFT(IPLTEMP) +
SPCVAL((*LIBL)) +
PROMPT('原始ライブラリー')
CLP
PGM (&FILLIB &SRLIB &SRCMBR)
DCL &FILLIB *CHAR 20
DCL &SRLIB *CHAR 20
DCL &FILE *CHAR 10
DCL &FLIB *CHAR 10
DCL &SRCPF *CHAR 10
DCL &SRCLIB *CHAR 10
DCL &SRCMBR *CHAR 10
MONMSG CPF0000 *N GOTO END
CHGVAR &FILE %SST(&FILLIB 1 10)
CHGVAR &FLIB %SST(&FILLIB 11 10)
CHGVAR &SRCPF %SST(&SRLIB 1 10)
CHGVAR &SRCLIB %SST(&SRLIB 11 10)
IF (&SRCMBR='*FILE') CHGVAR &SRCMBR &FILE
CHKOBJ &FLIB/&FILE *FILE
DSPFD FILE(&FLIB/&FILE) TYPE(*ACCPTH) +
OUTPUT(*OUTFILE) OUTFILE(QTEMP/QAFDACCP) +
OUTMBR(*FIRST *REPLACE)
CHKOBJ &SRCLIB/&SRCPF *FILE
MONMSG CPF9801 *N CRTSRCPF &SRCLIB/&SRCPF IGCDTA(*YES)
CHKOBJ &SRCLIB/&SRCPF *FILE &SRCMBR
MONMSG CPF9815 *N ADDPFM &SRCLIB/&SRCPF &SRCMBR SRCTYPE(RPG)
OVRDBF QAFDACCP QTEMP/QAFDACCP
OVRDBF QRPGSRC &SRCLIB/&SRCPF MBR(&SRCMBR)
CALL KLIST01
DLTOVR *ALL
DLTF QTEMP/QAFDACCP
MONMSG CPF0000
END:
RETURN
ENDPGM
RPG
FQAFDACCPIP E DISK
FQRPGSRC O F 92 DISK
E****************************************************
E* A R R A Y T A B L E *
E****************************************************
E SRC 1 27 60 ;
I******************************************************
I* D E F I N E D A T A - S T R U C T U R E *
I******************************************************
I DS
I 1 10 APFILE
I 3 5 FILEID
I*
I DS
I 1 60 SRCC
I 20 23 KEYID
I 43 48 KFLDS
C******************************************************
C* M A I N - R O U T I N E ;
C******************************************************
B001 C APACCP IFEQ 'A' :到着順即時終了
001 C MOVE *ON *INLR :
001 C RETRN ;
E001 C END :
C* :
B001 C *IN80 IFEQ *OFF :
001 C EXSR @KLIST ;
001 C MOVE *ON *IN80 ;
E001 C END :
C* :
C EXSR @KFLD ;KFLD部分
C* ;
CLR RETRN ;
C******************************************************
C* S U B - R O U T I N E ;
C******************************************************
C*----------------------------------------------------*
C @KLIST BEGSR :
C*----------------------------------------------------*
B001 C 1 DO 4 CC 30 :
001 C ADD 100 SEQ 60 :
001 C Z-ADD0 DAT 60 :
001 C MOVELSRC,CC SRCC :
001 C EXCPT#SRC :
E001 C END :
C* :
C ADD 100 SEQ :
C Z-ADD0 DAT :
C MOVELSRC,5 SRCC :
C MOVELFILEID KEYID :お好きに
C EXCPT#SRC :
C* :
C ENDSR :
C*----------------------------------------------------*
C @KFLD BEGSR :KFLD部分
C*----------------------------------------------------*
C ADD 100 SEQ :
C Z-ADD0 DAT :
C MOVELSRC,6 SRCC :
C MOVELAPKEYF KFLDS :キーフィルド名
C* :
C EXCPT#SRC :
C* :
C ENDSR :
O***************************************************
O* Output Module *
O***************************************************
OQRPGSRC E #SRC
O SEQ 6
O DAT 12
O SRCC 72
** ....1....+....2....+....3....+....4....+....5....+....6....
C****************************************************** 1
C* @DEF PLIST / KLIST / DEFINITION ; 2
C****************************************************** 3
C* ; 4
C KYXXX KLIST ; 5
C KFLD XXXXXX ; 6
|