动态数组或调整大小扩展?

时间:2014-01-31 16:02:51

标签: progress-4gl

这是一个多余的问题。 Progress 10.2B中是否有动态数组或列表?

示例:

我创建了一个名为“InventoryTransaction”的基类。我从Progress读取了一个MSSQL表,我想为找到的每个记录创建一个InventoryTransaction类的实例,然后将其添加到“list / array”中,以便稍后处理它们。

有类似MyArray的东西:Add(MyItem)会自动增加数组大小+1然后将MyItem的实例添加到数组中吗?

我发现函数EXTENT可以动态地为数组设置大小,但在读取MSSQL表中的所有事务之前我不知道计数。或者,我可以在读取所有事务之前执行“从MyTable中选择count(*)”以检索计数,然后对数组进行扩展。

谢谢! 星期五快乐! 的Sebastien

3 个答案:

答案 0 :(得分:2)

您可以创建“不确定”数组。即。

define variable x as decimal extent no-undo.

不确定数组变量可以处于以下两种状态之一:固定或不固定,这意味着它具有固定维度或不具有固定维度。首次定义时,不确定的数组变量具有不固定的维度。您可以通过以下方法修复不确定数组变量的维度:

  • 定义变量时初始化数组值

  • 使用INITIAL选项

  • 设置数组变量中的元素数

  • 使用EXTENT语句

  • 将确定数组分配给不确定数组,将其固定到确定数组的维度

  • 将数组参数传递给过程,用户定义函数或基于类的方法,以便不确定数组变量是传递确定数组的目标,将不确定数组固定到确定数组

一旦修复,ABL将固定的不确定数组视为确定数组。

答案 1 :(得分:2)

我刚发现progress.lang.object:

FILE:array.p

/* declaration */
DEFINE TEMP-TABLE arrITem
    FIELD Item AS CLASS PROGRESS.lang.OBJECT.

DEFINE VARIABLE oItem AS CLASS Item NO-UNDO.
DEFINE VARIABLE i AS INTEGER NO-UNDO.

/* create 10 products */

DO i = 1 TO 10:
    CREATE arrItem.
    arrItem.Item = NEW Item("Item_" + STRING(i), "Description_" + STRING(i)).
END.

/* display object information */
FOR EACH arrItem:
    ASSIGN oItem = CAST(arrItem.Item,Item).
    DISPLAY oItem:ItemNo.
END.

FILE:item.cls

CLASS Item:


    DEFINE PUBLIC PROPERTY ItemNo AS CHARACTER
        GET.
        SET.

    DEFINE PUBLIC PROPERTY DESCRIPTION AS CHARACTER
        GET.
        SET.

    /* constructor */  
    CONSTRUCTOR PUBLIC Item():
    END.

    CONSTRUCTOR PUBLIC Item(
        INPUT strItemNo AS CHARACTER
       ,INPUT strDescription AS CHARACTER
        ):

        ASSIGN ItemNo = strItemNo.
        ASSIGN DESCRIPTION = strDescription.
    END.

END CLASS.

谢谢! 的Sebastien

答案 2 :(得分:0)

简短的回答是 - 不,10.2B AVM不允许您动态调整阵列大小。

答案很长,你可以(a)将对象添加到链接的对象列表中,或者(b)创建一个带有Progress.Lang.Object字段的临时表,为每个对象实例创建一个新的TT记录想要跟踪,并将对象的指针分配给TT的PLO字段。