ここで紹介するのは IBM マニュアルにも掲載のない
特殊な DS (DataStructure)の使い方を説明する。
ILE-RPG の DS(データ構造定義)は C言語の構造体 typedef に良く似ているのだが
C言語では typedef をまた上位の typedef にまとめて定義することができる。
ILE-RPG も DS定義をいくつか上位に DS定義にまとめて定義する、と二重に構造化
して使うことができないものか ? と考えることができるのだが
結論から言うと何とできた。
つまり DS定義を集めて新しい別の DS定義と定義することができるのである。
【SAMPLE: TESTDS2】
0001.00 H DFTNAME(TESTDS2) DATEDIT(*YMD/) BNDDIR('QC2LE') 0002.00 F********** 二重構造化された DATA STRUCRURE の使い方 ***************** 0003.00 F* 0004.00 F********************************************************************** 0005.00 0006.00 D FILEDS DS QUALIFIED 0007.00 D FILE 1 10 0008.00 D FILLIB 11 20 0009.00 0010.00 D PGMDS DS QUALIFIED 0011.00 D PGM 1 10 0012.00 D PGMLIB 11 20 0013.00 0014.00 D LIBDS DS QUALIFIED 0015.00 D FILES LIKEDS(FILEDS) 0016.00 D PGMDS LIKEDS(PGMDS) 0017.00 0018.00 C EVAL LIBDS.FILES.FILE = 'SHOHIN' 0019.00 C EVAL LIBDS.PGMDS.PGM = 'PGM001' 0020.00 C SETON LR 0021.00 C RETURN
【解説】
FILEDS
と PGMDS
という二つの DS構造体がある。
0006.00 D FILEDS DS QUALIFIED 0007.00 D FILE 1 10 0008.00 D FILLIB 11 20 0010.00 D PGMDS DS QUALIFIED 0011.00 D PGM 1 10 0012.00 D PGMLIB 11 20
これらをまとめると
0014.00 D LIBDS DS QUALIFIED 0015.00 D FILE 1 10 0016.00 D FILLIB 11 20 0017.00 D PGM 21 30 0018.00 D PGMLIB 31 40
とするのではなく構造体の名前を使って
0014.00 D LIBDS DS QUALIFIED 0015.00 D FILES LIKEDS(FILEDS) 0016.00 D PGMDS LIKEDS(PGMDS)
とのように再定義することができる。
これらは QUALIFIED によって定義されているので
0018.00 C EVAL LIBDS.FILES.FILE = 'SHOHIN' 0019.00 C EVAL LIBDS.PGMDS.PGM = 'PGM001'
のように DSの識別子を使って宣言しなければならないが
構造化されているだけに、見やすくわかりやすいものとなる。
2次元だけでなく 3次元や 4次元の構造体定義も理論的には
できるのではないかと思われる。
読者のほうでも是非試してみて欲しい。