DS (データ構造定義: Data Structure ) は
C言語などの「構造体」( typedef ) に相当するものである。
C言語の構造体( typedef ) を拡張して関数(メソッド)と要素を構造化したものが
VC++ の Class であり、
Java はこれをさらにオブジェクトにまで拡張して class とした。
このように考えると RPG の DS (=Data Structure) は
構造化したオブジェクトの基本である。
DSは DS自身を要素とする配列として定義することは以前に紹介した。
* OVLR 配列の項目
D OVLRCD DS QUALIFIED
D RECORD 1 10A
D LIN 11 13S 0
* OVLRCD の 256 個の配列
D OVLR S LIKE(OVLRCD)
D DIM(256)
* 配列の要素
D OVL S 3S 0 INZ(0)
今回、紹介するのは構造化された DS の例である。
つまり DS を要素とする DS の定義である。
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
FIELDS はひとつの DS定義であり、PGMDS も DS定義である。
LIBDS という DS は、これら FILEDS と PGMDS から成る DS であり
二重構造化された DS である。
このように DS を二重化して再定義できることも覚えておけば複雑なデータの構造も
DS によって管理しやすくなる。
もちろん例によって DS は QUALIFIED を宣言しておけば他のフィールドとは
明確に差別化することができるのでプログラムの品質向上に役に立つので
これも覚えていて欲しい。