%ELEM(获取元素数目)
%ELEM(table_name)
%ELEM(array_name)
%ELEM(multiple_occurrence_data_structure_name)
%ELEM(array_name:*ALLOC)
%ELEM(array_name:*KEEP)
%ELEM(array_name:*MAX)
%ELEM 返回指定数组,表或多次出现的数据结构中的元素数。 返回的值为无符号整数格式 (类型 U)。 可以在定义规范或扩展因子 2 字段中的表达式中的任何位置指定数字常量。
参数必须是数组,表或多次出现数据结构的名称。
当数组具有可变维 (使用 DIM (*AUTO) 或 DIM (*VAR) 定义数组) 时,可以通过多种其他方式使用 %ELEM。
- %ELEM 可用作赋值语句的目标,以更改可变维数组的当前元素数。
- 当 %ELEM 用于其值时,可以为 %ELEM 指定第二个参数。
- *ALLOC
- 将返回分配给数组的元素数。
- *MAX
- 返回数组的最大元素数。
- 当 %ELEM 是赋值语句的目标时,可以为 %ELEM 指定第二个参数。
- *ALLOC
- 如果赋值语句右侧的值大于数组的当前元素数,那么将增大分配给数组的元素数。 如果该值小于当前元素数,那么不会更改元素数。 分配给数组的元素数可能大于指定的值。 未更改当前元素数。
- *KEEP
- 不会更改数组中任何新元素的值。
如果参数是复杂限定名,并且包含必需子字段的数据结构是数组,那么可以通过以下两种方法之一来指定参数:
- 使用为复杂限定名中的所有数据结构数组指定的索引。
- 在复杂限定名中没有为任何数据结构数组指定索引。
*..1....+....2....+....3....+....4....+....5....+....6....+....7...+....
D*Name++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++
D arr1d S 20 DIM(10)
D table S 10 DIM(20) ctdata
D mds DS 20 occurs(30)
D num S 5p 0
* like_array will be defined with a dimension of 10.
* array_dims will be defined with a value of 10.
D like_array S like(arr1d) dim(%elem(arr1d))
D array_dims C const (%elem (arr1d))
/FREE
num = %elem (arr1d); // num is now 10
num = %elem (table); // num is now 20
num = %elem (mds); // num is now 30
/END-FREE具有复杂数据结构的 %ELEM 示例
在以下示例中,引用复杂限定子字段 PET 的标准方法是
family(x).child(y).pet
当指定为 %ELEM 的参数时,可以在没有为数据结构数组指定任何索引 (如语句 1 中所示) 或为数据结构数组指定所有索引 (如语句 2 中所示) 的情况下指定该参数。
DCL-DS family QUALIFIED DIM(3);
name VARCHAR(25);
numChildren INT(10);
DCL-DS child DIM(10);
name VARCHAR(25);
numPets INT(10);
pet VARCHAR(100) DIM(3);
END-DS;
END-DS;
DCL-S x INT(10);
x = %ELEM(family.child.pet); // 1
x = %ELEM(family(1).child(1).pet); // 2