COBOL内部テーブルに値を入力し、このテーブルを検索して特定の値を見つけるCOBOLプログラムがあります。この検索の前に、テーブルのインデックス変数を初期化します。
SET PAF-IDX TO 1.
COBOLでインデックス変数を初期化することが許可されているかどうかを明確にできますか?
INITIALIZE PAF-IDX.
いいえ。なぜそれを「初期化」したいのですか?
これは、IBMEnterpriseCobolのマニュアルからのものです。
identifier-1
Receiving areas.
identifier-1 must reference one of the following:
v An alphanumeric group item
v A national group item
v An elementary data item of one of the following categories:
Alphabetic
Alphanumeric
Alphanumeric-edited
DBCS
External floating-point
Internal floating-point
National
National-edited
Numeric
Numeric-edited
v A special register that is valid as a receiving operand in a MOVE
statement with identifer-2 or literal-1 as the sending operand.
When identifier-1 re
編集:
OpenCobolプログラマーガイドはそれを具体的に文書化しています:
The list of data items eligible to be set to new values by this statement is:
Every elementary item specified as identifier-1 ..., PLUS...
Every elementary item defined subordinate to every group item specified as dentifier-1
..., with the following exceptions:
USAGE INDEX items are excluded.
Items with a REDEFINES as part of their definition are excluded; this means that
tems subordinate to them are excluded as well.
ドラフトCOBOL標準はそれほど明確ではありませんが、INITIALIZEで使用される場合、これらの項目はMOVEではなくSETを生成することによって処理されます:DATA-POINTER、FUNCTION-POINTER、OBJECT-REFERENCE、またはPROGRAM-POINTER。
編集:
OpenCobol参照が私が思ったほど「特定」ではないことを確認します。IBMCobolでは、現在、MOVEのターゲットになることによって操作できないものは初期化できません。これは、現在のOpenCobolでも同じです。ドラフトCOBOLにはいくつかの例外がありますが、リストされていますが、INDEXED BY(テーブル自体の一部ではなく、コンパイラー自体がストレージを定義する個別の項目)もUSAGEINDEXも含まれていません。