第二章 Visual FoxPro语言基础 本章教学要求:掌握数Visual FoxPro数据类型、变量、表达式的基本概念和用法, Visual FoxPro常用命令和函数的基本使用方法,自定义函数和过程 定义和使用。 2 .1 Visual FoxPro的数据类型 2 .2 常量和变量 2 .3 数组.

Slides:



Advertisements
Similar presentations
因数与倍数 2 、 5 的倍数的特征
Advertisements

2.8 函数的微分 1 微分的定义 2 微分的几何意义 3 微分公式与微分运算法则 4 微分在近似计算中的应用.
3.1 表的建立 教学内容 :一、建立表结构 ; 二、输入数据. 重点 :建立表 难点 :建立表.
10.2.switch语句.
第六 章数据库访问页 6.1 数据访问页视图 6.2 创建数据访问页 6.3 编辑数据访问页 6.4 查看数据访问页 退出.
徐春 南京金启航教育培训中心 TEL: QQ:
Oracle数据库 Oracle 子程序.
本章介绍Visual FoxPro 6.0的系统特性、集成环境及配置方法及常用命令的基本语法规则。
C++中的声音处理 在传统Turbo C环境中,如果想用C语言控制电脑发声,可以用Sound函数。在VC6.6环境中如果想控制电脑发声则采用Beep函数。原型为: Beep(频率,持续时间) , 单位毫秒 暂停程序执行使用Sleep函数 Sleep(持续时间), 单位毫秒 引用这两个函数时,必须包含头文件
在PHP和MYSQL中实现完美的中文显示
C#程序设计基础 $5 流程控制.
VB程序设计语言 主讲教师:王 杨.
第三章 数据库和表的操作.
Visual Foxpro程序设计 第三章 VisualFoxpro中的数据 123.
第八章 菜单设计 §8.1 Visual FoxPro 系统菜单 §8.2 为自己的程序添加菜单 §8.3 创建快捷菜单.
走进编程 程序的顺序结构(二).
辅导课程六.
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
丙級電腦軟設-VB程式設計 資料來源:林文恭研究室 整理:張福生.
第十章 IDL访问数据库 10.1 数据库与数据库访问 1、数据库 数据库中数据的组织由低到高分为四级:字段、记录、表、数据库四种。
1.2 MATLAB变量表达式与数据格式 MATLAB变量与表达式 MATLAB的数据显示格式
第二章 Java语言基础.
第四章 附件 (应用程序软件包).
第七章 操作符重载 胡昊 南京大学计算机系软件所.
若2002年我国国民生产总值为 亿元,如果 ,那么经过多少年国民生产总值 每年平均增长 是2002年时的2倍? 解:设经过 年国民生产总值为2002年时的2倍, 根据题意有 , 即.
第一章 函数与极限.
第4章 PHP流程控制语句.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
1.3 C语言的语句和关键字 一、C语言的语句 与其它高级语言一样,C语言也是利用函数体中的可执行 语句,向计算机系统发出操作命令。按照语句功能或构成的不 同,可将C语言的语句分为五类。 goto, return.
简单介绍 用C++实现简单的模板数据结构 ArrayList(数组, 类似std::vector)
学习目标 1、什么是字符集 2、字符集四个级别 3、如何选择字符集.
顺序表的删除.
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
线 性 代 数 厦门大学线性代数教学组 2019年4月24日6时8分 / 45.
第七章 程序设计基础.
VB与Access数据库的连接.
姚金宇 MIT SCHEME 使用说明 姚金宇
工业机器人知识要点解析 (ABB机器人) 主讲人:王老师
<编程达人入门课程> 本节内容 内存的使用 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群: ,
C语言程序设计 第一章 数据类型, 运算符与表达式 第二章 顺序程序设计 第三章 选择结构程序设计 第四章 循环控制 第五章 数组.
成绩是怎么算出来的? 16级第一学期半期考试成绩 班级 姓名 语文 数学 英语 政治 历史 地理 物理 化学 生物 总分 1 张三1 115
第六章 Excel的应用 一、Excel的单元格与区域 1、单元格:H8, D7, IV26等 2、区域:H2..D8, HS98:IT77
第4章 Excel电子表格制作软件 4.4 函数(一).
第九节 赋值运算符和赋值表达式.
iSIGHT 基本培训 使用 Excel的栅栏问题
3.16 枚举算法及其程序实现 ——数组的作用.
第4课时 绝对值.
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
Visual Basic程序设计 第13章 访问数据库
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
学习目标 1、了解基本运算符 2、运算符优先级.
2.6 字符型数据 一、 字符常量 1、字符常量的定义 用一对单引号括起来的单个字符,称为字符常量。 例如,‘A’、‘1’、‘+’等。
第二章 Java基本语法 讲师:复凡.
GIS基本功能 数据存储 与管理 数据采集 数据处理 与编辑 空间查询 空间查询 GIS能做什么? 与分析 叠加分析 缓冲区分析 网络分析
本节内容 C语言的汇编表示 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第二章 Java基本语法 讲师:复凡.
Python 环境搭建 基于Anaconda和VSCode.
复习 标签(label)、文本框(text)控件 按钮:点击事件
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
Visual FoxPro 应用基础与面向对象 程序设计教程
本节内容 动态链接库 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
VB与Access数据库的连接.
WEB程序设计技术 数据库操作.
鸡兔同笼(续) ——选择结构.
第四章 UNIX文件系统.
使用ADO访问数据库 李宝智 BonizLee 课程 10564A
使用Fragment 本讲大纲: 1、创建Fragment 2、在Activity中添加Fragment
顺序结构程序设计 ——关于“字符串”和数值.
学习目标 1、什么是列类型 2、列类型之数值类型.
Presentation transcript:

第二章 Visual FoxPro语言基础 本章教学要求:掌握数Visual FoxPro数据类型、变量、表达式的基本概念和用法, Visual FoxPro常用命令和函数的基本使用方法,自定义函数和过程 定义和使用。 2 .1 Visual FoxPro的数据类型 2 .2 常量和变量 2 .3 数组 2 .4 Visual FoxPro的操作符与表达式 2 .5 程序流程控制语句 2 .6 Visual FoxPro常用命令及函数

2 .7 自定义过程与函数

2.1 Visual FoxPro数据类型 在Visual FoxPro中所有的数据都有一确定的类型,如整型(Integer)、字符型(Char)等,数据类型确定了该数据的取值范围及允许进行的操作。在Visual FoxPro主要的数据类型有:   1. 字符型(Character) 由任意字符构成的数据,主要用来表示姓名、地址等数据,其最大长度为254个字符,对字符常量在引用时要加单引号“’”或双引号“””,但引号本身不是字符常量的一部分。例如: ”a”、’a’、”this”、’ this’、”John’s book”(对应的字符常量是John’s book)。

2. 货币型(Currency) 具有货币值的数据,在Visual FoxPro中为货币型数据保留四位小数,在计算机中占8个字节,其取值范围为: -922,337,203,685,477.5807 ~ 922,337,203,685,477.5807 例如:$234.78、$3298.233   3.  数值型(Numeric) 整数或小数,在设计时指定其数据长度和小数位数,其长度为8个字节,取值范围为: -0.9999999999E+19 ~ 0.9999999999E+20。 例如:34.89

4. 浮点型(Float) 浮点型只是为了提供与其它数据库的兼容,在使用上与数值型(Numeric)相同。   5. 日期型(Date) 具有日期值的数据,其长度为8个字节,取值范围为: 01/01/100 ~ 12/31/9999。 例如:{^04/07/04} 表示 2004年07月04日    6. 日期时间型(DateTime) 具有日期和时间的数据,其长度为8个字节,取值范围为:

