AT END OF、AT*、AT NEW
添加链接描述
AT FIRST: 循环内表的第一行时触发执行的代码。只执行一次。
AT LAST: 循环内表的最后一行数据时执行代码。即在LOOP里把该执行的都执行完了才执行它。
AT NEW F1: 如果字段F及F的左则全部字段的数据,与上一行数据不一致,则执行代码。 先执行一行,开始判断,如果第二行和第一行值不一样,执行 AT END OF F1;
如果值一样,继续循环AT NEW F1.
AT END OF F1: 如果字段F及F的左则全部字段的数据,与下一行数据不一致时,则执行代码。
AT…End AT语句块内:循环每一行数据时都执行.
At new At F1: 如果字段F及F的左则全部字段的数据,与上一行数据不一致,则执行代码。
非At/End At语句块内:循环每一行数据时都执行
根据上述程序运行的结果可得出如下结论:
-
At First 与At last为一对,分别在循环至整个内表的第一行与最后一行数据时运行。
-
Af new f 与At end of f 为一对,分别在同一个行组内的第一行与最后一行执行。(行组:f字段及f字段前的数据行集合)
-
at 与end at语句块内,工作区的内容,并不是当前行的内容。
a. At First 与At last: 工作区的内容,字符型被 * 填充,数字类型被初始化值填充。
b. Af new f 与At end of f: 工作区的内容, f及f前的字段被当前行填充,f后, 字符型被* 填充,数字类型被初始化值填充,与At First 与At last情况一致。
-
sum 后工作区的数字类型字段的值将等于sum(f),但sum行集的范围存在差异,在文本字段保持不变。
a. At First 与At last: 在整个内表sum
b. Af new f 与At end of f: 在其行组内sum
-
非At/End At语句块内:
a. 工作区的内容,被当前行填充
b. sum的范围是整个内表,也At First 与At last一样。