在FOXBASE+中使用数组应注意的几个问题

Author: 王一军 Date: 1995-11-17

        1、数组不能定义成全局变量,只能做为局部变量使用。但反过来,全局变量可以用来定义数组的下标。
        例如执行下列语句:
        PUBLIC AAA
        DIME AAA(5)
        则出现‘SYNTAX ERROR'的错误提示,而执行
        PUBLIC AAA
        AAA=5
        DIME BBB(AAA)
        则能正确执行。
        2、数组间不能直接赋值。执行下列命令:
        DIME AAA(3)
        AAA(1)=1
        AAA(2)="12345"
        AAA(3)=5
        DIME BBB(3)
        BBB=AAA
        通过执行LIST MEMO命令或按F7键查看内存变量,却得到BBB(1)=BBB(2)=BBB(3)=1的信息,数组BBB只取了数组AAA第一个分量的类型与内容,并没有达到预定效果。
        3、数组不能重复定义。执行下列命令:
        DIME AAA(5)
        ...
        程序体,没有清除内存变量命令
        ...
        DIME AAA(5)
        则会出现‘SYNTAX ERROR”的错误提示。在实际工作的意义是不要把定义数组的命令放在循环体中,除非在重新执行循环体前将其清除。
        4、在编制录入程序时,往往需要先将数据保存到数组中,然后再利用GATH命令传送到当前数据库当前记录中。这样在定义数组时,需根据数据库结构定义数组分量个数和类型,传送到数据库后,为了再次录入,还得重新将数组初始化,如果数组分量个数很多且类型不一的话,虽简单但十分繁琐。笔者通过实践,找到了一个较好的方法:利用与当前数据库相同结构但没有记录的数据库进行定义。
        例如用数组AAA与数据库BBB进行数据交换,则用下列方法定义:
        USE BBB
        COPY STRU TO CCC
        USE CCC
        SCAT TO AAA
        这样就非常迅速地完成了数组AAA的定义。在录入数据后,执行
        USE BBB
        GATH FROM AAA
        完成数据传送后,再执行
        USE CCC
        SCAT TO AAA
        即可将数组AAA重新初始化,既方便快速,又可避免因数据类型或数据宽度定义不当而引起错误。(王一军)