巧用FoxPro的LEN()函数判断内存变量的存在
在被上一级程序调用时,我们可用DO <子程序文件名> WITH <参数清单>和PARAMETERS <参数清单>来实现,可当独立运行时,PARAMETERS传递参数无效,调用相应内存变量时,系统就会出现“Variable [“<变量名>”] not found.”(变量没找到)的出错信息。通常的解决办法是编写两个相应的程序,一个可以被上级调用,另一个单独对内存变量赋值。这样一来,整个系统就会显得臃肿。笔者在实际应用中巧妙地用LEN()对内存变量进行了有效的判断,在运行一个程序时,先对所需的内存变量进行判断,如果存在,则程序继续运行,如果不存在,则转入赋值语句,及对其赋值,从而使整个系统变得更为简洁。
假如现有一字型内存变量:AA=“工程师”,我们对其判断可采用以下方法:
IF LEN(“&AA.”)=6 &&6为“工程师”的长度
PDJP=.T. &&判断结果返回值为真,变量存在
ENDIF
IF LEN(“&AA.”)=4 &&4为“&AA”的长度
PDJP=.F. &&判断结果返回值为假,变量不存在
ENDIF
这是因为,当AA存在时,LEN()函数将通过宏代换计算“工程师”的长度(值为6),AA不存在时,则会计算“&AA.”的长度(值为4),从而使问题得以解决(其中“”为宏代换的分隔符)。对于日期型和数字型内存变量,可将其转换为字符型后再进行判断。
注意:内存变量名的长度加2不能与内存变量可能值的长度相等,否则判断无效(此法在Acer 486DX4/100,Foxpro 26 for DOS,UCDOS 50上运行通过)。