日期:01/01/100 ~ 12/31/9999 时间:00:00:00 am ~ 11:59:19 pm 例如:{^04/07/04 02:23:12 Am}   7. 双精度型(Double) 只有字段变量才具有该类型,与数值型基本相同,但具有更高的精度,其长度为8个字节,取值范围为:±4.94065645841247E-324 ~ ±8.9884656743115E+307。 例如:4234.767、21564.556   8.整型(Integer) 整数值数据,其长度为4个字节,取值范围为: 

-2147483647 ~ +2147483646。 例如:424、-89   9. 逻辑型(Logical) 具有逻辑值的数据,其长度为1个字节,其只有两种取值:.F.(假)和.T.(真)。   10. 备注型(Memo) 只有字段变量才具有该类型,用于存储大块数据(如个人简历),其大小为4个字节,存储指向备注内容的引用,备注内容存放在与表同名而扩展名为“.FPT”的文件中。 

11. 通用型(General) 只有字段变量才具有该类型,用来保存一个OLE对象,其大小为4个字节,其值指向该字段的真正内容:电子表格、文档或图片。 2.2 常量和变量型 2 . 2 . 1 常量 常量(Const)是在程序运行过程中,其值保持不变的量,任何数据类型都可以作为常量。 例如:25、’This is a book.’等就是常量。

在Visual FoxPro中,日期和时间常量可用下面的格式来表示: {^yyyy-mm-dd [hh[:mm[:ss]]] [am|pm]} 例如: {^2004 .05.11} 表示2004年5月11日 {^2004 .05.11 03:45:12 am} 表示2004年5月11日3时45分12秒 在Visual FoxPro中,除了直接使用常量外,还可通过一个常量符号来使用常量。例如计算圆的面积,可以用下面的表达式来进行计算:  Area = R*3.1415926

可以用一个常量符号,例如PI这个来代表3.1415926。要使用常量符号需要使用#Define预处理命令,其格式: 例如: #Define PI 3.1415926 Area = R*PI &&完全等价于:Area = R*3.1415926 注意:Visual FoxPro的常量符号是不区分大小写的,但通常习惯用大写字母来表示常量符号。 不能对已定义的常量符号进行赋值,例如: PI=3.14 && 错误,对已定义的常量符号进行赋值

2 . 2 . 2 变量 变量(Variable)是在程序运行过程中,其值可以改变的量。变量又分为内存变量和字段变量。内存变量存在于内存中,在程序运行时才起作用,程序运行结束后自动消失。字段变量存在于数据库的表中,不会因程序运行结束而消失。  1. 变量的命名规则 在Visual FoxPro中变量名只能以字母或下划线“_”开始,后面可接字母或数字,汉字也可用作变量名,变量名中不能包含以下字符: ~ ! @ # % ^ & * ( ) 、 - + \ : { } . [ ] ; < > ? / 空格 制表符

一个内存变量名的最大长度为254个字符,字段变量为10个字符。在Visual FoxPro 中变量名是不区分大小的,例如变量名:SNAME、Sname、SNAme都是一样的。   2. 对内存变量的赋值 Store命令 格式:Store 表达式1, 表达式2, …, 表达式n to 变量1, 变量2, …, 变量n 赋予变量什么样的值,变量就具有什么样的数据类型。例如: Store 2+5 to v1,v2 v1、v2是整型变量,其值均为7。

赋值操作符“=” 格式:变量=表达式 赋予变量什么样的值,变量就具有什么样的数据类型。例如: str1 = ‘qwe’ var = 23+45.8 (注:var的数据类型是浮点,其值是68.8。)

2.2.3 数据存储类型 数据的存储类型决定了数据的作用范围。在Visual FoxPro中数据可以存储于常量(如上一节的PI)、变量和数组中,还可以存储在数据库的字段变量和对象中。   1. 内存变量的作用域 内存变量的作用域是指内存变量的作用范围,即指内存变量是在整个程序范围或是在部分程序范围起作用。  l  全局变量(Public Variable) 在整个应用程序范围内都可以被使用和修改的变量。 全局变量的声明命令格式: Public var1 , var2 , … , varn

例如: Public var1,str1 Var1 = 78 Str1 = ‘This is a book.’ 用Public关键字将变量声明为全局变量后,在没有对全局变量赋值以前,其值被初始化为.F.,如量一个变量没有进行声明,系统默认为全局变量。 注意:在对一个变量赋值后,再将其声明为全局变量将会产生语法错误。

 l   局部变量(Local Variable) 只能在创建它的模块或过程中使用和修改。局部变量的声明命令格式: Local var1 , var2 , … , varn 例如: Local Sname , Age Sname = ‘Smith’ Age = 18 用Local关键字将变量声明为局部变量后,在没有对局部变量赋值以前,其值被初始化为.F.。

注意:在对一个变量赋值后,再将其声明为局部变量将会产生语法错误。   l 私有变量(Private Variable) 在当前程序中隐藏上层程序定义的、与私有变量同名的内存变量,从而使在当前程序中操作这些私有变量而不影响被隐藏的上层程序定义的同名变量。 私有变量的声明命令格式: Private var1 , var2 , … , varn 例如:

程序2-1.prg: Set Talk Off Var1 = 100 Var2 = 200 Do proc1 &&调用过程proc1 ?Var1 &&在屏幕上显示输出变量Var1的值 ?Var2 &&在屏幕上显示输出变量Var2的值  

过程文件2-2.prg Procedure proc1 Private var1,var3 Var1= 1 Var2 = 50 Var3 = 3 ?Var1 &&在屏幕上显示输出变量Var1的值 ?Var3 &&在屏幕上显示输出变量Var2的值 Return EndProc

执行程序2-1的运行结果: 1 3 100 50 

 2. 字段变量(Field Variable) 字段变量存在于数据库的表中,当数据库的表打开时,字段变量就起作用,当数据库的表关闭时,字段变量就不起作用。 注意:当内存变量与字段变量同名时,字段变量起作用,此时若要引用与字段变量同名的内存变量,应在变量名前加上“M->”,例如: 学号=’25’ && 这里学号是一个内存变量 Use 学籍管理.DBF && 打开学籍管理.DBF表文件,表 && 中有一名为学号的字段变量

Locate for 学号=M->学号 注:第一个学号是引用字段变量的学号,第二个学号;是引用内存变量的学号

2.3 数 组 数组是一个或多个内存变量的集合,可以通过数组下标访问数组元素。Visual FoxPro支持一维和二维数组。数组在使用前必需先声明,声明一个数组可通过命令Dimension或Declare命令。 l  Dimension/Declare命令格式 Dimension 数组名(下标1[,下标2]) 或 Declare 数组名(下标1[,下标2]) 例如:

Dimension Array1(3) Declare Array2(3,4) 数组的下标是从1开始的,对于上面的定义,引用数组元素Array1(1)、 Array1(2) 和Array1(3)是合法的,而Array1(0)和Array1(4)是错误的。同一个数组的不同数组元素可以具有不同的数据类型,例如: Dimension Array(5) Array(1) = 25 && Array[1]的数据类型为整型 Array(2) = “Book” && Array[2]的数据类型为字符型 Array(3) = .t. && Array[3]的数据类型为逻辑型

说明:数组无论是声明或是使用,下标的引用可以用圆括号“()”,也可以用方括号“[]”,在声明数组后,数据元素的初值都是.F.。 也可以使用Public、Local和Private来指定数组的作用域,例如: Public dimension a1(5) Private a1(3)

2.4 Visual FoxPro的操作符与表达式 2 . 4 . 1 数值操作符及表达式 1.  + 操作符 格式:数值型表达式1 + 数值型表达式2 功能:返回两个数值型表达式相加的结果。

