Deuian からの回答にもう少し追加したいと思います。同意します。REXX ステム変数が答えです。
単純な REXX 変数は、デフォルトで独自の名前になります。例えば:
/* REXX */
SAY X
X
他の値が割り当てられるまで「X」を出力します。
/* REXX */
X = 'A'
SAY X
「A」が出力されます。
これまでのところ大きな驚きはありません。幹変数は少し異なります。ステムの先頭は評価されず、最初のドットの後のビットのみが評価されます。
説明する:
/* REXX */
X. = 'empty' /* all unassigned stem values take on this value */
A. = 'nil'
B = 'A' /* simple variable B is assigned value A */
X = 'A' /* simple variable X is assigned value A */
SAY X.A /* prints: empty */
X.A = 'hello' /* Stem X. associates value of A with 'hello' */
SAY X.A /* prints: hello */
SAY X.B /* prints: hello */
SAY X.X /* prints: hello */
X
と語幹A
名は評価されませんが、
その後にある変数と は評価されますX
。A
一部の人々はこれを少し混乱させます - しばらく考えてみてください。
REXX の Z/OS バージョンは、ステム変数を反復処理するための自然な方法を提供しません。これを行う最も簡単な方法は、独自のインデックスを作成することです。例えば:
/* REXX */
X. = ''
DO I = 1 TO 10
J = RANDOM(100, 500) /* Random # 100..500 */
X.INDEX = X.INDEX J /* concatinate J's with 1 space between */
X.J = 'was picked' /* Associate 'was picked' with whatever J evalauates to */
END
DO I = 1 TO WORDS(X.INDEX) /* Number of blank delimited 'words' */
J = WORD(X.INDEX, I) /* Extract 1 'word' at a time */
SAY J X.J /* Print 'word' and its associated value */
END
かなり些細なことですが、アイデアを示しています。INDEX
インデックス名を保持する (または選択した名前) が連想値としてポップアップしないようにしてください。これが可能である場合は、他の変数を使用してインデックスを保持してください。
最後のポイント。私の例はそれぞれ で始まっていることに注意して/* REXX */
ください。これは、Z/OS での REXX プログラムの最初の行である必要があることに気付くかもしれません。