1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ILERPGAdvent Calendar 2022

Day 6

DS(データ構造)の長さや属性をリテラルで宣言しない方法

Last updated at Posted at 2022-12-05

はじめに

DS(データ構造)を使用してフィールドを合成/分割する方法は、RPG を使用している方なら一度は記述したことがあるかと思います。

その際、皆さんはどのように定義をしていますか?
大抵の場合、以下のように各変数の長さや属性を宣言しているのではないでしょうか?

D  W#YYYYMM                 1      6  0
D   W#YYYY                  1      4  0
D   W#MM                    5      6  0

日付のように桁数が変わらないフィールドを合成/分割する際はさほど問題は起こらないかと思います。
しかし、もし DDS で宣言したフィールドを合成/分割する場合はリテラルで宣言すると、DDS の桁数が変更になった際に、DS も再度定義し直す必要があります。

その際、再定義のし忘れや桁数間違え等のミスが起こる可能性が考えられます。

この記事では、このようなミスを防ぐために DS の長さや属性をリテラルで宣言しない方法をご紹介します。

キーワード

使用するキーワードは以下の2つです。

  1. OVERLAY
  2. LIKE

DS の長さ宣言

以下の例では、OVERLAY( DS 名 :*NEXT)を記述することで、DDS で宣言したフィールドを合成しています。

D  W#WSKA00       DS
D   WSKA01                            OVERLAY(W#WSKA00         )
D   WSKA02                            OVERLAY(W#WSKA00  :*NEXT )
D   WSKA03                            OVERLAY(W#WSKA00  :*NEXT )
D   WSKA04                            OVERLAY(W#WSKA00  :*NEXT )
D   WSKA05                            OVERLAY(W#WSKA00  :*NEXT )
A            WSKA01         1A
A            WSKA02         2A
A            WSKA03         3A
A            WSKA04         4A
A            WSKA05         5A

もし、これをリテラルで宣言しようとするとこのようになります。

D  W#WSKA00       DS
D   WSKA01                1      1
D   WSKA02                2      3
D   WSKA03                4      6
D   WSKA04                7     10
D   WSKA05               11     15

OVERLAY( DS 名 :*NEXT)は、サブフィールドを DS 内の次に使用可能な位置に宣言することができます。

DS の属性宣言

もし DDS のフィールドを直接合成せずに変数を使用する際は、LIKE を使用すると便利です。

D  W#WSKA00       DS
D   W#KA01                            LIKE(WSKA01    )
D                                     OVERLAY(W#WSKA00         )
D   W#KA02                            LIKE(WSKA02    )
D                                     OVERLAY(W#WSKA00  :*NEXT )
D   W#KA03                            LIKE(WSKA03    )
D                                     OVERLAY(W#WSKA00  :*NEXT )
D   W#KA04                            LIKE(WSKA04    )
D                                     OVERLAY(W#WSKA00  :*NEXT )
D   W#KA05                            LIKE(WSKA05    )
D                                     OVERLAY(W#WSKA00  :*NEXT )

LIKE は属性を取得することができます。

おわりに

DS をリテラルで宣言せずに OVERLAY や LIKE を使用することは、長い目で見たときにより効率の良いコーディングであると思います。

ご参考になれば幸いです。最後までお読み頂きありがとうございます。

関連した投稿

DS(データ構造)を LIKE,OVERLAY で宣言したときにコンパイルエラーになる原因

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?