1.25k likes | 1.45k Views
第三章 Visual FoxPro 语言基础. 本章,我们学习 Visual FoxPro 的主要语法规则、常用命令和函数。. 3.1 数据类型、常量和变量. 数据有 “ 类型 ” 和 “ 值 ” 两个属性, “ 类型 ” 是数据的分类, “ 值 ” 是数据的具体表示。 3.1.1 数据类型 在程序设计中, Visual FoxPro 的数据类型有 字符型 、 数值型 、 逻辑型 、 日期型 、 日期时间型 和 货币型 。. 1 、字符型 : 是由字符串定界括起来的一串字符。
E N D
第三章 Visual FoxPro语言基础 • 本章,我们学习Visual FoxPro的主要语法规则、常用命令和函数。
3.1 数据类型、常量和变量 • 数据有“类型”和“值”两个属性,“类型”是数据的分类,“值”是数据的具体表示。 • 3.1.1 数据类型 • 在程序设计中,Visual FoxPro的数据类型有字符型、数值型、逻辑型、日期型、日期时间型和货币型。
1、字符型:是由字符串定界括起来的一串字符。1、字符型:是由字符串定界括起来的一串字符。 • 字符型数据由英文字符、数字字符、中文字符、空格和其他专用符号组成。例如"I am a student"、'2004/10/10'、[123.456]等都是字符型数据。 • 2、数值型 • 数值型数据由数字、小数点和正负号组成,如123.456、-2都是数值型数据。 • 3、逻辑型 • 逻辑型数据长度为1个字节,它只能为真或假。“真”(True,Yes)用.T.或.Y.表示,“假”(False,No)用.F.或.N.表示, • 注意:逻辑值旁边有两个点,这是逻辑型数据的定界符。
4、日期型 • 日期型数据占8个字节,范围从01/01/1000(1000年1月1日)到12/31/9999,表示方法是{^yyyy-mm-dd},定界符是一对花括号。其中,yyyy表示年份,mm表示月份,dd表示日期。例如,{^2005-01-01}就是一个日期型数据。 • 5、日期时间型 • 日期时间型数据也占8个字节,年份范围从01/01/1000(1000年1月1日)到12/31/9999,时间范围从00:00:00a~11:59:59p(凌晨0点0分0秒到午夜11点59分59秒).书写格式为{^yyyy-mm-dd [hh[:mm[:ss]] [a|am|p|pm]]},定界符也是一对花括号。年月日的约定和日期型数据相同,hh表示小时,mm表示分钟,ss表示秒数,a或am表示上午,p或pm表示下午,大小写均可。 • 例如,下面都是合法的日期时间型数据。
6、货币型 • 货币型数据的范围是-922337203685477.5808~922337203685477.5807,可精确到小数点后四位。所以,给货币型变量赋的值如果小数位数超过4位,Visual FoxPro会在对数据进行处理前自动四舍五入。为了区分货币型数据和数值型数据,货币型数据前要加美元符号“$”,这是货币型数据的定界符,如$123.456、$-123.45678等,但$-123.45678在进行处理前会自动四舍五入,变为$-123.4568。
综上所述,在程序设计中,Visual FoxPro的数据类型如表3.2所示
3.1.2 常量 • 常量(Constant)是一个不变的值.按数据类型区分,可分为字符型、数值型、逻辑型、日期型、日期时间型和货币型。 • 1、字符型常量 • 字符型常量也称为字符串,需要注意的是:
字符串中的字母,大小写并不等价,如"ABC"并不等价于"abc"。字符串中的字母,大小写并不等价,如"ABC"并不等价于"abc"。 • 不包含任何字符的字符串""称为空串,它的长度为0,与包含空格的字符串" "不同。 • 定界符必须成对匹配,不能出现一头为单引号而另一头为双引号等情况。 • 如果某种定界符本身也是字符串的内容,则需要用另一种定界符表示该字符串。
2、数值型常量 • 数值型常量也称为常数,由数字、小数点和正负号组成。注意,在程序中,数值型常量的值可以很大,要存储范围更广的数值,需要将字段定义为其他类型。 • 3、逻辑型常量 • 逻辑型常量只有.T.、.Y.、.F.、.N.,实际上只有两个值:.T.和.F.。 • 4、日期型常量 • 日期型常量的表示方法是{^yyyy-mm-dd}。空日期用{}表示。
5、日期时间型常量 • 日期时间型常量的表示方式是{^yyyy-mm-dd [hh[:mm[:ss]] [a|am|p|pm]]}。 • 需要注意的是,Visual FoxPro传统的日期和日期时间格式不带“^”,在日期型或日期时间型常量前加“^”是Visual FoxPro 6.0以后规定的严格日期格式,并且是默认设置。 • 6、货币型常量 • 货币型常量前要加美元符号“$”,不再赘述。
3.1.3 变量 • 变量是程序的基本单元。在Visual FoxPro中,变量分为内存变量、数组变量、系统变量、字段变量和对象变量5种。本章介绍前三种变量。 • 1、内存变量 • 在很多情况下,内存变量可简称变量,它是由用户或程序员定义的内存中的一个或一组存储单元,由变量名进行标识,并通过变量名来读写。
例如,在“命令”窗口中可以输入以下两条命令:例如,在“命令”窗口中可以输入以下两条命令: • STORE "张莉" TO sname • age = 20 • 在输入时注意,命令要逐个输入,并且以回车结束。 • 赋值运算符在一条命令中只能为一个变量赋值,而STORE命令可以在一条命令中给多个变量赋值,例如: • STORE "张莉" TO sname1, sname2 • 怎样输出内存变量呢? • 要输出内存变量,可以使用“?”或“??”命令,语法格式为: • ?|?? <表达式1> [AT <显示列位置>]其中,“?”命令表示输出结果后回车换行,“??”命令表示输出结果后不回车换行,“AT <显示列位置>”指定从第几列开始显示。
图3.2 “?”和“??”命令的使用 例如,如果我们要显示上面已经定义了的sname和age变量,一些例子如图3.2所示。 • Visual FoxPro默认数值型数据的整数部分占10列。屏幕左边的第一列的列号是第0列,默认是从第0列开始显示;当用一条“?”命令显示多个变量值时,各值以逗号分隔。
2、数组变量 • 数组是一组对象的集合。Visual FoxPro允许定义一维和二维数组,创建数组的命令格式为: • DIMENSION 数组名1(行数1 [, 列数1])[, 数组名2(行数2 [, n列数2])] ... • 或者: • DECLARE 数组名1(行数1 [, 列数1])[, 数组名2(行数2 [, n列数2])] ... • 可以看出,DIMENSION命令和DECLARE命令的格式完全相同,它们的功能也一样。在两条命令中,如果省略数组的列数,则数组为一维数组。
图3.3 数组的使用 数组的定义和使用的例子如图3.3所示。
注意:Visual FoxPro中的数组的下标从1开始,例如,在定义了数组B(2,3)之后,下面的语句是错误的: • B(0,1) = 10 &&行下标应该从1开始 • B(1,0) = 10 &&列下标也应该从1开始
3、系统变量 • Visual FoxPro提供了很多事先定义好的变量,称为系统变量。 • 例如,Visual FoxPro用系统变量“_DIARYDATE”存储当前日期,我们可以显示并修改它。假设当前日期是2003年8月12日,如图3.4所示,可以将_DIARYDATE修改为2005年10月1日。
然后,在“命令”窗口执行下面的 ACTIVATE WINDOW calendar &&激活“日历/日记”窗口 • 执行后,Visual FoxPro将激活“日历/日记”窗口,显示的日期是2005年10月1日,如图3.5所示。
激活“日历/日记”窗口 输入并回车 图3.5 激活“日历/日记”窗口
图3.6 将_DIARYDATE的值改回当前日期 • 修改_DIARYDATE系统变量影响范围有限,只影响Visual FoxPro内部的“日历/日记”窗口的显示,而不会影响Windows的日期设置。例如,如果在“日历/日记”窗口中单击“今天”按钮,则_DIARYDATE变量又被设置回2003年8月12日,如图3.6所示。
4、内存变量的显示 • 显示内存变量,可以使用“DISPLAY MEMORY”或“LIST MEMORY”命令。 • “DISPLAY MEMORY”命令的格式为: • DISPLAY MEMORY • [LIKE FileSkeleton][TO PRINTER [PROMPT] |; TO FILE FileName][NOCONSOLE] • 该命令显示内存变量和数组的名称、类型、内容和状态,也显示有关系统变量、菜单、菜单栏、菜单标题和窗口的信息。各参数的意义如下:
“LIKE FileSkeleton”:只显示匹配FileSkeleton的变量和数组的内容,FileSkeleton支持文件名通配符。 • “TO PRINTER [PROMPT]”:将显示的结果输出到打印机。“PROMPT”是在打印前显示一个对话框,可以调整打印机的设置。“PROMPT”必须放在“TO PRINTER”之后。 • “TO FILE FileName”:将显示的结果输出到文件。如果文件已存在,并且“SET SAFETY”设置为“ON”(见本章),系统就会问您是否覆盖文件。 • “NOCONSOLE”:不向Visual FoxPro主窗口或活动的用户自定义窗口输出。
图3.7 执行“DISPLAY MEMORY”命令时的首屏显示 • 例如,当执行了不带任何参数的: • DISPLAY MEMORY • 执行后,Visual FoxPro主窗口如图3.7所示。
如果尚未定义内存变量,执行下面的语句: • STORE "Hello" TO a1 • STORE "World" TO a2 • STORE "Fox" TO b2 • CLEAR • DISPLAY MEMORY LIKE a* &&显示所有以字母A开头的变量信息 • DISPLAY MEMORY LIKE ?2 &&显示所有以2结尾的名称为两个字符的变量信息 • 后,显示的信息如图3.8所示。
5、内存变量的清除 • 可以用四种命令清除内存变量: • (1)CLEAR MEMORY • (2)RELEASE 内存变量名表 • (3)RELEASE ALL [EXTENDED] • (4)RELEASE ALL [LIKE 通配符| EXCEPT 通配符] 命令命令(4)选用“LIKE”短语清除与通配符相匹配的内存变量,选用“EXCEPT”短语清除与通配符不相匹配的内存变量。 • 例如: • RELEASE a1, a2 &&清除内存变量a1和a2 • RELEASE ALL &&清除所有内存变量 • RELEASE ALL LIKE ?2 &&清除所有名称包含两个字符且以2结尾的内存变量 • CLEAR MEMORY &&清除所有内存变量 • 注意,系统变量不会被清除。
3.1.4Visual FoxPro的名称命名规则 • 常量、变量以及我们今后将要学习的自定义函数、过程、数据容器等都需要一个名称,建立这些名称时,必须遵循以下规则: • l名称中只能包含字母、下划线“_”、数字和汉字。 • l名称的开头只能是字母、汉字或下划线“_”,不能是数字,但表的字段名不能以下划线开头。 • 例如,下面的名称是合法的: • abc、a2b3、_sum_of_number、张三 • 下面的名称是不合法的: • 3abc、a-to-z、number$one、 • 诸如“CLEAR = 1”、“QUIT = 2”之类的语句虽然没有错误,但应该避免使用系统关键字作为变量名。
3.2 运算符和表达式 • 3.2.1 运算符 • 运算符是对变量操作的符号用于操作同类型数据 。 • 1、算术运算符 • 算术运算符也称为数值运算符,用于操作数值型数据。运算符有优先级高低之分,例如,乘除运算的优先级高于加减运算。
2、字符运算符 • 对字符串的操作有+、-和$等几种,用语连接和比较字符串。
按优先级的顺序排列,字符运算符如表3.5所示。按优先级的顺序排列,字符运算符如表3.5所示。
3、日期和日期时间运算符 • 对日期和日期时间型数据,可以使用的运算符只有“+”和“-”两个。日期和日期时间型数据只能和数值型数据相加,对日期型数据来说,数值型数据代表增加的天数,对日期时间型数据来说,数值型数据代表增加的秒数,只取数值型数据的整数部参加运算。例如: • ? {^2005-7-1} + 10 &&结果为“07/11/05”,日期型 • ?{^2005-7-1 1:0:10} + 10 &&结果为“07/01/05 01:00:20 AM”,日期时间型 • 对于减法来说,减数可以是数值型,表示减去的天数或秒数。例如: • ? {^2005-7-1} – 10 &&结果为“06/21/05”,日期型 • ?{^2005-7-1 1:0:10} - 10 &&结果为“07/01/05 01:00:00 AM”,日期时间型 • 减数也可以是同类型数据,结果为数值型数据,表示天数或秒数。例如: • ? {^2005-7-1} - {^2004-7-1} &&结果为“365”,数值型,表示天数 • ?{^2005-7-1 1:0:10} - {^2005-6-1 1:0:10} &&结果为“2592000”,数值型,表示秒数
4、关系运算符 关系运算符可用于任意数据类型的数据比较,但要求运算符两边的操作数的类型相同。运算结果为逻辑值。4、关系运算符 关系运算符可用于任意数据类型的数据比较,但要求运算符两边的操作数的类型相同。运算结果为逻辑值。
5、逻辑运算符 • 逻辑运算符用于操作逻辑型数据,并返回一个逻辑值。逻辑运算符有逻辑与(AND)、逻辑或(OR)、逻辑非(NOT或!),
在三个逻辑运算符中,NOT的优先级最高,再次是AND,而OR的优先级最低。但括号的优先级比它们都高。在三个逻辑运算符中,NOT的优先级最高,再次是AND,而OR的优先级最低。但括号的优先级比它们都高。 • 例如: • ? .T. AND .F. &&结果为.F. • ? !.F. AND .F. &&结果为.F.,先运算! • ? NOT .F.=.T. &&结果为.T.,先运算NOT • ? (.F. OR .T.) AND NOT .F. &&结果为.T.
3.2.2 表达式 • 所谓表达式,就是变量、常量、运算符等组合在一起,得到的一个有意义的序列,用来说明一个计算过程。表达式可以更复杂,包含多种运算。 • 例如: • a = 30*2 -5 <100 OR "abc"=="ABC“ • 如果非要用复杂的表达式,最好在表达式中多用括号,这样可增加可读性,减少出错的机会。例如,上述表达式可改写为: • a = ((30*2 -5) <100) OR ("abc"=="ABC")
3.2.3 对“命令”窗口的进一步操作 • 在本节最后,我们学习一下怎样在“命令”窗口中执行多行程序。 • 首先,在“命令”窗口中选中已经书写的多行命令。选中命令的方法可以用鼠标的方式,如图3.10所示,选中区域后松开鼠标。然后按回车键,Visual FoxPro就会一次执行所选中的多条命令了。
按住鼠标左键不放 拖动鼠标选中多条命令 图3.10 选中“命令”窗口中的多条命令
在选中的内容上右击鼠标。 图3.11 “命令”窗口的快捷菜单 • 执行命令还可以利用快捷菜单。当我们在选中的多条命令上单击鼠标右键时,系统弹出的快捷菜单如图3.11所示,然后,执行快捷菜单上的“运行所选区域”命令即可。
从快捷菜单中可以看出,我们可以剪切、复制、粘贴文本。“命令”窗口是一个编辑窗口,所以在编辑命令时可以使用Visual FoxPro提供的编辑工具。 • 此外,在菜单和对话框中所作的选择,可以马上转换为“命令”窗口中的命令。例如,单击“文件”菜单下的“新建”选项,就会打开如图3.12左边所示的“新建”对话框。在此对话框中,选中单选按钮“程序”,然后单击“新建文件”按钮,就会打开一个标题以“程序”开头的窗口,同时,在“命令”窗口中出现了一条命令“MODIFY COMMAND”,如图3.12右边所示。 “MODIFY COMMAND”是创建和打开程序文件的命令。
3.3 常用的设置命令 • 在程序设计时,一般通过“设置命令”来改变设置。例如,改变系统默认目录的命令是: • SET DEFAULT TO [路径说明] • 其中,“路径说明”是可选项,它可以是一个驱动器标识,也可以是带驱动器标识的目录名,也可以是子目录。一些例子如下:
SET DEFAULT TO &&不改变默认路径 • SET DEFAULT TO C: &&设置C盘为默认驱动器 • SET DEFAULT TO C:\ &&设置C盘的根目录为默认目录 • SET DEFAULT TO .. &&设置当前目录的上一级目录为默认目录 • SET DEFAULT TO \bookstore\prg &&设置当前驱动器下的\bookstore\prg子目录为默认目录 • SET DEFAULT TO D:\bookstore\prg &&设置D盘下的\bookstore\prg子目录为默认目录