2.  - 操作符 格式:数值型表达式1 - 数值型表达式2 功能:返回两个数值型表达式相减的结果。 3.  * 操作符 格式:数值型表达式1 * 数值型表达式2 功能:返回两个数值型表达式相乘的结果。

4.  / 操作符 格式:数值型表达式1 / 数值型表达式2 功能:返回两个数值型表达式相除的结果。 5.  **或^ 操作符 格式:数值型表达式1^数值型表达式2 或 数值型表达式1**数值型表达式2 功能:返回数值型表达式1与数值型表达式2的方次。 例如:

?4^3 &&显示结果:64 ?6.7^0.3 &&显示结果:1.77 6.  % 操作符 格式:数值型表达式1 % 数值型表达式2 或 数值型表达式1**数值型表达式2 功能:返回数值型表达式1对数值型表达式2求模(求余)的结果。 例如:

?14%5 &&显示结果:4 ?16.8%0.5 &&显示结果:0.3 数值操作符的优先级:**或^、*和/、%、+和- (高  低)

2 . 4 . 2 字符串操作符及表达式   1. + 操作符 格式:字符型表达式1 + 字符型表达式2 功能:连接两个字符型表达式。 例如: ?”北京”+”大学” 结果为:北京大学 

 2.  - 操作符 格式:字符型表达式1 - 字符型表达式2 功能:连接两个字符型表达式,并将第一个字符串尾部的空格移到连接后整个字符串的最末尾。 例如: ?”电子 ” - “科技大学” 结果为:电子科技大学

3. $ 操作符 格式:字符型表达式1$字符型表达式2 功能:查找字符型表达式1是否在字符型表达式2中出现, 若出现则返回逻辑值.T.,否则返回逻辑值.F.。 例如: ?“科技”$“电子科技大学” 结果为:.T. ?“电大”$“电子科技大学” 结果为:.F.

2 . 4 . 3 逻辑操作符及表达式 1.  Not 或 ! 操作符 格式:Not 逻辑表达式 或 ! 逻辑表达式 功能:进行逻辑非操作。 例如: ?Not .t. &&显示结果为:.F. ?Not .f. &&显示结果为:.T. ?Not 2>5 &&显示结果为:.T.

2. And 操作符 格式:逻辑表达式1 And 逻辑表达式2 功能:进行逻辑与操作。 例如: ?.t. and .t. &&显示结果为:.T. ?.t. and .f. &&显示结果为:.F ?.f. and .t. &&显示结果为:.F ?.f. and .f. &&显示结果为:.F

 3. Or 操作符 格式:逻辑表达式1 Or 逻辑表达式2 功能:进行逻辑或操作。 例如: ?.t. or .t. &&显示结果为:.T. ?.t. or .f. &&显示结果为:.T ?.f. or .t. &&显示结果为:.T ?.f. or .f. &&显示结果为:.F 逻辑操作符的优先级:Not 、And、Or (高  低)

2 . 4 . 4 日期时间表达式  1. + 操作符 l  对于日期型表达式 格式:日期型表达式+整型表达式 功能:返回日期型数据经过(整型表达式)天后的日期。 例如: set century on &&设置显示世纪 set date ansi &&设置日期格式为yyyy.mm.dd ?{^2004-05-11}+5 显示结果为:2004.05.16

l 对于日期时间型表达式 格式:日期时间型表达式+整型表达式 功能:返回时间型表达式经过(整型表达式)秒后的日期和时间。 例如: set century on set date ansi ?{^2004-02-03 09:03:08 pm}+93 结果为:2004.02.03 09:04:41 PM

 2. + 操作符 l  对于日期型表达式 格式:① 日期型表达式 - 整型表达式 ② 日期型表达式1 - 日期型表达式2 功能:① 返回日期型数据 (整型表达式)天前的日期。 ② 返回两个日期型表达式相差的天数。 例如: set century on set date ansi ?{^2004–05-11}-5

结果为:2004.05.06 ? {^2004-05-11}-{^2004-05-01} 结果为:10 l 对于日期和时间型表达式 格式:① 日期和时间型表达式 - 整型表达式    ② 日期和时间型表达式1 - 日期和时间型表达式2 功能:①返回日期和时间型表达式 (整型表达式)秒前的日期和时间型数据。 ②返回两个日期和时间型表达式相差的秒数。

例如: set century on set date ansi ?{^2004-02-03 09:03:08 pm}-22 结果为:2004.02.03 09:02:46 PM ?{^2004-05-05 09:03:08 pm } - ; {^2004-05-04 11:46:23 pm } 结果为:76605

 2.4.5 关系运算符与关系表达式 1. >操作符 格式:操作数1 > 操作数2 功能:判别操作数1是否大于操作数2。   2. < 操作符 格式:操作数1 < 操作数2 功能:判别操作数1是否小于操作数2。

 3. = 操作符 格式:操作数1 = 操作数2 功能:判别操作数1是否等于操作数2。   4. <>、#、!= 操作符 格式:操作数1 <> 操作数2 或 操作数1 # 操作数2 或 操作数1 <> 操作数2 功能:判别操作数1是否不等于操作数2。

   5.  <= 操作符 格式:操作数1 < 操作数2 功能:判别操作数1是否小于等于操作数2。   6. >= 操作符 功能:判别操作数1是否大于等于操作数2。   7.  == 操作符 格式:操作数1 == 操作数2 功能:判别操作数1是否精确等于操作数2,当两个操作数都为字符型数据时,它们精确相等是指不仅其对应字符相同,而且其字符长度也相同。

   说明:参与关系运算的两个操作数必须类型相同,操作数1和操作数2必须同为数值型数据、字符型数据、日期或日期时间型数据等。对于数值型数据是比较其数值大小,对于字符型数据是比较其ASCII大小。关系操作符的返回结果都是逻辑值。 例如: ?23.56>=23 &&显示结果:.T. ?”Abc”<”abc” &&显示结果:.F. ?”abc ”= ”abc” &&显示结果:.T. ?”abc ”== ”abc” &&显示结果:.F.

各种操作符的优先级是: 数值操作符优先于逻辑操作符 逻辑操作符优先于关系操作符 注:“( )”的优先级最高,可用“( )”来改变各种操作运算的优先级。

2.5.6 宏 宏是Visual FoxPro一个功能很强的命令,它使用户编写的程序功能强、通用性好,能以少代多,变繁为简。 宏命令&的格式: &<字符型内存变量> 例如: accept “请输入文件名:” to filename &&假定用户从键盘输入C:\Test.dbf Use &filename &&打开表文件C:\Test.dbf Use filename &&打开表文件filename.dbf

2.6 程序流程控制语句 与其它语言一样,Visual FoxPro程序的执行流程也有三种结构:顺序结构、分支结构和循环结构。顺序执行就是指程序从第一条指令开始执行,逐行执行每一条语句直到程序结束为止。但实际问题可能很复杂,需要根据具体的条件来决定哪些语句需要执行,哪些语句不需要执行,哪些语句需要反复执行等,例如计算个人所得税、输入一个班的学生成绩,处理这样的应用问题程序顺序执行是无法实现的,这需要采用分支程序结构和循环程序结构才能实现。

2.5.1 分支语句 分支语句就是根据测试条件的不同,执行不同的操作,在Visual FoxPro中实现分支的语句有2个:If语句和Do-Case语句。   1.       If… Else …Endif结构 If语句的使用格式: If <条件表达式> <语句组1> [Else <语句组2>] Endif

功能:当条件表达式的值为真(.T.)时,执行语句组1,否则执行语句组2。 示例1: Set talk off accept “请输入密码:” to passwd If passwd =”123” ?”欢迎使用本系统!” else ?”口令错误,请核实后再输!” Endif

