您的位置: 网站首页 > 程序开发 > Visaul FoxPro程序设计 > 第4章 Visual FoxPro语言基础 > 【4.2 常量与变量】

4.2 常量与变量

 

4.2  常量与变量

在一般情况下,将一个具体的数据内容或者其值固定不变的数据称为常量,如一个常数、一个字符串或者一个具体的日期数据等。而变量实际上是一个命名的存储空间,变量的数据类型则是由其所含数据的类型决定的。

4.2.1  常量

常量是由常量名和常量值两部分组成的,其常量的类型有字符型、数值型、货币型、日期型、日期时间型、逻辑型等多种类型。

1.字符型常量

字符型常量简称C型常量,它是用定界符括起来的字符串,这些定界符有' '" "[ ]。字符型常量是由一切能印刷的文字或符号构成的,包括09azAZ、空格等所有合法的ASCII码字符以及汉字,其最大长度为255个字符。

定界符必须配对使用,为半角英文状态下输入;如果一种定界符已经作为常量使用,则应该选择另外一种定界符,例如,"Hope科技"'science and technology '"中国银行+'Bank of China' "等。

2.数值型常量

数值型常量简称N型常量,它是由数字、小数点和正负号构成的各种整数、小数或实数,例如3345.567-10

对于绝对值很大或很小的数值型常量,可以用科学计数法来表示,例如5.12E-5代表5.12×10-5,即0.0000512

科学计数法规定用字母Ee来表示以10为底的指数,在该字母之前应是一个非零的有效数字,在该字母之后允许用一位或两位的整数表示具体的指数值。如常数3050000,其科学计数方法可表示为3.05E63.05E063.05E+63.05E+063.05e63.05e+6等多种形式。

注意:Visual FoxPro中,分数(包括百分数)并不表示一个数值型常量。

3.货币型常量

货币型常量简称Y型常量,是由符号“$”开头的一个表示货币量的数字。其货币型常量默认只有4位小数,如果小数部分超过了4位,则进行四舍五入,例如$56.83$-34.5034

4.日期型常量

日期型常量简称D型常量,用来表示一个具体的日期,其默认格式为{^yyyy-mm-dd}或者{^yyyy/mm/dd}。例如,{^2007/01/12}{^2007-01-12}均表示2007112

注意:其默认格式中的“^”符号,表示该日期格式是严格的,若要设置为非严格的日期格式,可以执行SET STRICTDATE TO 0命令,此后即可以用{yyyy-mm-dd}或者{yyyy/mm/dd}的格式来表示一个日期。

另外,Visual FoxPro中的各种日期表示还受到系统环境设置的影响,并且可以用SET DATE TO命令和SET CENTURY命令来临时改变日期的格式,如下所示。

·    SET DATE TO AMERICAN设置为mm/dd/yy格式,例如,01/17/2007

·    SET DATE TO BRITISH设置为dd/mm/yy格式,例如,17/01/2007

·    SET DATE TO USA设置为mm-dd-yy格式,例如,01-17-2007

·    SET DATE TO ANSI设置为yy.mm.dd格式,例如,2007.01.17

·    SET DATE TO YMD设置为yy/mm/dd格式,例如,2007/01/17

·    SET DATE TO MDY设置为mm/dd/yy格式,例如,01/17/2007

·    SET DATE TO DMY设置为dd/mm/yy格式,例如,17/01/2007

·    SET CENTURY ON设置年份为4位数字表示,例如,2007年。

·    SET CENTURY OFF设置年份为2位数字表示,例如,07年。

5.日期时间型常量

日期时间型常量简称T型常量,用来表示一个具体的日期与时间,其默认格式为{^yyyy-mm-dd,[hh[:mm[:ss]][a|p]]},方括号中的内容为可选项,符号“|”表示“或者”。例如,{^2007-01-17,11:35p}表示2007117日下午1135

6.逻辑型常量

逻辑型常量简称L型常量,用来表示某个条件是否成立。它只有逻辑真与逻辑假两个值,逻辑真用.T.表示,逻辑假用.F.表示。此外,还可以用.t..Y..y.表示逻辑真,用.f..N..n.表示逻辑假。

