D posDS ds
D pos1 2 0
D pos2 2 0
D posArr 2 0 dim(2)
C MoveA posDS posARR
在上面的代码中,我得到RNF7262-因子2和结果字段的类型和长度不同。请协助正确定义数据类型和大小的问题。
看来您可能试图以数组的形式访问多个“顺序”字段,这些字段可能源自表。
而不是尝试移动数据,只需执行以下操作
dcl-ds posDs;
pos1 zoned(2);
pos2 zoned(2);
posArr zoned(2) dim(2) pos(1);
end-ds;
修复格式如下
d posDs ds
d pos1 2 0
d pos2 2 0
d posArr 2 0 dim(2) overlay(posDs)
数据结构也被视为字符字段。没有“十进制数据结构”之类的东西。
如果您希望将“ posArr”数组与数据结构中的子字段分开,则可以如Charles所示在数据结构中定义一个数组,然后在数据结构之外定义另一个数组。然后,您可以使用“ EVAL”分配数组,而不是尝试使用不建议使用的MOVEA操作码。
d posDs ds inz
d pos1 2 0
d pos2 2 0
d posArrDs 2 0 dim(2) samepos(pos1)
d posArr s 2 0 dim(2)
pos1 = 1;
pos2 = 2;
posArr = posArrDs; // Instead of MOVEA
return;
我相信您将需要指定要分配给数组或从数组中分配哪个元素,例如posArr(1)
或posArr(2)
。如果您要同时分配这两个元素,我认为将需要两个分配语句或一个循环。
即使您解决了该问题,但是由于RPG中的数据结构未初始化为零,您仍然可能会得到十进制数据错误。除非您在定义规范中使用INZ关键字,否则它们将初始化为空白。这意味着,如果将未初始化的数字字段分配给另一个数字,它将在运行时因写入无效的十进制数据而崩溃。通过使用INZ可以很容易地防止数据结构出现,对于独立字段也不是问题,因为系统会将它们初始化为零。