示例2: Set talk off input “请输入一个数:” to v1 If v1<0 v1=-v1 Endif ? ”该数的绝对值是:”,v1 一个If语句还可以嵌套套别外一个If语句。

示例3: Set talk off input “请输入第1个数:” to A input “请输入第2个数:” to B input “请输入第3个数:” to C If A>B If A>C ?”最大的数是:”,A else

?”最大的数是:”,C endif else If B>C ?”最大的数是:”,B

通过示例3可以看出,3个或3个以上的分支可以用If语句嵌套来实现,但比较繁琐且容易出错,对于3个或3个以上的分支可使用Do-Case语句来实现比较容易。   2. Do… Case …Endcase结构 Do-Case语句的使用格式: Do Case Case <条件表达式1> <语句组1> Case <条件表达式2> <语句组2>

…… Case <条件表达式n> <语句组n> [OtherWise <语句组n+1>] EndCase 功能说明:执行Do-Case时,系统依次查看每一个Case后面的条件表达式,若Case后的条件表达式为真(.T.)时,执行它后面的语句,直到遇到下一个Case或者EndCase为止;若Case后的条件表达式为假(.F.)时,则不执行Case

与下一个Case之间的命令组,继续查看下一个Case的条件表达式,注意只执行一组Case为真(. T 与下一个Case之间的命令组,继续查看下一个Case的条件表达式,注意只执行一组Case为真(.T.)的命令组。如果前面所有的Case条件表达式均为假(.F.),并且有OtherWise语句,则执行OtherWise语句的命令组。 【例2-2】输入学生的考试成绩,判断并输出其成绩等级:A级(90及90分以上)、B级(大于等于80分并且小于90分)、C级(大于等于70分并且小于80分)、D级(大于等于60分并且小于70分)和E级(小于60分)。 程序: Set talk off Input “请输入学生成绩:” to score Do Case

Case score>=90 Grade=”A级” Case score>=80 Grade=”B级” Case score>=70 Grade=”C级” Case score>=60 Grade=”D级” OtherWise Grade=”E级” EndCase ?”该生的成绩等级是:”,Grade Set talk on

2.5.2循环语句 程序的循环结构在开发Visual FoxPro应用程序时经常使用,Visual FoxPro提供3个循环语句来实现程序的循环结构: 1. For-Next | Endfor语句 语法格式: For <内存变量>=<数值表达式1> to<数值表达式2> [Step<数值表达式3>] <语句组> [Loop] … [Exit] Next | Endfor

功能说明: (1) 首先将数值表达式1的值赋给内存变量,作为循环初值。 (2) 若数值表达式3的值为正数,判断内存变量的值是否小于等于数值表达式2的值(循环终值),若小于等于数值表达式2的值,则执行For与Next(或EndFor)间的语句,否则退出循环;若数值表达式3的值为负数,则内存变量的值大于等于数值表达式2的值则执行循环体语句,小于等于数值表达式2的值则退出循环。 (3) 数值表达式3的值称为步长,每循环一次为内存变的值加上一个步长值,若省略Step <数值表达式3>,则系统默认步长为1。

(4) Exit语句为退出循环,即在循环过程中,若遇到该语句,则不论是否已循环到循环终值都将退出循;Loop语句为短路循环,即在循环过程中,若遇到该语句,则直接返回到For语句,不再执行Loop到Next(或EndFor)间的语句,Exit和Loop语句可出现在循环的任何位置,但在实际应用中通常都将这两个语句放在If语句中使用。 (5)  Next和EndFor是完全等价的。 (6)  For循环可以嵌套使用。

【例2-2】计算从1加到36的和。 程序: Clear Set talk off Sum=0 For i = 1 to 36 Sum=sum+i Next ?”Sum=”,Sum Set talk on Return

 2. DO While-Enddo语句 语法格式: Do while <条件表达式> <语句组> [Loop] … [Exit]   Enddo

功能说明: (1) 首先判断条件表达式的值,若为真(.T.),则执行循环体中的语句组,否则退出循环。 (2)   当执行到Enddo语句时,重新返回DO while语句处重复(1)。 (3)  在执行循环体时,遇到Exit语句,则退出循环,转到Enddo语句后的下一条语句处执行。 (4) 在执行循环体时,遇到Loop语句,则不执行Loop后面的语句,重新开始下一轮循环。

【例2-3】计算满足算式1+2+3+…+n<=1000的最大的n。 程序: Clear Set talk off n=1 sum=0 do while sum<=1000 sum=sum+n n=n+1 enddo ?” 满足算式1+2+3+…+n<=1000的最大的n是:”,n-1 set talk on

3.  Scan-EndScan语句 语法格式: Scan [nooptimize] [Scope] [for 条件表达式1] [while 条件表达式2] <语句组> [Loop] … [Exit] Endscan 功能说明:根据当前表中的记录数进行循环,每循环一次表记录指针向下移动一个记录,直到文件结束。

参数说明: Nooptimize:不使用Rushmore技术。 Scope:指定记录范围,该参数的取值可以是:All(所有记录)、Next n(当前记录及其之后的n个记录)、Record n(指定第n条记录)和Rest(当前记录及其之后的所有记录)。若省略该参数,缺省值为All。 for 条件表达式1:当表达式1的值为真(.T.)时循环,否则判断下一条记录。 while 条件表达式2:当表达式2的值为真(.T.)时循环,否则退出循环。

2.6 Visual FoxPro常用命令及函数 Visual FoxPro提供的各种命令和函数是用户编程的基础,正确使用这些命令和函数,不但能为数据库的操作和程序的设计提供方便,而且还有助于提高程序的设计质量,减少错误出现的机率。 2.6.1常用命令 Visual FoxPro提供了几百个命令,这些命令按功能作用又可分为:数据处理命令、数据库操作命令、文件管理命令、输出命令、程序设计命令及设置命令等几大类。

1.  数据处理命令 l   = 命令 命令格式: ① 内存变量=<表达式> 功能:将表达式的值赋给内存变量 例如:sum=123 ② 对象名.属性=<表达式> 功能:将为对象的属性值修改为表达式的值 注意在使用时<表达式>值的类型应与对象属性值要求的类型相一致。 

l  Append From Array命令 命令格式: Append From Array <数组名> [For <条件表达式>] [Fields <字段列表>] 功能:将数组中的数据添到当前表中。 参数说明: <数组名>:数组可以是一维的,也可以是二维的,若数组是一维的,则本命令只添加一条记录到表中,数组的第1个元素添加到当前表的第1个字段,数组的第2个元素添加到当前表的第2个字段,依此类推,若数组元素多于表字段数,则多余的元素被忽略,若数组元素数少于表字段数,则多出的字段取默认值或空值;如果是二维数组,则数组的每一行作为一个新记录。

For <条件表达式>:指定数组追加记录的条件,只有满足条件的数组才能被追加到表中。 Fields <字段列表>:指定追加记录时所涉及的字段,若命令中指定了该参数,则数组的第1个元素添加到<字段列表>指定的第1个字段,数组的第2个元素添加到<字段名列表>指定的第2个字段,依此类推;若数组元素的个数多于<字段列表>指定的字段数,则数组多余的元素被忽略,若数组元素的个数少于<字段列表>指定的字段数,则多出的字段取默认值或空值。在<字段列表>没有列出的字段取默认值或空值。 注:该命令对备注字段和通用字段都将忽略,即不能将备注字段和通用字段的内容用该命令复制到数组元素中。

l  Append Memo命令 命令格式: Append Memo <备注字段名> From <文件名> [OverWrite] 功能:将文本文件的内容添加到备注字段中。 参数说明: <备注字段名>:指定要操作的备注字段。 <文件名>:指定要添加到备注字段中的文本文件名。 OverWrite:有该参数,则用文本文件的内容更换备注字段原来的内容;若省略该字段,则将文本文件的内容追加到备注字段内容的后面。

l Copy Memo命令 命令格式: Copy Memo <备注字段名> To <文件名> [Additive] 功能:将指定的备注字段的内容复制文本文件的内容添加到备注字段中。 参数说明: <备注字段名>:指定要操作的备注字段。 <文件名>:指定复制的文本文件名,若省略文件扩展名,则默认的文件扩展名为.TXT。 Additive:有该参数,则备注字段的内容追加到指定文本文件的末尾,若省略该参数,则备注字段的内容覆盖文本文件原来的内容。

l  Copy To Array命令 命令格式: Copy To Array <数组名> [Fields <字段列表>] [Scope][For|While <表达式>] 功能:将当前表中的数据复制到数据中。 参数说明: <数组名>:指定将当前表中的数据复制到数组中的数组名。若指定的数组是一维的,则只有第1个满足条件的记录被复制到数组中,若指定的数组是二维的,则可将多个满足条件的记录被复制到数组中。 Fields <字段列表>:指定要复制的字段列表,若省略该参数,则缺省的是复制整个字段。

Scope:指定记录范围,该参数的取值可以是:All(所有记录)、Next n(当前记录及其之后的n个记录)、Record n(指定第n条记录)和Rest(当前记录及其之后的所有记录)。若省略该参数,缺省值为All。 For|While <表达式>:指定要复制的记录应满足的条件。 注:该命令不能复制备用字段和通用字段。

l  Declare命令 命令格式: Declare <数组名1(nR1[,nC1])[, 数组名2(nR2[,nC2])]… 功能:定义数组,该命令一次可以定义多个数组。 参数说明: 数组名n:数组名。 nRn、nCn:指定数组的大小,若省略nCn,则定义的数组是一维的,否则是二维的。 注意在Visual FoxPro中定义的数组其下标是从1开始的。 例如: Declare s1(5), s2(3,4)

l   Dimension命令 命令格式: Dimension数组名1(nR1[,nC1])[, 数组名2(nR2[,nC2])]… 说明:该命令的功能与用法与Declare命令相同,可参见Declare命令的用法。   l  Release命令 ① Release <内存变量列表> ② Release All [Extended] ③ Release All [Like Skeleton|Except Skeleton] 功能:从内存中删除内存变量和数组,并释放其所占用的内存空间。

参数说明: <内存变量列表>:指定要删除内存变量和数组。 Extended:指定从内存中释放所有公共的内存变量和数组(注:Release All、Release All Like 和Release All Except命令不释放公共的内存变量和数组)。 Like Skeleton:指定从内存中释放所有与Skeleton相匹配的内存变量和数组,Skeleton可以包含“?”和“*”。 Like Except Skeleton:指定从内存中释放所有与Skeleton不相匹配的内存变量和数组,Skeleton可以包含“?”和“*”。

 l  Store命令 命令格式: Store <表达式> To <内存变量列表> 功能:给内存变量或数组赋值,该命令一次可给多个变量或数组赋值。 例如: * 给变量var1、var2和var3赋值5 Store 5 to var1,var2,var3  

2.  文件管理命令 l  CD|Chdir 命令 命令格式: ① CD path ② Chdir path 功能:将Visual FoxPro默认的目录更改为指定的目录。 参数说明: path:指定一个目录。 例如: * 将C:\学籍管理目录设置为Visual FoxPro默认的目录 CD C:\学籍管理

l  Copy File 命令 命令格式: Copy File <源文件> to <目标文件> 功能:该命令可用来复制任何类型的文件。 参数说明: <源文件>:指定要复制源文件。 <目标文件>:指定复制目标文件。 例如: Copy File student.dbf to C:\学籍管理\std.dbf 上面的命令将Visual FoxPro默认的目录下的student.dbf文件复制到C:\学籍管理目录下,文件名为std.dbf。

功能:删除指定的文件,一次只能删除一个文件。 l  Delete File 命令 命令格式: Delete File [<文件名|?>][Recycle] 功能:删除指定的文件,一次只能删除一个文件。 参数说明: <文件名>:指定要删除的文件,若省略该参数或使用“?”,则会在执行该命令时屏幕上会出现“删除”对话框让用户从中选择一个要删除的文件。 Recycle:指定将删除的文件放到Windows的“回收站”中,若省略该参数,则直接从磁盘中将文件删除。 例如: *直接从磁盘中删除文件C:\Student\ABC.TXT Delete File C:\Student\ABC.TXT

 l  Erase命令 命令格式: Erase <文件名|?> 功能:直接从磁盘中删除指定的文件,一次只能删除一个文件。 参数说明: <文件名>:指定要删除的文件,若使用“?”,则会在执行该命令时屏幕上会出现“删除”对话框让用户从中选择一个要删除的文件。

 l  MD|MKDIR命令 命令格式: ① MD cPath ② Mkdir cPath 功能:创建一个指定的文件夹,该命令与DOS的MD命令功能相同。 参数说明: cPath:指定要创建的文件夹。 

 l  Modify Command命令 命令格式: Modify Command [<文件名|?>] 功能:创建或打开编辑指定程序文件,若指定的程序文件不存在,则会生成一个新的程序文件,程序文件的扩展名是.PRG。 参数说明: <文件名>:指定要编辑程序文件,若省略该参数,则以“程序1.Prg”作为文件名。 ?:指定打开“打开”对话框让用户从中选择或输入一个程序文件名。

l  Modify File命令 命令格式: Modify File [<文件名|?>] 功能:创建或打开编辑指定文本文件,若指定的程序文本不存在,则会生成一个新的文本文件,文本文件的扩展名是.TXT。 参数说明: <文件名>:指定要编辑程序文件,若省略该参数,则以“文件1.TXT”作为文件名。 ?:指定打开“打开”对话框让用户从中选择或输入一个文本文件名。

l Rename命令 命令格式: Rename <<文件名>1> To <<文件名>2> 功能:文件重命名,即将FileName1重新命名为FileName2。 例如:将Std.dbf更名为Student,dbf Rename Std.dbf to Student,dbf

 3.  程序设计命令 l  * 命令 命令格式: * [Comments] 功能:在程序文件中加注释。 参数说明: Comments:指定命令行中的注释内容。 说明:星号“*”必须位于一行的最开始处,表示本行是注释行,若注释内容太多,可在注释行的末尾加分号“;”,表示下一行也是注释行。

 l  && 命令 命令格式: && [Comments] 功能:在程序文件中加注释。 参数说明: Comments:指定命令行中的注释内容。 说明:“&&”是注释的开始,表示其后是注释,若注释内容太多,可在注释的末尾加分号“;”,表示下一行也是注释行。&&可不必位于一行的最开始处。 例如: * 本程序的功能是检测Student.dbf表中是否有不; 及格的学生:若有则显示:“有”,否则显示“否”

Use c:\学籍管理\学生成绩表 &&打开学生成绩表 * 依次判断每一个记录 Do while !eof() If 成绩<60 s1='有' exit Endif Skip && 指向下一个记录 Enddo && Do 循环结束 Use &&关闭打开的表 ?s1

l Cancel命令 命令格式: Cancel 功能:中止当前Visual FoxPro程序的执行。 l Do 命令 Do <程序名>|<过程名> [with <形参列表>] 功能:用来执行一个Visual FoxPro程序或过程。 参数说明: <程序名>:指定要执行的程序文件名。 <过程名>:指定要执行的过程名。

with <形参列表>:指定要传递给程序可过程的参数列表。 例如: 程序1.PRG Set talk off Do 程序2.prg with 5 Return

程序2.PRG *计算n! Parameter n && 该程序运行时需要一个参数 Private I,result Result=1 For I=1 to n Result=result*I Next ?’结果是:’,result return

l Do Form命令 命令格式: Do Form <表单名|表单集名> 功能:用来执行一个Visual FoxPro表单或表单集。 参数说明: <表单名|表单集名>:指定要执行的表单名|表单集名。   l Note 命令 Note [Comments] 功能:在程序文件中加注释。

参数说明: Comments:指定命令行中的注释内容。 说明:该命令必须位于一行的最开始处,表示本行是注释行,若注释内容太多,可在注释行的末尾加分号“;”,表示下一行也是注释行。   l On Error 命令 命令格式: On Error [Command] 功能:当程序执行出现错误时应执行的Visual FoxPro命令。

参数说明: Command:指定程序执行出错时要执行的命令,若省略该参数,恢复默认的Visual FoxPro错误处理程。 例如: Set Talk off On error Messagebox(’程序中有错!’,‘错误信息:’) Use c\student &&本行程序有错 当该程序运行时,由于第3行命令有错,屏幕上会出现一个消息框(如图2-1所示);若程序中没有On error命令,执行该程序屏幕上会出现一个系统错误框(如图2-2所示)。

图2-1 程序错误信息框 图2-2 系统错误信息框

l On Escape 命令 命令格式: On Escape [Command] 功能:按“Esc”键时要执行Visual FoxPro命令。 参数说明: Command:指定按“Esc”键时要执行Visual FoxPro命令,若省略该参数,则按“Esc”键不执行任何命令。 说明:当Set Escape命令设置为ON时,该命令才有效,设为OFF时,On Escape命令无效。

 l Quit 命令 命令格式: Quit 功能:结束当前Visual FoxPro工作期,返回Windows操作系统。 说明:最好使用Quit来结束Visual FoxPro工作期,若直接关闭计算机电源来结束Visual FoxPro工作期,可能造成已打开文件的数据丢失,另外临时工作文件也可能仍保留在磁盘中。

 l Return 命令 命令格式: Return [<表达式> ] [To Master] 功能:终止当前程序、过程或函数的执行,返回调用程序。 参数说明: <表达式>:指定要返回的值,若省略则返回“真”(.T.)。 To Master:指定将控制权返回给最高调用程序。 说明:若程序、过程或函数中没有Return,则程序、过程或函数执行完后也隐含执行一个Return命令。

  l Run|! 命令 命令格式: Run <DOS命令>|<应用程序名> 或 !<DOS命令>|<应用程序名> 功能:执行一个DOS命令或可执行程序(扩展名为.bat、.exe或.com) 参数说明: <DOS命令>:可以是DOS内部命令或外部命令。 <应用程序名>:可执行文件名。 例如:要在Visual FoxPro程序运行时打开浏览器,可在Visual FoxPro程序加入如下命令即可: Run explorer.exe 

  4.  SET设置命令 Set命令主要用来设置Visual FoxPro的运行环境,如数据格式、缺省路径等。   l  Set Bell命令 命令格式: Set Bell On|Off 功能:打开或关闭计算机喇叭。 参数说明: On:打开计算机喇叭。 Off:关闭计算机喇叭。

l  Set Carry 命令 命令格式: Set Carry On|Off 功能:设定在创建新记录时,是否将当前记录所有字段的数据复制到新记录中。 参数说明: On:复制当前记录所有字段的数据到新记录中。 Off:不复制当前记录所有字段的数据到新记录中。  

l Set Century 命令 命令格式: Set Century On|Off 功能:设定在日期显示时是用2位或是用4位显示。 参数说明: On:用2位显示日期。 Off:用4位显示日期。

例如 Set talk off Today={^2004.07.05} Set century off ?today Set century on 执行结果: 07/05/04 07/05/2004

Set Currency命令 命令格式: Set Currency to [<货币符号>] 功能:设定作为货币符号的字符串。 参数说明: <货币符号>:指定作为货币符号的字符串,系统缺省的货币符号是“$”。

l Set Database命令 命令格式: Set Database to [<数据库名>] 功能:设定或取消当前数据库。 参数说明: <数据库名>:指定作为当前数据库的数据库名,若省略该参数,则取消当前已设置的当前数据库。 说明:在Visual FoxPro中,可同时打开多个数据库,但最多只能设置一个数据库作为当前数据。

l Set Date命令 命令格式: Set Date [to] <日期格式> 功能:设置日期的显示格式。 参数说明: <日期格式>:指定日期格式。 例如将日期格式设为:yy.mm.dd Set date to Ansi

l Set Decimals 命令 命令格式: Set Decimals to [<小数位数>] 功能:设定数值表达式中要显示的小数位数。 参数说明: <小数位数>:要显示的小数位,取值范围为0~18,若省略该参数,则恢复默认值,默认值是2位小数。

例如: ?10/3 Set Decimals to 5 上面命令执行的结果为: 3.33 3.33333  

l Set Default命令 命令格式: Set Default to [<路径>] 功能:设定Visual FoxPro的默认工作目录。 参数说明: <路径>:指定要设置的默认工作目录。

l         Set Deleted命令 命令格式: Set Deleted On|Off 功能:设置在对表进行访问处理时是否包括带删除标记的记录。 参数说明: <On>:在对表进行访问处理时不包括带删除标记的记录。 <Off>:在对表进行访问处理时包括带删除标记的记录,系统的缺省是Off。

l  Set Exact命令 命令格式: Set Exact On|Off 功能:设置在对字符进行比较时是否进行精确比较。 参数说明: <On>:对2个字符串进行精确比较,比较方式是2个字符串的长度和对应字符都相同(尾部空格不算),这2个字符串才算相等,否则不等。 <Off>:对2个字符串进行一般比较,比较方式是2个字符串中只要字符串较短的一个比较结束,且其对应字符都与较长的字符串中的对应字符相同,则2个字符串相等,否则不等。

l Set Filter命令 命令格式: Set Filter to [<条件表达式>] 功能:设置在当前表中能被访问的记录应满足的条件。 参数说明: <条件表达式>:指定一个条件,只有满足条件的记录才能被子访问,若省略该参数则当前表的所有记录都能被子访问。  

l  Set Index命令 命令格式: Set Index to [<索引文件列表>] 功能:为当前表打开一个或多个索引。 参数说明: <索引文件列表>:指定要打开的索引文件,若要打开多个索引文件,则多个索引文件之间用逗号“,”隔开。

l         Set Procedure命令 命令格式: Set Procedure to [<过程文件列表>] [Additive] 功能:打开一个或多个过程文件。 参数说明: <过程文件列表>:指定要打开的过程文件,若要打开多个过程文件,则多个过程文件之间用逗号“,”隔开。 <Additive>:在打开该命令指定的过程文件时不关闭以前打开的过程文件,若省略该参数,则打开新的过程文件时会关闭以前打开的过程文件。

l Set Talk命令 命令格式: Set Talk <On|Off> 功能:设置是否在Visual FoxPro的主窗口中显示命令结果。 参数说明: <On>:在Visual FoxPro的主窗口中显示命令结果。 <Off>:在Visual FoxPro的主窗口中不显示命令结果。

 2.6.2常用函数 Visual FoxPro为用户提供了近300个函数,这些函数的应用,极大地方便了用户编程。每个函数都具有一定的操作功能,Visual FoxPro的函数其实就是一段已经编好的子程序,调用函数就是执行一个函数子程序,每个函数有一个返回值。   1.数值型函数 l   求绝对值函数 格式:Abs(<数值表达式>) 功能:返回<数值表达式>的绝对值。

l  指数函数 格式:Exp(<数值表达式>) 功能:返回以e为底的<数值表达式>次方的值, 即e<数值型表达式>。   l  对数函数 格式:Log(<数值表达式>) 功能:返回<数值表达式>的自然对数值。 说明:<数值表达式>的值不能是0或负数。

l  取整函数 格式:Int(<数值表达式>) 功能:返回<数值表达式>的整数部分,不进行四舍五入。 l  四舍五入函数 格式:Round(<数值表达式1>,<数值表达式2>) 功能:对<数值表达式1>的值四舍五入,由<数值表达式2>的值确定要保留的小数位数,若<数值表达式2>的值为小数,则先对<数值表达式2>的值取整,再确定保留的小数位数,<数值表达式2>的值为负数,表示对整数部分进行四舍五入到第几位。

l 平方根函数 格式:Sqrt(<数值表达式>) 功能:返回<数值表达式>的平方根,<数值表达式>必须大于或等于0。   l 求最大值函数 格式:Max(<表达式1>,<表达式2>) 功能:返回两个数值表达式或日期表达式中数值较大的。

l  求最小值函数 格式:Min(<表达式1>,<表达式2>) 功能:返回两个数值表达式或日期表达式中数值较小的。   l  求模函数 格式:Mod(<数值表达式1>,<数值表达式2>) 功能:返回<数值表达式1>/<数值表达式2>的余数。 l 记录号函数 格式:Recno([<数值表达式>]) 功能:返回<数值表达式>指定工作区的当前记录指针所指向的记录号,若省略<数值表达式>,则是对当前工作区进行操作。

 2.字符型函数 l  子串查找函数 格式:At(<字符串表达式1>,<字符串表达式2>[,<数值表达式>]) 功能:返回<字符串表达式1>在<字符串表达式2>中第<数值表达式>次出现的位置,如果<字符串表达式1>不是<字符串表达式2>的子串则返回0,若省略<数值表达式>,则缺省值为1。 例如: ?At('科技','电子科技大学') 结果: 5

l  空格产生函数 格式:Space(<数值表达式>) 功能:返回<数值表达式>个空格。 例如: str1 =‘ABC’+space(10)+’DEF’ ?str1 ABC DEF

l 取左子串函数 格式:Left(<字符串表达式>,<数值表达式>) 功能:返回从<字符串表达式>左边第1个字符起截取<数值表达式>个字符的子串。 例如: ?Left(‘ABCDEF’,3) ABC ?Left(‘电子科技大学’,4) 电子

l 取右子串函数 格式:Right(<字符串表达式>,<数值表达式>) 功能:返回从<字符串表达式>右边第1个字符起截取<数值表达式>个字符的子串。 例如: ?Right(‘ABCDEF’,3) DEF ?Left(‘电子科技大学’,4) 大学

 l  取子串函数 格式:Substr(<字符串表达式>,<数值表达式1>,[<数值表达式2>]) 功能:返回<字符串表达式>的子串,子串的第1个字符从<数值表达式1>开始,子串的字符个数由<数值表达式2>决定,若省略<数值表达式2>,则取到<字符串表达式>的末尾。 例如: ?Substr(‘ABCDEFG’,3,2) CD ?Subst(‘ABCDEFG’,3) CDEFG ?Subst(‘ABCDEFG’,3,50)

  l  求字符串长度函数 格式:Len(<字符串表达式>) 功能:返回<字符串表达式>的长度(即字符串中字符的个数)。 例如: ?Len(‘This is a Book.’) 15 ?Len(‘电子科大学’) 10

 l  字符串重复函数 格式:Replicate(<字符串表达式>,<数值表达式>) 功能:返回<字符串表达式>被重复<数值表达式>次所组成的字符串。 例如: ?Replicate(‘Abc’,3) AbcAbcAbc   l   删除字符串前导空格函数 格式:Ltrim(<字符串表达式>) 功能:返回去掉<字符串表达式>前导空格的字符串。 ?Ltrim(‘ Abc AbC’) Abc AbC  

  l  字符串替换函数 格式:Stuff(<字符串表达式1>,<起始位置>,<字符个数>,<字符串表达式2>) 功能:将<字符串表达式1>中从第<起始位置>开始的<字符个数>字符替换为<字符串表达式2>,形成一个新的字符串并返回。 例如: ?Stuff(‘ABCDEFG’,3,2,’56789’) ‘AB56789EFG ?Stuff(‘ABCDEFG’,3,0,’56789’) ‘AB56789CDEFG ?Stuff(‘ABCDEFG’,3,3,’’) ABFG 

   l  删除字符串尾部空格函数 格式:Trim(<字符串表达式>) 功能:返回去掉<字符串表达式>尾部空格的字符串。 例如: s1=‘ Abc AbC ’ ?Len(s1) 13 s2=Trim(s1) ?Len(s2) 11

l  删除字符串前部和尾部空格函数 格式:Alltrim (<字符串表达式>) 功能:返回去掉<字符串表达式>前导和尾部空格的字符串。 例如: ?AllTrim(‘ Abc Abc ’) Abc Abc

3.转换函数 l  求字符串的ASCII函数 格式:Asc(<字符串表达式>) 功能:返回将<字符串表达式>第1个字符的ASCII。 例如: ?Asc(‘ABC’) 65   l  ASCII码转字符函数 格式:Chr(<数值表达式>) 功能:将<数值表达式>表示的ASCII码转换为字符。 ?Chr(97) a

  l  字符串转换为日期函数 格式:Ctod(<字符表达式>) 功能:将<字符表达式>串转换为日期。 例如: v1=Ctod('04/26/04') &&v1变量存放的是日期型数据。

 l  日期转换为字符串函数 格式:Dtoc(<日期表达式>[,<表达式>] 功能:将<日期表达式>串转换为字符串,若有表达式则将返回值转换年月日的形式。。 例如: ?Dtoc(Date()) 06/24/04 ?Dtoc(Date(),1) 20040624

 l  大写转换为小写函数 格式:Lower(<字符表达式>) 功能:将<字符表达式>转换为小写并返回。 例如: ?Lower(‘This is a Book.’) this is a book.   l  小写转换为大写函数 格式:Upper(<字符表达式>) 功能:将<字符表达式>转换为大写并返回。 ?Upper(‘This is a Book.’) THIS IS A BOOK.

l  数值转换为字符串函数 格式:Str(<数值表达式1>[,<数值表达式2>,[<数值表达式3>]]) 功能:返回将<数值表达式1>转换为长度为<数值表达式2>位,小数位数为<数值表达式3>的字符串;若省略<数值表达式3>,则只取整数,若省略<数值表达式2>,则缺省字符串长度为10。 例如: ?Str(12.345,5,1) □12.3 ?Str(12.345,5) □□□12 ?Str(12.345) □□□□□□□□12

 l   求值函数 格式:Val(<字符串表达式>) 功能:返回将<字符串表达式>转换为数值的值。 例如: ?Val(‘12’) 12 ?Val(’34.56’) 34.56 ?Val(’12-2’) 12.00 ?Val(’12.34.56’) 12.34 ?Val(’12ABC’)

  4.日期和时间函数 l  取系统日期函数 格式:Date() 功能:返回计算机当前的日期。 例如: ?Date( )

 l  取系统日期函数 格式:Time([表达式]) 功能:返回计算机当前的时间,若指定一个表达式,则返回的时间可达百分之一秒。 例如: ?Time( ) 12:25:34 12:25:35:87

  l   文字星期函数 格式:Cdow(<日期表达式>) 功能:返回<日期表达式>指定日期的英文星期名。 例如: ?Cdow(Date() -10 ) Tuesday l  数字星期函数 格式:Dow(<日期表达式>) 功能:以数值形式返回<日期表达式>指定日期的星期数,1、2、…、7分别代表星期天、星期一、…、星期六。 ?Dow(Date() -10 ) 3

   l  求日函数 格式:Day(<日期表达式>) 功能:返回<日期表达式>指定日期的日的数值。 例如: ?Day({^2004.06.08}) 8   l  求月份函数 格式:Month(<日期表达式>) 功能:返回<日期表达式>指定日期的月的数值。 ?Month({^2004.06.08}) 6

  l   求年函数 格式:Year(<日期表达式>) 功能:返回<日期表达式>指定日期的年的数值。 例如: ?Year({^2004.06.08}) 2004

  5.     测试函数 l  表文件首测试函数 格式:Bof([<数值表达式>]) 功能:测试<数值表达式>指定工作区的表记录指针是否已指向文件头,若是返回.T.,否则返.F.,表第1条记录不是表文件头,指向第1条记录后再向前移动记录指针再才向表文件头,若省略<数值表达式>,则是测试当前工作区的记录是否已指向表文件头。 例如: Use student ?Bof( ) .F. Skip -1 .T.

   l  删除测试函数 格式:Deleted([<数值表达式>]) 功能:测试<数值表达式>指定工作区表的当前记录是否已作删除,若是,返回.T.,否则返回.F.,若省略<数值表达式>,则是测试当前工作区表的当前记录。   l  表文件尾测试函数 格式:Eof([<数值表达式>]) 功能:测试<数值表达式>指定工作区的表记录指针是否已指向文件尾,若是返回.T.,否则返.F.,最后1条记录不是表文件尾,指向最后1条记录后再后前移动记录指针才指向表文件尾,若省略<数值表达式>,则是测试当前工作区的记录是否已指向表文件尾。 例如:

   Use student Goto Bottom ?Eof( ) .F. Skip .T.   l  查询测试函数 格式:Found([<数值表达式>]) 功能:测试<数值表达式>最近一次查询操作是否找到了满足条件的记录,若是查询到了返回.T.,否则返回.F.,若省略<数值表达式>,则是测试当前工作区进行测试。

l  字母测试函数 格式:IsAlpha(<字符表达式>) 功能:测试<字符表达式>的第一个字符是否是字母,若是返回.T.,否则返.F.。 例如: ?IsAlpha(‘3df.’) .F. ?IsAlpha(‘good.’) .T.

 l  数字测试函数 格式:IsDigit(<字符表达式>) 功能:测试<字符表达式>的第一个字符是否是数字,若是返回.T.,否则返.F.。 例如: ?IsDigit(‘3C.’) .T. ?IsDigit(‘good’) .F.

  l   小写字母测试函数 格式:IsLower(<字符表达式>) 功能:测试<字符表达式>的第一个字符是否是小写字母,若是返回.T.,否则返.F.。 例如: ?IsLower(‘abc.’) .T. ?IsLower(‘Abc’) .F. ?IsLower(‘3wbc’)

  l   大写字母测试函数 格式:IsUpper(<字符表达式>) 功能:测试<字符表达式>的第一个字符是否是大写字母,若是返回.T.,否则返.F.。 例如: ?IsUpper(‘abc.’) .F. ?IsUpper(‘Abc’) .T. ?IsUpper(‘3wbc’)

   2.7 自定义过程与函数 在用Visual FoxPro开发应用程序时,有些功能需要在程序中多个地方多次调用,例如计算m!/(n!(m-n)!),虽然可以在程序中需要计算n!的地方都编写一段计算n!的程序代码,但这样做显然不是很好的,其缺点是程序代码多,对于后期的程序阅读、调试/测试及修改非常不便。 对于这种需要在程序中多个地方多次调用的功能代码最好的方法是将这段程序代码放在一个地方(有关的程序代码只编一次),需要时直接通过命令调用,在Visual FoxPro中使用过程和函数就可以做到这一点。

Visual FoxPro过程和函数将需多次调用的程序代码集中在一起,供程序在需要时调用。这样做提高了程序代码的可读性和维护性,即不必对程序多次多处修改,只修改过程和函数中的程序代码即可,这样做增加了程序的可读性和维护性。   2.7.1过程 l   过程的定义: 命令格式: Procedure <过程名>[([<形参列表>])] 程序代码 [Return <表达式>] EndProc

参数说明: <过程名>:指定过程名。 <形参列表>:指定过程的形式参数,若有多个参数,参数之间用逗号“,”隔开,也可以没有形式参数。 Return <表达式>:指定过程的返回。 说明:可以将一个或多个过程保存在单独的文件中,也可以保存在一般程序文件的结尾,但为便于管子理Visual FoxPro提出了过程库的概念,过程库中可以包括多个过程,过程库程序的默认扩展名是.PRG。   l 过程调用 在Visual FoxPro中,过程的调用有两种方法:

(1)   使用Do命令 命令格式: DO <过程名> [With <形参列表>] [In <文件名>] 或 <过程名>([<形参列表>]) 参数说明: <过程名>:指定要调用的过程,过程名最大可为32个字符,包括字母、数字和下划线, 一般选择一个具有一定意义且能体现过程功能的名字,并且这个名字是唯一的。 With <形参列表>:指定要传给过程的调用参数 In <文件名>:指定调用过程所在的文件名。

说明: 若使用Do命令调用过程,则要求过程名与保存过程的文件名必须相同,否则在调用过程时将出现“文件不存在”信息。 若将每个过程都分别存放在一个单独的文件中,会使应用系统的文件过多,这会给应用系统的管理带来不便,可以使用过程库将多个过程放在一个过程库文件中,要调用过程库中的过程时,选打开过程库文件,再调用其中的过程。 打开过程文件的命令格式: Set Procedure to <过程文件名>

例如: Mymain.prg * 这是主程序 Set Talk off Clear Set Procedure to procLib &&打开过程文件 Do proc1 with 5 && 调用过程proc1 proc1(6) && 调用过程proc1 Close Procedure &&关闭过程文件 procLib.prg Procedure proc1(n) &&定义过程proc1:计算N! if n<0 do Errorproc

return –1 endif   s = 1 For i = 1 to n s = s * i Endfor ?n,”!=”,s EndProc Procedure proc2(m) &定义过程proc1:计算1+2+3+…+n! if m<0 do proc2

sum = 0 For i = 1 to m Sum = sum+ i Endfor ?”Result=”,Sum EndProc Errorproc.prg Procedure Errorproc &&定义过程Errorproc Messagebox(‘不能计算负数的阶乘。’,’错误信息:’) 在Visual FoxPro的命令窗口中执行“Do Mymain.prg”,运行结果如下: 5! = 120 6! = 720

2.7.2 自定义函数 l 函数的定义 命令格式: Function <函数名>[([参数列表])] 程序代码 [Return <表达式>] EndFunc 参数说明: <过程名>:指定函数名。 <形参列表>:指定函数的形式参数,若有多个参数,参数之间用逗号“,”隔开,也可以没有形式参数。 Return <表达式>:指定函数的返回。

说明:可以将一个或多个函数保存在单独的文件中,也可以保存在一般程序文件的结尾,但为了便于管理,也可以将多个函数放在过程文件中。 例如: main.prg Set talk off Clear Set procedure to calculate_Area R=2 Edge = 2 Area1=GetCircleArea(R) Area2=GetsquareArea(Edge) ?’半径为2的圆的面积是:’,Area1 ?’边长为2的正方形的面积是:’,Area2

Close procedure calculate_Area.prg Function GetCircleArea(R) Return 3.14*R*R EndFunc Function GetsquareArea(Edge) Return Edge*Edge 在Visual FoxPro的命令窗口中执行“Do main.prg”,运行结果如下: 半径为2的圆的面积是: 12.56 边长为2的正方形的面积是: 4