巧用FoxPro的LEN()函数判断内存变量的存在

Author: 杨德军 Date: 1997-01-01

  Foxpro 2.6以其编程简单、程序可读性强和丰富的函数集倍受广大数据管理人员的喜爱。但美中不足的是它没有提供一个判断内存变量存在与否的函数。所以在开发一个应用系统时,如果某一个程序要做到既能被上级程序调用,又能独立运行,其参数传递就成为一个关键的问题。
  在被上一级程序调用时,我们可用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 26 for DOS,UCDOS 50上运行通过)。