R P G | 入 力 仕 様 書 |
入力仕様書では、ファイルのレコードの構造を記述します。
COBOLのFDとWORKING−STORAGE
SECTIONでの、PICTURE定義に相当します。
AS/400のRPGでは、F仕様書で述べたように、外部記述を利用しているときは、
その様式をプログラム内部で改めて定義し直すようなことはほとんどありません。
I 仕様書は、例外的にファイルのフィールド(COBOLのデータ項目)を再定義するよ
うな場合と、プログラムの中で使用する構造をもったワーク・フィールドを定義するような
場合に使用します。
I 仕様書では様式は2種類あります。
様式1 : データ構造指示の始まりをしめす様式です。
7〜11桁 データ構造名を指示します。構造名は省略できます。
データ構造名は英字で始まる6桁までの英数字の文字列です。19、20桁 ’DS’と指示します。
様式2 : フィールド(データ項目)をしめす様式です。
43桁 フィールドのデータタイプを指示します。
Pはパック10進数です。
ブランクは文字列もしくはゾーン10進数です。44〜47桁 フィールドの始まりの桁を指示します。 48〜51桁 フィールドの終りの桁を指示します。 52桁 フィールドの小数点以下の桁を指示します。
ブランクにするとフィールドは文字列です。
53〜58桁 フィールドの名前は英字で始まる6桁までの英数字の文字列です。
例−1:この例で、W@YMDに19991223をセットすると、それぞれ次のように
...+... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+ I DS I 1 80W@YMD I 1 40W@YYYY I 5 60W@MM I 7 80W@DD
なります。
W@YYYY 1999 W@MM 12 W@DD 23
COBOLでは上の例は次のようになります。W@YMDとW@YYYYが一部
同じ場所(アドレス)を占めていることに注意してください。
(説明のためのもので、@がCOBOLで使用できるという意味ではありません)
01 DUMMY. 02 W@YMD PIC S99999999. 02 W@YYYY REDEFINS W@YMD PIC S9999. 02 W@MM PIC S99. 02 W@DD PIC S99.
例−2:
...+... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+ IW\YMD DS I 1 80W@YMD I 1 40W@YYYY I 5 60W@MM I 7 80W@DD
W¥YMDとW@YMDの違い
W¥YMDは文字列、W@YMDはゾーン10進数です。
例−3:漢字シフトコードの定義。
AS/400では漢字を扱うとき、シフトアウト(X’0E’)、シフトイン(X’0F’)のシフトコードを
使用します。漢字文字列を強制的に分割するような場合に必要になることがあります。
この例では、漢字シフトコード、X’0E’,X’0F’を定義しています。
I*. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 I DS I I ' 漢字 ' 1 6 W@DUMY I 1 1 X0E I 6 6 X0F
例−4:16進数による初期値
次のA1234とB1234は同じ値が入っています。
I*. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 I* 1.16進数による初期値 I DS I I X'F1F2F3F4' 1 4 A1234 I* 2.文字列による初期値 I DS I I '1234' 1 4 B1234
ローカルデータ域(*LDA)
ローカルデータ域はRPGではI仕様書の中で’UDS’として定義します。これはプログラム間でデータを
簡単に引き継ぐことのできるデータ構造です。
いま2本のプログラム、TUDS1、TUDS2の間でデータを受け渡す例を示します。
このプログラムは次のようにTUDS1,TUDS2の順にRUNします。介在するのはローカル・データ域だけです。
ローカル・データ域は自動的にプログラムにデータが取得され、LR標識をオンにして終了すると、出力されます。
↓
プログラム TUDS1
↓
*LDA
プログラム TUDS2
プログラム:TUDS1
H Y- F*--------------------------------------------------------------- I UDS I 1 2 FLD1 I 3 12 FLD2 C*--------------------------------------------------------------- C *ENTRY PLIST C PARM P@FLD 12 C*--------------------------------------------------------------- C MOVELP@FLD FLD1 C MOVE P@FLD FLD2 C SETON LR C RETRN
DSPDTAARA DTAARA(*LDA)
データ域表示 システム : S1234567 データ域 . . . . . . . : *LDA タイプ . . . . . . . . : *CHAR 長さ . . . . . . . . . : 1024 テキスト . . . . . . . : ジョブ 076515/ISHIOKA/QPADEV0004 用の *LDA 値 オフセット *...+....1....+....2....+....3....+....4....+....5 0 'ABCDEFGHIJKL ' 50 ' ' 100 ' ' 150 ' ' 200 ' ' 250 ' ' 300 ' ' 350 ' ' 400 ' ' 続く ...
プログラム:TUDS2
H Y- F*--------------------------------------------------------------- I UDS I 1 2 FLD3 I 3 12 FLD4 C*--------------------------------------------------------------- C FLD3 DSPLY C FLD4 DSPLY C SETON LR C RETRN
実行結果は次のようになります。
5 > CALL TUDS1 'ABCDEFGHIJKL'
5 > CALL TUDS2
DSPLY AB
DSPLY CDEFGHIJKL
ユーザー・データ域
ユーザー・データ域(UDA)もローカル・データ域に似たデータ・エリアです。
ローカル・データ域と同様、UDSとしてデータ構造を定義します。
違いはローカルデータ域が各ジョブに1個自動的に割り振られ、自動的に削除されるのに対し、
ユーザー・データ域はファイルのようにいくつでも生成でき、削除するまで存在するということです。
作成コマンドは、CRTDTAARAです。
ユーザー・データ域のデータは、RPGでは演算仕様書のIN命令で取得し、OUT命令で出力します。
前ページ 次ページ 目次
(C)COPYRIGHT ISHIOKA KATSUHIDE 2000−2003