-
1 本章重点
-
2 章节任务
-
3 上机指导书
-
4 数据操作
-
5 函数操作
第二章 VisualFoxPro6.0语言基础
掌握以下重要根念
数据类型(13种 类型名称及字母、常用的 C N D L M五种)
数据存储形式:常量、变量、函数、表达式
数据存储的级别:字符、字段、记录、文件、对象
考纲要求:

课件:
章节任务
数组变量:
定义数组命令:declare或者dimension命令
dimension ar (10) &&定义一个一维数组ar,该数组有10个元素,数组下标从1开始。
display memory &&已定义一个变量,数组不管有多少个元素,显示内存变量时只算一个变量,但每一个数组元素都可以象一个普通内存变量一样来使用。
dimension ab[3,2] &&定义一个二维数组ab,该数组有6个元素。
display memory &&用户定义的数组但没有赋值,系统自动初始化其值为逻辑假.F
注:二维数组在内存中以行主序方式存放,即先顺序存储第1行的数据元素,再顺序存储其他行的数据元素,可以用一维数组(下标为其排列序号)的方式来访问,即:
第1个元素:ab[1,1]
第2个元素:ab[1,2]
第3个元素:ab[2,1]
第4个元素:ab[2,2]
第5个元素:ab[3,1]
第6个元素:ab[3,2]
ab[1,1]可以看作是ab[1]、ab[1,2] =ab[2] , ab[2,1]= ab[3] , ab[2,2]= ab[4] ,ab[3,1]= ab[5] ab[3,2]= ab[6]
Vfp命令格式
1. 命令格式
命令动词 [命令参数]
命令动词表示“做什么?”,而命令参数则表示“如何做?”。命令动词和命令参数中出现的关键字、函数、系统变量、属性、事件、方法程序、预处理器指令及运算符等,都作为VFP的保留字。在编程时,要避免使用保留字作为名称(例如,窗口、表和字段名),否则,将会产生语法错误。
命令格式中的符号约定:
命令中的[ ] 、| 、…、< > 符号都不是命令本身的语法成分,使用时不能照原样输入,其中:
[ ] 表示可选项,根据具体情况决定是否选用
| 表示两边的部分只能选用其中的一个
… 表示可以有任意个类似参数,各参数间用逗号隔开
< > 表示其中内容要以实际名称或参数代入
2. 命令规则:
(1)每条命令以命令动词开头,必须严格符合VFP的命令语法格式。
(2)命令中的子句可以有多个,各子句间由若干个空格隔开并允许按任意次序排放。
(3)命令行的总长度包括空格在内最大可达8192个字符。
(4)命令动词和VFP保留字均可用4个以上字母简写。
(5)命令输入时,可以以小写、大写和大小写混合等多种形式。
(6)程序设计时,如果命令语句太长,可分几行书写,但每行(最后一行除外)末尾要使用一个分行符“;”。
第一、二章上机指导书
| 1 |
|
| 2 | ![]() |
| 3 | ![]() |
| 4 | ![]() |
| 5 | ![]() |
| 6 | ![]() |
| 7 | ![]() |
| 8 | ![]() |
| 9 | ![]() |
| 10 |
|
| 11 | ![]() |
| 12 | ![]() |
| 13 | ![]() |
| 14 | ![]() |
| 15 | ![]() |
| 16 | ![]() |
数据操作常用知识及案例:
1.3 数据及数据运算
1.3.1常量
1.数值型常量:由数字0-9、小数点、正负号组成。
例如:12、3.45、-8、1.6E-12
2.货币型常量:用来表示货币值,其书写格式与数值型常量类似,但需要加上一个前置的符号($),货币数据在存储时采用4位小数,若多于四位则自动对多余的小数四舍五入。
例如:$123.456789将存储为$123.4568
3.字符型常量:由一些字母、汉字、阿拉伯数据组成。其表示方法是用半角的单引号、双引号或方括号把字符串括起来。
例1.2:显示几个字符型常量
在命令窗口中键入以下命令
?“abc” ,’数据库文件’、[“123”]
回车执行后在屏幕上显示结果以下:
abc 数据库文件 “123”
4.日期型常量:表示日期,用花括号({})括起。
(1)SET MARK TO [日期分隔符]
功能:指定输出(显示)时的日期分隔符。如“—”“.”等。默认时为斜杠分隔符
(2)SET CENTURY ON/OFF
功能:ON 输出年份为4位,OFF输出年份为2位。
(3)SET DATE TO CY
功能:设置输出的年月日格式。
CY:各种常用日期格式短语,如下表1.1:
短语 格式 短语 格式
AMERICAN mm/dd/yy ANSI yy.mm.dd
BRITISH/FRENCH dd/mm/yy GERMAN dd.mm.yy
ITALIAN dd-mm-yy JAPAN yy/mm/dd
USA mm-dd-yy MDY mm/dd/yy
DMY dd/mm/yy YMD yy/mm/dd
表1.1
例1.3:设置不同的日期格式
在命令窗口中键入如下命令:
SET CENTURY OFF
SET MARK TO “.”
SET DATE TO MDY
?{^2001-08-06}
回车执行后,屏幕显示:
08.06.01
5.逻辑型常量:只有“真”、“假”两值
真:.T. .t. .Y. .y.
假:.F. .f. .N. .n.
1.3.2变量
变量是更够随时更改的。VFP变量分为内存变量、字段变量两大类。
1.内存变量:
(1)概念:
内存变量是内存中一个存储区域,变量的值就是存放在这个存储区域里的数据,变量的类型取决于变量值的类型。
(2)特点:
①变量的类型取决于变量值的类型;
内存变量数据类型包括:字符型(C)、数据型(N)、货币型(Y)、逻辑型(L)、日期型(D)、日期时间型(T)6种。
②在使用前不必进行特殊的声明或定义;
③变量的值和类型通过赋值来完成;
④重新赋值将改变原来的值和类型;
例1.4:a=100
?a
回车后拍屏幕显示:100
a=“你好!”
?a
回车后屏幕显示:你好!
⑤每个变量都有个名字,可以通过变量名访问变量;
⑥当VF退出或关机时,内存变量将随之消失。
(3)内存变量的赋值
格式1:内存变量=<表达式>
功能:先计算表达式的值,再赋给内存变量。
格式2:STORE <表达式> TO <内存变量表>
功能:先计算表达式的值,再赋给表中每个变量。
(4)显示及内存变量
格式2:LIST /DISPLAY MEMORY [LIKE <通配符> ] [TO PRINT /TO FILE <文件名>
功能:显示内存变量的变量名、作用域、类型、取值等信息。
格式: SAVE TO <内存变量文件名>[ALL [LIKE/EXCEPT <通配符>] ︱︱
功能:将满足条件的内存变量保存到指定内存变量文件中,文件的扩展名为.mem。
(5)清除内存变量
格式1:RELEASE <内存变量表>︱︱
功能:清除指定的内存变量。
格式2:RELEASE ALL [LIKE/EXCEPT <通配符>] ︱︱
功能:清除满足条件的内存变量。
格式3:CLEAR MEMORY
功能:清除当前所有的内存变量(同RELEASE ALL)。
格式4:CLEAR ALL
功能:清除当前所有内存变量,同时关闭已打开的数据库表、索引文件等一系列文件。
2.字段变量
(1)概念:
表中的各条记录在同一个字段名中有不同的取值,这个字段名称为字段变量,字段名下的取值,称为字段变量的取值。
例1.5:学生商品表中有“商品名称”字段,该字段下有牛奶、署片等食品的名称。
“食品名称”称为字段变量
具体食品(牛奶、署片…… )称为字段变量的取值
(2)字段变量的数据类型(13种):
字符型、数据值型、浮点型、逻辑型、日期型、备注型、通用型、货币型、日期时间型、双精度型、整型、字符型(二进制)、备注(二进制)
3.数组
数组与内存变量不同,必须先定义再使用。
1)定义数组
格式1:DIMENSION <数组名> (<下标1>,<下标2>)…
格式2:DECLARE <数组名> (<下标1>,<下标2>)…
注:两种格式功能完全相同,定义后,系统自动赋予“假”(.F.)值。
1.3.3表达式
1.算术运算符及表达式
(1)算术运算符(7种):
+、-、*、/、**或^、%、()
注:优先级 :()> **或^> *、/、 %> +、-
(2)数值表达式:
用算术运算符将数值型数据连接起来的式子
例1.6: ①2*3+4 ②2**3+5 ③3+2^(1+2)
④15%4 ⑤15%-4
2.字符运算符及表达式
(1)字符运算符(2种)
①+:前后两个字符串首尾连接形成一个新的字符串;
②-:连接前后两个字符串,并将前字符串的尾部空格移到合并后新的字符串尾部。
注:优先级相同!
(2)字符表达式:
用字符运算符将字符型数据连接起来的式子。
例1.7: a=”hello ”
b=”everyone!”
?a+b,a-b
回车后屏幕显示为:hello everyone! Helloeveryone!
3.日期时间运算符及表达式
(1)日期时间运算符(2种)
可以使用的运算符也有两个:“+”和“-”
(2)日期时间表达式 表1.2
格式 结果及类型
日期+天数 日期型。指定日期若干天后的日期
天数+日期 日期型。指定日期若干天后的日期
日期-天数 日期型。指定日期若干天前的日期
日期-日期 数值型。两个指定日期相差的天数
日期时间+秒数 日期时间型。指定日期时间若干秒后的日期时间
秒数+日期时间 日期时间型。指定日期时间若干秒后的日期时间
日期时间-秒数 日期时间型。指定日期时间若干秒前的日期时间
日期时间-日期时间 数值型。两个指定日期时间相差的秒数
表1.2
例1.8:?{^2001-03-19}+10,{^2001-03-19}-{^2000-03-19}
回车后屏幕显示为:03/29/01 365
4.关系运算符及表达式
(1)关系运算符(8种):<、>、=、<>或 # 或 !=、<=、>=、= =、$
注:优先级相同!
(2)关系表达式:
<表达式1> <关系运算符> <表达式2>
例:5+3>2
①数据型和货币型的数据比较
例:0>-1 , $150>$105
②日期或日期型数据比较
例:{^2002/01/10}>{^2001/12/28}
③逻辑型数据比较
例:.T.>.F.
④子串包含测试
格式:<左边字符型表达式>$<右边字符型表达式>
功能:测试左边是否为右边的子串。
例:a1=“abc”
a2=“abcd”
?a1$a2 , a2$a3 , (a1$a2) > (a2&a1)
⑤字符串比较
设置字符比较次序的命令是:SET COLLATE TO “<排序次序名>”
a.Machine(机内码)次序:字符按ASCII码值比较(小写字母>大写字母>空格),汉字按拼音顺序比较。
例如:“abc”> “abcd”、“b”> “B”、“c”< “ c”、“张”> “李”
b.Pinyin(拼音)次序:汉字按拼音顺序比较,字符按大写字符>小写字符>空格进行比较。
例如:“a”< “A”
c.Stroke(笔画)次序:按笔画的多少排序。
例如:“李”<“王”、“a”<“t”
⑥字符串精确比较
a.== 只有两个字符串完全相同,运算结果才是逻辑“真”(.T.)
例如:“abcd”==“abcd”
b.= 运算结果与SET EXACT ON/OFF设置有关
系统默认OFF状态。当处于OFF状态时,只要右边的字符串与左边的字符串的前面部分内容相匹配,其运算结果就是真值(.T.)。
当处于ON状态时,只有两个字符串完全相同,运算结果才是逻辑“真”(.T.)
例如:“abcde”=“abc”、 “ abc”=“ ”
5.逻辑运算符及表达式
(1)逻辑运算符(3种):
NOT或!、AND、OR
注:优先级:NOT或!>AND>OR
(2)逻辑表达式:
由逻辑运算符将逻辑型数据连接起来的式子。
6.优先级
不同类型的运算符出现在同一个表达式中时,他们的运算优先级顺序为:先执行算术运算符、字符串运算符和日期运算符,其次执行关系运算符,最后执行逻辑运算符。
圆括号作为运算符,可以改变其他运算符的运算次序。圆括号中的内容作为整个表达式的子表达式,其结果首先要被计算出来。所以圆括号的优先级最高。
1.3.4常用函数
1.函数的分类:
①函数分为:自定义函数和系统函数
②表示方法:函数名(形参)
③系统函数分类: (14类)
数值函数、字符函数、日期函数、类型转换函数、测试函数、表和数据库函数、菜单函数、窗口函数、SQL查询函数、位运算函数、对象特征函数、文件处理函数、系统调用函数。
2.常用函数举例
(1)数值函数
①求平方根函数
格式:SQRT (<数值表达式>)
功能:返回表达式的平方根,表达式的值不能为负数。
例1.9:?SQRT(5-3),SQRT(100),SQRT(2*sqrt(64))
1.41 10.00 4
②圆周率函数
格式:PI ( )
功能:返回圆周率π的值。
例1.10:?PI( ),PI( )*10
3.14 31.42
③取整函数
格式:INT(<数值表达式>)
CEILING (<数值表达式>)
FLOOR(<数值表达式>)
功能:int( )返回数值表达式的整数部分。
CEILING( )返回大于或等于数值表达式的最小整数。
FLOOR( )返回小于或等于数值表达式的最大整数。
例1.11:X=5.8
?INT(X),INT(-X),CEILING(X),CEILING(-X),FLOOR(X),FLOOR(-X)
5 -5 6 -5 5 -6
④四舍五入函数
格式:ROUND (<数值表达式1>,<数值表达式2 >)
功能:返回表达式在指定位置四舍五入的结果。
若<数值表达式2>≥0,则它表示保留的小数位数;否则它表示整数部分的舍入位。
例1.12:?ROUND(12.5,0),ROUND(12.1,0)
? ROUND (-1.2,2), ROUND (345.25,-1), ROUND (365.25,-2)
-1.20 350 400
⑤求余数函数
格式:MOD(<数值表达式1>,<数值表达式2>)
功能:返回两个数值表达式相除的余数。
例1.13:? MOD (10,3), MOD (10,-3), MOD (-10, 3), MOD (-10,-3)
1 -2 2 -1
⑥求最大值和最小值函数
格式:MAX(<数值表达式1>,<数值表达式2>,…)
MIN(<数值表达式1>,<数值表达式2>,…)
功能:计算完表达式的值后,返回最大(最小)的值。
例1.14: ?MAX(5+1,10*2,3*3),MIN(“abc”, “ABC”)
20 ABC
(2)字符函数
①空格字符串生成函数
格式:SPACE(<数值表达式>)
功能:返回一个完全由空格组成的字符串,空格数由数值表达式给出。
例:?SPACE(2)
②求字符串长度函数
格式:LEN(<字符表达式>)
功能:返回指定字符表达式的长度,即所含的字符个数,函数值为数值型。
例:?LEN(“abcd 1234”)
③大小写转换函数
格式:LOWER(<字符表达式>)
UPPER(<字符表达式>)
功能:LOWER( )将字符表达式的大写字母换成小写字母,其它字符不变;
UPPERr( )将字符表达式的小写字母换成大写字母,其它字符不变。
例1.15:?LOWER (“abc123XY”),UPPER(“XY123ab”)
abc123xy XY123AB
④删除前后空格函数
格式:TRIM(<字符表达式>)
LTRIM(<字符表达式>)
ALLTRIM(<字符表达式>)
功能:TRIM( )返回字符表达式去掉尾部空格后形成的字符串;
LTRIM( )返回字符表达式去掉前导空格后形成的字符串;
ALLTRIM( )返回字符表达式去掉前导和尾部空格后形成的字符串。
例1.16:ss=SPACE(1)+ “test”+SPACE(3)
?TRIM(ss)+LTRIM(ss)+ALLTRIM(ss)
?LEN(ss),LEN(trim(ss)),LEN(ltrim(ss),LEN(alltrim(ss))
8 5 7 4
⑤取子串长度函数
格式:LEFT(<字符表达式>,<长度>)
RIGHT(<字符表达式>,<长度>)
SUBSTR(<字符表达式>,<起始位置>[,<长度>])
功能:LEFT( )从字符表达式的左端取一个指定长度的子串;
RIGHT( )从字符表达式的右端取一个指定长度的子串;
SUBSTR( )从字符表达式的指定起始位置取指定长度的子串,在没有<长度>时,则从指定位置开始选取直到最后一个字符。
例1.17:STORE “Good Bye!” TO X
?LEFT(X,2),SUBSTR(X,6,2)+SUBSTR(X,6),RIGHT(X,3)
Go ByBye! Ye!
(3)日期函数
①年份、月份和日函数
格式:YEAR(<日期表达式>/<日期日期型表达式>)
MONTH (<日期表达式>/<日期日期型表达式>)
DAY(<日期表达式>/<日期日期型表达式>)
功能:三个函数分别返回表达式中的年份、月份和日。
例:a={^2006/03/08}
?YEAR(a),MONTH(a),DAY(a)
2006 3 8
②系统日期函数
格式:DATE()
功能:返回系统当前日期,函数值为日期型。
例如:? DATE( )
③类型转换函数
将字符串转换为日期函数
格式:CTOD(<字符表达式>)
功能:将字符表达式的值转换为日期型数据。
例:?CTOD(“10/18/99”)
10/18/99
(4)数值转换为字符串函数
格式:STR(<数值表达式>,[n],[m])
功能:将数值表达式转换成字符串,转换后的字符串总的位数为n位,保留m位小数。
注:① n省略,系统默认为10;
② m省略,系统默认为0;
③ n小于整数部分的宽度,返回n位星号(*);
④ 转换时根据需要自动四余五入。
例1.18:a=1234.567
?STR(a,10,3),STR(a,7,3),STR(a,3,3),str(a)
1234.567 1234.57 *** 1235
(5)将ASCII码转换为对应字符函数
格式:CHR(<ASCII码值>)
功能:将ASCII码值转换为对应的字符。
例:?CHR(65)
(6)测试函数
①表文件尾测试函数
格式:EOF( )
功能:测试记录指针是否指向文件尾,若是则返回.T.,否则返回.F.。
例1.19:USE 商品
GO BOTTOM
EOF )
SKIP
?EOF( )
②表文件首测试函数
格式:BOF( )
功能:测试记录指针是否指向文件首,即第一条记录之前的文件起始标志,若是则返回.T.,否则返回.F.。
例1.20:USE 商品
GO TOP
?BOF( )
SKIP -1
?BOF( )
③记录号测试函数
格式:RECNO( )
功能: 返回当前表文件的当前记录(即记录指针所指的记录)的记录号。
注:若没有表文件被打开,函数返回值为0。
④记录个数测试函数
格式:RECCOUNT([<工作区号>|<表别名>)
功能:返回当前表文件或指定表文件中的记录个数。若指定工作区上没打开表文件,函数返回值为0
⑤条件测试函数
格式:IIF(<逻辑表达式>,<表达式1>,<表达式2>)
功能:测试<逻辑表达式>的值,若为真,函数返回<表达式1>的值,若为假,函数返回<表达式2>的值
⑥记录删除测试函数
格式:DELETE([<表的别名>|<工作区号>])
功能:测试指定的表,或在指定工作区中所打开的表,记录指针所指的当前记录是否有删除标记“*”。若有为真,否则为假。
⑦值域测试函数
格式:BETWEEN([<表达式T>,<表达式L>,<表达式H>])
功能:判断一个表达式的值是否介于另外两个表达式的值之间。当<表达式T>的值大于等于<表达式L>且小于等于<表达式H>时,函数值为逻辑真,否则函数值为逻辑假。
注意:三个表达式的类型必须一致。
例1.21:STORE .NULL. TO X
STORE 100 TO Y
?BETWEEN(150,Y,Y+100), BETWEEN(90,X,Y)
.T. . NULL.
⑧空值测试函数
格式:ISNULL([表达式])
功能:判断一个表达式的运算结果是否为NULL,若是返回真,否则为假
例1.22:STORE NULL TO X
?X,ISNULL(X)
.NULL. .T.
大纲函数全功能介绍:
字符运算函数
字符运算函数指函数运算功能与字符型数据有关的函数,在这类函数中自变量大多都是字符型数据。字符串括号可选用双引号″″、单引号' '、方括号[ ]之一均可。
1.字符串检索函数
函数格式:AT(〈字符串1〉, 〈字符串2〉[,〈算术表达式〉])
函数功能:检索字符串1在字符串2中从左边数第N(算术表达式值为N)次出现的位置数值。未选算术表达式项,默认值为1,位置从字符串2左边计数。
若字符串1在字符串2中未出现,返回值为0。
例如:?AT('UNIVERSITY', 'NORTHWEST UNIVERSITY') 结果为11
?AT('T', 'NORTHWEST UNIVERSITY',2) 结果为9
函数格式:RAT(〈字符串1〉, 〈字符串2〉[,〈算术表达式〉])
函数功能:检索字符串1在字符串2中从右边数第N(算术表达式值为N,默认值为1)次出现的位置数,位置从字符串2左边计数。
若字符串1在字符串2中未出现,返回值为0。
例如:?RAT(′UNIVERSITY′, ′NORTHWEST UNIVERSITYUNIVERSITY′) 结果为21
2.求串长函数
函数格式:LEN(〈字符串表达式>〉
函数功能:可计算出字符串表达式所表示的字符串中的字符个数,结果值是一正整数。
字符串表达式形式可为字符串,也可是字符型的字段变量或者是字符型内存变量。
例如:STORE “王小红” TO 姓名
?LEN (姓名)
系统回答:姓名这个内存变量存储的字符串长度为6
3.求出现次数的函数
函数格式:OCCURS(〈字符串1〉, 〈字符串2>〉)
函数功能:可计算出字符串表达式1在字符串2中出现次数,结果值是一正整数。
例如: ?OCCURS('T', 'NORTHWEST UNIVERSITY') 结果为3
4. 取子串函数
函数格式:SUBSTR(〈主字符串〉,〈子串开始位置〉〔,〈子串字符个数〉〕)
函数功能:从主字符串中取一子串。其中,第一参数可是字符型的字段变量或内存变量或字符常量,第二参数用以指定子串的开始位置,第三参数用以指定子串长度。当第二项值大于字符串中字符个数时,则得到一空串。当子串长度大于起始位置到串结束的宽度时,子串取到主串结束为止。若省略第三项时,则从起始位置开始,取到主串结尾为止。
例:? SUBSTR(“世界经济”,5,4)
结果为:经济 (显示子串的结果)
5. 压缩空格函数
函数格式:TRIM 〈字符串表达式〉同RTRIM〈字符串表达式〉
函数功能:删除字符串尾部空格。
例:假定“系名”字段宽度为10位,
?TRIM(系名+班级)
经济系 会计98班
(结果中系名占10个字符的位置,不满则右补空)
6.大/小写字母转换函数
函数格式:UPPER(〈字符型表达式〉)
LOWER(〈字符型表达式〉)
函数功能:UPPER函数将(字符型表达式)所表示的字符串中的字母都变成大写, LOWER函数则将(字符型表达式)所表示的字符串中的字母都变成小写。
例: ? UPPER('This is a school')
THIS IS A SCHOOL 结果已将字符串中所有字母都变成了大写字母。
7.空格生成函数
函数格式:SPACE(〈数字表达式〉)
函数功能:生成一个由空格字符组成的字符串,空格字符的个数由数字表达式的值确定,且产生的空格个数不大于254。
例如: ? '中国'+SPACE(5)+ '西安'
中国 西安 (在中国和西安之间插入5个空格)
函数格式: REPLICATE(<字符表达式>,〈数字表达式〉)
函数功能:将字符表达式重复N次并生成一个字符串返回。
例REPLICATE (”_”,40) 结果生成40个下划线的字符串。
8.宏替换函数&
函数格式:&<字符变量>
函数功能:取字符变量内容
例如:X='西大'
P = '&X同学们,新年好!' (P的内容为:西大同学们,新年好!)
2.数学运算函数
数学运算函数的特点是参加运算的自变量是数值型变量,得到的结果是数值常数。这里只介绍最常用的6个函数。
1.取整函数INT
函数格式:INT(〈算术表达式〉)
函数功能:先计算算术表达式的值,只取它的整数部分。
例:STORE 127.456 TO X (X内存变量内容127.456)
? INT(X)
127 (显示取整后内容为127)
2.四舍五入函数ROUND
函数格式:ROUND(〈算术表达式〉,〈保留小数位i〉)
函数功能:先计算算术表达式的值,再对保留小数位后的小数进行四舍五入处理。即当保留位数i> 0,则保留i位小数,第i+1位四舍五入处理。当保留位数i=0,则对第一位小数四舍五入取整数。当保留位数i<0,取i的绝对值作为原数整数部分舍入的位数。
例:? ROUND (14.745321,2)
结果是 14.750000 (对14.745321保留2位小数,结果为14.75)
3.取模函数MOD
函数格式:MOD(〈算术表达式1〉,〈算术表达式2〉)
函数功能:求〈算术表达式1〉除以〈算术表达式2〉的余数。
注意:余数的符号和〈算术表达式2〉相同,即除数值>0,余数为正, 除数值<0,余数为负。
例:? MOD(100,3) 结果为1
? MOD(100,-3) 结果为-2
注:如果被除数与除数不能整除,且被除数与除数异号,则结果为被除数除以除数而得到的余数再加上除数,即MOD(x1,x2)=x1-INT(x1/x2)*x2+x2。
4. 符号函数SIGN
函数格式:SIGN(〈算术表达式〉)
函数功能:根据〈算术表达式〉的计算结果返回不同的函数值。值大于0,函数结果为1;值等于0,函数结果为0;值小于0,函数结果为-1。
5. 随机函数RAND()
函数格式:RAND()
函数功能:产生一个0-1之间的随机数。
问题:若需要产生10-20之间的随机数该如何做?
3.日期与时间函数
此类函数涉及到与日期、时间有关的运算。
下面函数举例中的当前日期以2003年11月20日为准。
1.系统日期函数DATE
函数格式:DATE()
函数功能:给出引导操作系统时置入的日期,格式为MM/DD/YY,其中MM表示月份,DD表示日 ,YY表示年,都是两位数。
例:?DATE() 显示结果为11/20/03。
2.月份名函数CMONTH
函数格式:CMONTH(〈日期型表达式〉)
函数功能:给出日期型表达式所表示日期中月份名字。在西文FoxPro中,显示为英文的月份名,在中文版的VisualFoxPro,显示结果为汉字的月份名。
例:?CMONTH(DATE( )) 结果为: November
3.月份数函数MONTH
函数格式:MONTH(〈日期型表达式〉)
函数功能:求出日期表达式中月份的数字,此函数与上面求月份名函数的区别在于,一个结果类型为数字,一个结果类型为字符。
例:?MONTH(DATE( )) 结果为:11
4.星期几函数CDOW/DOW
函数格式:CDOW(〈日期型表达式〉) DOW〔〈日期型表达式〉〕
函数功能:CDOW给出星期几的英文名(或汉字的星期几),而DOW则给出星期几的数字。特别注意,星期几的数字排列的顺序与我们习惯的表示有所不同,星期日到星期六分别表示1、2 、3、4、5、6、7。
例:? CDOW(DATE ( )) 结果为:Thursday
? DOW(DATE ( )) 结果为:5
5.日期函数DAY
函数格式:DAY(〈日期型表达式〉)
函数功能:可给出日期型表达式所表示的日期号,其表达式范围为1~31。
例:? DAY(DATE ( )) 结果为:20
6.年份函数YEAR
函数格式:YEAR(〈日期型表达式〉)
函数功能:可求出日期型表达式的年份值,结果年份为数值类型且用四位数字表示。
例: ? YEAR (DATE( )) 结果为:2003
7.系统时间函数TIME
函数格式:TIME( )
函数功能:可按时∶分∶秒(即hh∶mm∶ss)的形式显示系统当前时间,系统时钟的初值可在引导操作系统时由人工设置。
4.转换函数
转换函数有三类,字符与对应的ASCII码间的转换;数值型与字符型间的转换;字符型与日期型间的相互转换。下面就三类转换的6种函数逐一介绍。
1.字符与ASCII码转换函数ASC
函数格式:ASC(〈字符型表达式〉)
函数功能:求出此字符型表达式所表示的字符串左边第一个字符对应的ASCII码值。ASCII码值是以十进制表示的,故函数的结果为数值型。
例:? ASC ('A') 结果是65
? ASC ('ABC')结果是65(串的头字符A,故与上函数值相同)
2.ASCII码值对其字符转换函数CHR
函数格式:CHR(〈算术表达式〉)
函数功能:计算出算术表达式的值,其值要求是0~255之间的整数。再将该数转换成其对应的ASCII字符,故此函数值为字符型。
例:? CHR (65) 结果是A
3.数值型转换成字符型函数
函数格式:STR(〈数字型表达式〉(,〈长度〉)(,〈小数位数〉))
函数功能:把数值型表达式的值转换成字符型数据。其中,“长度”项决定输出字符串的字符个数,包括小数点和小数部分,“小数位数”决定小数部分输出的位数,如无此项,原数据中的小数部分将被舍弃。若“长度”项规定的长度不足以表示该数,结果将输出一串“* ”。
例:? STR(153.7,5,1) 结果是: 153.7 (类型为字符型)
4.字符串转换为数值函数VAL
函数格式:VAL(〈字符串〉)
函数功能:将由数字、正负号、小数点组成的字符串转换成数值。转换结果是该串左起有数值意义的部分。当字符串全是非数字字符时,函数值为0;当字符串前面为数值形式而字符后面为非数字字符时,函数从左截取串中数字的部分转换成数值。
例:? VAL('B=12') 结果是:0 (因为左部非数字)
? VAL('587ABFV') 结果是:587
5. 字符型转换为日期型函数CTOD
函数格式:CTOD(〈字符型表达式〉)
函数功能:把字符串转换成日期型数据,其中字符串必须是mm/dd/yy的月日年顺序,若字符串的内容与合法日期不符,则结果值为日期型的定义格式: / / 。
例:T=CTOD ('11/02/03')
? T+10
结果是:11/12/03
由此例可看出,T 是日期型的,日期型中的加是天数的运算,故能按天加,并自动变动月份年份值。注意,日期型内存变量只能借助CTOD函数或{ }格式来定义。
6.日期型转换成字符型函数DTOC
函数格式:DTOC(〈日期型表达式〉)
函数功能:把日期型数据转换成字符型数据。
例:? DATE( )结果是 11/20/03
? DTOC(DATE( ))+ '10'
结果是:11/20/0310 (因为是字符型数据连接,故是字符型运算)
5.状态检验函数
此类函数又叫测试函数,利用它们可以掌握系统的某些实时状态。状态检验函数在管理系统程序设计中非常有用。常用的状态检验函数可分为与库文件有关的函数,表达式类型函数,打印机屏幕位置有关的函数。
1.文件存在测试函数FILE
函数格式:FILE('〈文件名〉')
函数功能:引号中指定的文件名若存在,函数值为 .T.,否则给出逻辑值为 .F.,文件名的扩展名不能缺省。
例:现有名为“LLTJ.DBF”的文件在A驱动器软盘里。
? FILE (“A:LLTJ.DBF”) 结果为 .T.
? FILE(“C:LLTJ.DBF”) 结果是 .F.
2.文件起始测试函数
函数格式:BOF( )
函数功能:测试当前记录是否为库文件的开始标志,若是则返回值为 .T.,否则返回值为 .F.。例:设GZ.DBF为非空数据库
USE GZ&&打开GZ数据库
? BOF( ) 结果为 .F. (打开库当前记录为第一记录处)
SKIP -1 (指针上退一个记录)
? BOF( ) 结果是 .T. (当前指针指向文件开始标志)
由上面例子可以看出,此函数可测试当前记录指针反向定位时是否移过库文件中的第一个记录,若移过则函数值为真,反之为假,因而这个函数特别适用于进行逆序查找库文件记录,以BOF( )为真做为查找过程的终止条件。
3.文件结束测试函数EOF( )
函数格式:EOF( )
函数功能:当前记录指针指向库文件结束标志,此函数值为真,反之为假。类似文件开始标志测试,此函数测试正向定位时当前记录指针是否越过库文件中最末记录。
例:设GZ数据库共有10个记录
USE GZ.
GOTO 10
? EOF( ). 结果为 .F.
SKIP
? EOF( ) 结果为 .T.
4.记录删除标记测试函数
函数格式:DELETED( )
函数功能:测试当前记录是否带有删除标志。若当前记录已打上删除标志,函数值为.T., 否则为.F.。(记录删除标志是通过DELE句子置入)
例:USE gz
? DELETED( ) 结果为 .F. (表示第一记录未有删除标志)
DELETE (给当前记录加删除标志)
主窗口出现: 1 record deleted (1记录被删除)
? DELETED( ) 结果为 .T.
5.当前记录号函数
函数格式:RECNO( {<expN>} )
函数功能:无可选项,给出打开数据表的当前记录序号。有可选项, 给出<expN>号工作区打开表的当前记录序号。
若表文件中无记录,则函数值为1。打开表文件时 ,当前指针指出第一个记录。
例:USE A:GZ
? RECNO( )
GOTO 10
? RECNO( ) 结果是: 10
SKIP
主窗口出现提示:记录超出范围(因只有10个记录)
6.表文件记录总数函数
函数格式:RECCOUNT({<expN>})
函数功能: 无可选项,给出当前打开表的记录总数。有可选项, 给出<expN>号工作区打开表的记录总数。
7.表文件字段数目函数
函数格式:FCOUNT({<expN>})
函数功能: 无可选项,给出当前打开表的字段个数。有可选项, 给出<expN>号工作区打开表的字段数。
以上7种函数都与表文件有关。
8.屏幕行坐标函数
函数格式:ROW( )
函数功能:给出当前屏幕光标所处位置的行坐标
例:? ROW( ) 结果为 3
@ ROW( )+2,10 say “12345”
1 2 3 4 5 (在第5行第10列显示)
? ROW( ) 结果为 5
9.屏幕列坐标函数
函数格式:COL( )
函数功能:给出屏幕上光标位置的列坐标。

















