数组由一系列被称为元素的有序数据值构成,可以用序号引用这些元素。因为数组存在于内存中,所以它能够被快速访问,且便于处理。用户可以很容易地指定、处理数组中的元素。
在Visual FoxPro中只能定义一维数组、二维数组,通过一个数值下标来引用,用一对圆括号和方括号都可以,如,
AB(10),AC[2,5]。
数组同变量一样,可以拥有任意数据类型。在使用时必须先声明数组的类型,声明的方式有以下几种:
(1)私有数组,用DECLARE 或DIMENSION声明。
(2)全局数组,用PUBLIC声明。
(3)局部数组,用LOCAL声明。
全局数组是指声明的数组可以在不同的过程和函数中使用,局部数组是指该数组只能在声明的过程或者函数中使用。例如定义两个数组:
DIMENSION AB(10),ARRAY AC[2,5] &&声明为私有数组
DECLARE AB(10),ARRAY AC[2,5] &&声明为私有数组
PUBLIC AB(10),ARRAY AC[2,5] &&声明为全局数组
LOCAL AB(10),ARRAY AC[2,5] &&声明为局部数组
数组一旦被定义之后,该数组的每个元素就被置了一个逻辑值.F.,可以用EMPTY()函数来测定,如果为空则表示EMPTY(数组元素)=.T.,所以可以这样来测定数组中是否被置过值。
(1)用赋值语句,例如,
AB(3)=45
Store"abcd"to AC(2,1)
(2)用SCATTER命令从当前记录中取特定字段的值赋给数组,例如,
scatter fields xh, xm, xb to ab
注意:数组长度、类型自动与所给字段相同。
(3)用COPY TO ARRAY从当前记录中取所有字段的值赋给数组,例如,
copy to array ab
注意:同样,数组长度、类型自动与所给字段相同。
(4)把数组中的数据传给当前表中的当前记录,格式如下:
gather from 数组名[fields 字段名表]
(5)用数组向当前表添加记录,格式如下:
append from array 数组名[for 条件] [[fields 字段名表]
Visual FoxPro的数组起始下标是从1开始的,即以1为基准。二维数组的行数×列数所得到的结果,分配到一维数组的存储空间中。所以定义数组AB(10)和AC[2,5]的结果是一样的。
数组的下标有一个换算关系,这种关系可以利用Visual FoxPro提供的AELEMENT()和ASUBSCRIPT()函数来直接操作。第一个函数是根据给定的下标求序号,即一维数组的下标;第二个是根据序号求数组的下标。它们对一维数组没有意义,对二维数组可以进行序号和下标的操作。
同样,用户可以使用下面的函数来处理数组中的元素。
(1)排序SORT():可以按升序和降序对数组中的元素排序。
(2)搜索ASCAN():在数组中搜索与一个表达式具有相同数据和数据类型的元素。
(3)删除ADEL():可以删除一维数组中的一个元素,或者删除二维数组的一行或一列。
(4)插入AINS():可以向一维数组中插入一个元素,或者者向二维数组插入一行或一列。