4.2.2  变量

变量在内存中占一个存储单元的位置(地址),变量名是存储位置的符号表示。变量分为字段变量、内存变量、数组变量和系统变量4种。

1.字段变量

字段变量(Field Variable)是与某个数据表中的对应字段相联系的,在创建数据表时所定义的一个字段就对应一个字段变量,数据表中的字段名即为字段变量名。字段变量除了有字符型、数值型、货币型、日期型、日期时间型和逻辑型之外,还有其特有的备注(M)型和通用(G)型等。

一个数据表有多少条记录,它的每一个字段变量就会有多少个值,因而字段变量是一种多值变量。在数据表中有一个专门用来指示当前记录的记录指针,字段变量的当前值就是当前记录中该字段的值。

2.内存变量

内存变量(Memory Variable)独立于数据表文件存在于内存之中,是程序员用来保存执行中间结果的临时工作单元,可以随时定义、随时释放。其变量名由汉字、字母、下划线和数字组成。

1)内存变量的赋值。内存变量的赋值有两种方法。一是使用STORE TO语句,其格式为:

Stor <表达式> to <内存变量名表>

将表达式的值赋给多个内存变量,如,

Store 5*3 to x1,x2,x3,x4

二是使用“=”赋值语句,将表达式的值赋给一个内存变量,如,

y1=21

y2=35

例如,创建内存变量:

STORE 70 TO eme1        &&创建变量eme1,其值为70,数据类型为整数型

A1=12.345               &&创建变量A1,其值为12.345,数据类型为数值型

注意:等号的右边只能是内存变量值,该值的类型决定了内存变量的类型。

2)内存变量的作用范围。内存变量按照其作用范围可以分为公共(PUBLIC)内存变量和私有(PRIVATE)内存变量。公共内存变量又称为全局内存变量,适用于所有的过程;私有内存变量又称为局部内存变量,仅适用于定义该变量的过程。

可用LOCAL(定义局部变量)命令和PUBLIC(定义全局变量)命令指定变量的作用范围。

例如,指定变量的作用范围:

LOCAL R1,R2         &&指定变量R1R2为局部变量

PUBLIC R3           &&指定变量R3为全局变量

3)内存变量的显示。内存变量显示的值可以用???或者@…SAY语句在“命令”窗口显示。

可以用LIST MEMORY [TO PRINT]或者DISPLAY MEMORY [TO PRINT]命令显示所有的内存变量。如果语句中包含[TO PRINT]选项,则将结果输出到打印机上,否则在屏幕上显示。

4)内存变量的释放(删除)。要释放(删除)内存变量,可用RELEASECLEAR MEMORY命令,后者可释放除系统内存变量之外的所有内存变量,而RELEASE命令则可以有选择地释放内存变量。RELEASE命令有如下格式:

RELEASE

ALL [LIKE|EXCEPT<结构>]|<内存变量表>

若选择<内存变量表>,则仅删除清单中指定的内存变量;若选择ALL [LIKE|EXCEPT

<结构>],则按如下条件删除内存变量。

ALL LIKE<结构>:表示把符合结构中所指定的内存变量删除。

ALL EXCEPT<结构>:表示把符合结构中所指定的其他内存变量清除。

例如,

RELEASE xyx1                &&删除一个内存变量

RELEASE xyx1, xyx2          &&删除两个内存变量

RELEASE ALL LIKE x?         &&删除首字符为x的双字母内存变量

RELEASE ALL EXCEPT x*       &&删除首字符为x的所有内存变量

RELEASE ALL                 &&删除全部内存变量

5)内存变量文件。内存变量是在内存中建立的,一旦关机、掉电或退出系统,内存变量就不复存在,因此需要把用到的内存变量保存到磁盘上。

用户可以用SAVE命令将一个、多个或全部内存变量保存到一个磁盘文件中(扩展名为.mem),其格式为:

SAVE TO <文件名> [ALL LIKE|EXCEPT<结构>]

若未给出任何选项,则将把当前内存中所有的内存变量保存到指定的文件名中;若给出任一选项,则把符合指定要求的内存保存起来,此选项的意义与RELEASE命令中选项的意义相同。发出SAVE命令时,如果一个本地内存变量隐去了另外在较高级定义的内存变量,则只存储本地内存变量。

