CL

199. 切り出し関数(%SST)と位置計算を利用する方法

AIはまた「古典的であるが」と評して%SSTによる切り出す方法も
紹介してくれた。
この方法は最も私たちが思いつく方法であって
あえてポインタを使う人は少ないと思う。

PGM
    DCL VAR(&ARRAY)   TYPE(*CHAR) LEN(500) /* 50バイト × 10要素 */
    DCL VAR(&ITEM)    TYPE(*CHAR) LEN(50)
    DCL VAR(&IDX)     TYPE(*INT)  LEN(4)
    DCL VAR(&POS)     TYPE(*INT)  LEN(4)

    DOFOR VAR(&IDX) FROM(1) TO(10)
        /* 開始位置の計算: (インデックス - 1) * 50 + 1 */
        CHGVAR VAR(&POS) VALUE((&IDX - 1) * 50 + 1)
        
        /* 配列から特定の要素を取り出す */
        CHGVAR VAR(&ITEM) VALUE(%SST(&ARRAY &POS 50))
    ENDDO
ENDPGM

これもAIが示した原文そのままである。
まあこのほうがステップ数も少ないし読み手にとっても
わかりやすいだろう。

プログラムは書いた自分の満足度より後任の人が読んで
わかりやすい書き方が望まれるのは言うまでもない。