FOR-EACH (针对每个)

自由格式语法 FOR-EACH{(H)} IN 数组 | %LIST | %SPLIT | %SUBARR | 枚举
代码 因子1 扩充因子2
每个   item IN array | %LIST | %SPLIT | %SUBARR | 枚举

FOR-EACH 操作开始一组操作,一次处理数组,子数组, %LIST , %SPLIT 或枚举中的项。

FOR-EACH 的第一个操作数是变量。 它不能是数组。

FOR-EACH 的第二个操作数可以是数组, %LIST , %SPLIT , %SUBARR 或枚举。 它必须具有与第一个操作数兼容的数据类型。 如果 FOR-EACH 的第一个操作数是数据结构,那么第二个操作数必须通过 LIKEDS 关键字与第一个操作数相关。

第二个操作数的每个元素以迭代方式分配给第一个操作数。 在 FOR-EACH 操作和 ENDFOR 操作之间的操作组中,第一个操作数保存要处理的元素的值。

对于数字值,允许半调整操作码扩展程序 "H"。 一半调整的规则等同于算术运算的规则。 确保精度

示例

在以下示例中, order_states 数组的每个元素都分配给 state 变量。

DCL-S order_states CHAR(10) DIM(3);
DCL-S state CHAR(20);

order_states(1) = 'Open';
order_states(2) = 'Active';
order_states(3) = 'Closed';
FOR-EACH state in order_states;
   DSPLY state;
ENDFOR;
程序显示以下输出:

DSPLY  Open
DSPLY  Active
DSPLY  Closed

在以下示例中,两个 FOR-EACH 语句相同,但第二个 FOR-EACH 操作具有操作扩展器 "H" ,指示执行了一半调整。

当将值为 5.279的 price (1)分配到 price时, price的值 (只有两个小数位) 对于第一个 FOR-EACH 循环为 5.27 ,对于第二个 FOR-EACH 循环为 5.28 ,并进行一半调整。


DCL-S prices PACKED(15:5) DIM(2);
DCL-S price PACKED(15:2);

prices(1) = 5.279;
prices(2) = 5.271;

FOR-EACH price in prices;
   DSPLY (%char(price));
ENDFOR;

FOR-EACH(H) price in prices;
   DSPLY (%char(price));
ENDFOR;
程序显示以下输出:

DSPLY  5.27
DSPLY  5.27
DSPLY  5.28
DSPLY  5.27

请参阅 %LIST 的示例 ,以获取 FOR-EACH 处理使用内置函数 %LIST 指定的列表中的每个项的示例。

请参阅 %SPLIT 示例 ,以获取 FOR-EACH 处理由内置函数 %SPLIT 返回的临时数组中的每个项的示例。

有关 FOR-EACH 处理枚举中每个常量的示例,请参阅使用枚举