反之,用户可以使用RESTORE命令将一个MEM的文件读出。RESTORE命令首先执行一个CLEAR MEMORY命令,删去全部当前内存变量,然后读存储在指定MEM文件中的内存变量描述,其格式为:

RESTORE  FROM<文件名>  [ADDITIVE]

Visual FoxPro还有存屏命令,能将屏幕上的信息存到一个内存变量之后,再用上面的命令将其存为内存变量文件,以便以后恢复,其格式为:

SAVE SCREEN [TO <内存变量>]

其功能为在文本方式下把当前屏幕上的内容保存到<内存变量>中;不选任何选项,则保存到特定的内存缓冲区中。

当需要恢复屏幕内容时,可使用以下的格式:

RESTORE SCREEN[FROM<内存变量>]

若不选任何选项,则从特定的内存缓冲区中恢复。例如,

SAVE SCREEN TO SC           &&将屏幕存到SC内存变量中

SAVE TO MEM1                &&将所有内存变量存入MEM1文件

RESTORE FROM MEM1           &&恢复内存变量

CLEAR                       &&把整个屏幕清除

RESTORE SCREEN FROM SC      &&恢复屏幕

注意:字段变量与内存变量同名时,字段变量优先,如果打开表后,有一个姓名字段,又使用姓名=“高明”定义一个内存变量姓名,这时字段变量姓名与内存变量姓名同名。如果使用“?姓名”语句,则显示字段变量姓名的内容;如果要显示内存变量中姓名的内容,则应加上“M->”前缀,如“? M->姓名”

3.数组变量

数组变量是结构变量,它是具有相同名称而下标不同的一组有序内存变量。FoxPro允许定义一维和二维数组,数据在使用之前需要先定义。

由于数组的应用比较常见,所以数组部分将在本章的4.5节中进行详细介绍。

4.系统变量

系统变量是特有的变量,是系统内部提供的,学会使用系统变量会带来许多方便。Visual FoxPro提供的系统变量很多,在使用DISPLAY命令显示内存变量时,可以看到这些系统变量的当前值。

下面结合具体实例介绍几种常用的系统内存变量。

1ALIGNMENT=<expC>:用于空白之间的文本对齐。表达式<expC>中包含的字符串决定文本对齐方式。

·    LEFT左对齐输出,为默认情况。

·    CENTER居中对齐输出。

·    RIGHT右对齐输出。

2CALCMEM=<expN>:该变量返回或者初始化计算器的值。利用该变量可以访问计算器的计算结果,对该变量赋初值就是对计算赋初值,例如,

STORE 5 TO _CALCMEM             &&赋初值

ACTIVATE WINDOWS calculator     &&显示计算器

CLEAR TYPEAHEAD                 &&清除键盘缓冲区

KEYBOARD CHR(82)                &&向键盘缓冲区填充“R”字符

3DIARYDATE=<expN>:返回或者初始化系统日历中的日期。_DIARYDATE中存放着当前系统日历的日期,使用该系统变量可以设置和获取系统日历的日期。

例如,用以下程序可以修改和显示系统日期:

SET CENTURY ON                          &&设置日期显示格式

STORE {^2005-05-01} TO _DIARYDATE       &&初始化系统日历日期

=MESSAGEBOX(DTOC(_DIARYDATE),64)        &&显示系统日历日期

ACTIVATE WINDOWS CALENDAR               &&调用系统日历

=MESSAGEBOX("Change date to July 4,1980",48)

STORE {^2002-10-04} to _DIARYDATE       &&更改系统日历日期

=MESSAGEBOX(DTOC(_DIARYDATE),64)        &&显示更改后的系统日期

=MESSAGEBOX("Change date to today date",48)

STORE DATE() TO _DIARYDATE              &&获取系统时间

=MESSAGEBOX(DTOC(_DIARYDATE),64)        &&显示获得的系统时间

RELEASE WINDOW calendar                 &&释放系统日历

可在机器上调试以上几个例子,查看程序的运行结果。