1、第2章 数据与数据运算,常量和内存变量的类型,数据表的字段类型,VFP的基本数据类型,常量: 变量:内存变量和字段变量,变量,1.内存变量赋值,STORE TO 可为多个变量赋相同值=只能为一个变量赋值,【例】 STORE 20 TO X,Y,Z学号=08021927,注意STORE命令不能把若干不同的值赋给若干个变量。【例】STORE 20,30 TO X,Y STORE 20 TO X,30 TO Y,错误,2.变量的清除,【格式1】CLEAR MEMORY清除所有内存变量。,【格式2】RELEASE 清除指定内存变量,各内存变量名之间用半角逗号分开。,注意:当内存变量与字段变量同名时,直
2、接使用变量名访问,则系统默认为字段变量。若要访问内存变量,必须在变量名前加前缀M.(或M-),如:M.姓名。,字段变量,9假设职员表已在当前工作区打开,其当前记录的“姓名”字段值为“张三”(字符型,宽度为6)。在命令窗口输入并执行如下命令: 姓名=姓名-“您好” ? 姓名 那么主窗口中将显示 A)张三 B)张三 您好 C)张三您好 D)出错,姓名为字段变量,不能用 = 赋值,? M.姓名,张三您好,(1)算术运算符(2)求余运算 %和函数MOD()作用相同,结果的正负号与除数一致. 例:mod(x,y),一、数值表达式,3,符号相同:结果为余数,正负取决于除数 符号不同:结果为除数-余数,正负
3、取决于除数,?15%4,15%-4,mod(15,4),mod(15,-4),mod(-15,-4),mod(-15,4),-1,3,-1,-3,1,二、字符表达式,+:前后两个字符串首尾连接形成一个新的字符串 -:连接两个字符串,将前串尾部空格移到合并后新串尾部,【例】字符串运算示例(注:表示空格)a=hello b=teacher! ? a+b, a-b 输出结果:helloteacher! helloteacher!,字符定界符: “沈阳” 沈阳 沈阳,严格日期格式:yyyy-mm-dd 传统日期格式:月、日各2位,年可以2位可以4位。08-23-10 (1)影响日期格式的设置命令 SE
4、T MARK TO &默认斜杠/分隔符 SET DATE TO MDY|DMY|YMD (2)设置日期显示格式 SET CENTURY ON|OFF| TO ROLLOVERon: 显示世纪,4位表示年份。Off: 不显示世纪,2位表示年份。TO子句: 决定一个用2位数字年份表示的日期所处的世纪.若 = 世纪值不变若 世纪值+1,日期型常量D,定界符: 常用分隔符: / - . 空格,例1:设置不同的日期格式 SET CENTURY ON SET MARK TO SET DATE TO YMD ?2008-09-10,例2:设置不同的日期格式 SET CENTURY OFF SET MARK
5、TO “.“ SET DATE TO MDY ?2008-09-10,2008/09/10,例3:执行下列命令后输出的结果 SET DATE TO YMD SET CENTURY ON SET CENTURY TO 19 ROLLOVER 10 SET MARK TO “.“ ?CTOD(49-05-01),09.10.08,1949.05.01,?CTOD(08-05-01),2008.05.01,三、日期或日期时间表达式,日期加数字(数字加日期)表示在该日期后几天的日期?3+2008/03/01 03/04/08 日期减数字表示在该日期前几天的日期? 2008/03/01-2 02/28/
6、08 日期减日期表示两个日期间相差的天数(数值型)? 2008/03/01- 2008/02/05 25,日期时间型 - 日期时间型 &结果为秒数 日期时间型 +或 - 秒数 &允许 日期 + 日期 &非法表达式,四、关系表达式,关系运算符,(1)日期、日期时间型比较:越早的日期或时间越小。 (2)逻辑型数据比较:.T.F. (3)字符串(默认 按拼音排序) : 空格09aAbB zZ汉字串(汉字按拼音排序),,=,或#或!=, $(字符串包含),=(字符串全等比较),子串包含运算 $: 【格式】$如果字符串表达式1是字符串表达式2的一个子串,即一部分,结果为真,否则为假。【例】子串包含运算
7、?教育学$高等教育学 ? 教学$高等教育学 ? 高等教育学$教育学,输出结果: .T. .F. .F.,设置字符串比较的状态,1. =(两边必须完全一样,才相等):? “abc“=“abc“? “abc“=“ab“ ? “ab “=“ab“,3.字符串模糊比较:(两边一样,或右串是左串的左子串,相等)默认状态下 或 set exact off? “abc“=“abc“? “abc“=“ab“ ? “a“=“abc“,2. set exact on &两个字符串去掉空格后比较? “ab “=“ab“ ? “abc“=“ab“,.T. .F. .F.,.T. .F.,.T. .T. .F.,(1)
8、 ABC $ACB ABC$ABXYCPK AB$ CDABEFGH“二级考试$二级 01/05/9812/30/97,.F.,.F.,.F.,.T.,.T.,(2) SET EXACT OFF? ABCABCD? 沈阳师范大学=沈阳? 张=张三,.T.,.F.,.T.,五、逻辑表达式,逻辑运算符包括 :.NOT.、.AND.、.OR.,六、运算符优先级,高 算术运算符:,(或)(低高)字符运算符:,日期运算符:,关系运算符:,或或!,(字符串比较),(字符串全等比较) 低 逻辑运算符: .OR. .AND. .NOT.(低高),1.取绝对值函数 ABS( N) 例 ? ABS(-123) &
9、 123 2.平方根函数SQRT(N)? SQRT(123) & 11.09,数值函数,INT(): 求N的整数部分(不四舍五入)FLOOR ():求 N的最大整数CEILING ():求 N的最小整数,N=3.6 ?int(n),floor(n),ceiling(n) ? int(-n),floor(-n),ceiling(-n),3 4,-3 -4 -3,3.取整函数,数值函数,4.最大值函数 MAX(N1,N2) :求两个数字表达式中最大值,也可以比较字符型或日期型值。?max(123,342)?Max(“fish”,”dog”,”cat”),5.最小值函数 MIN(N1,N2) :求两
10、个数字表达式中最小值,也可以比较字符型或日期型值。 ?min(123,342) ?min(”fish”,”dog”,”cat”),& 342,& fish,& 123,& cat,7.符号函数SIGN() :求N的符号,?sign(3),sign(0),sign(-3),1 0 -1,6.舍入函数ROUND(N,M) :对保留位小数,舍入,?ROUND(12.647,2),ROUND(12.647,-1),12.65 10,1.左字符串截取函数:left(串,n) 对串从左截取n个字符? Left(“abcdefghij”,4),字符串函数,2.右字符串截取函数:right(串,n) 对串从右
11、截取n个字符? right(“abcdefghij”,4),3.中间截取子字符串:substring(串,m,n) 对串从m位起截取n个字符。?Subs(“abcdefghij”,5,4) ? Subs(“ 沈阳师范大学”,5,4),&abcd,&ghij,&efgh,&师范,4.生成空格函数 SPACE(N) 产生个空格? “同学们”SPACE(8)+”晚上好!”,同学们 晚上好!,字符串函数,5.删除空格函数:LTRIM():删除C的左端空格 RTRIM():删除C的右端空格 ALLTRIM():删除C的左、右端空格,? “ab“+LTRIM(“ cd“) ?RTRIM(“ab “)+ “
12、cd“ ?a+ALLTRIM(“ b “)+cd,abcd abcd,6.求字符串长度:LEN() 求串C的长度,?LEN(“ABC“) ?LEN(“函数“) ?LEN(SPACE(5) ?LEN(SPACE(0),34 5 0,8. 子字符串检索函数 : AT(,):从N位置开始求C1在C2中第一次出现的位置,省略N则从1开始起,不出现结果为 ATC(,):不区分大小写,STORE abcdekaacbkjc to s ?occurs(a,s),occurs(b,s),occurs(s,s),occurs(e,s),?AT(C,ACB) ?AT(B,ABAB,3),2 4,7.子字符串出现次
13、数 OCCURS(,):求串1在串2中出现的次数,数值型.,3 2 0 1,10.大小写转换函数 UPPER():把C转换成大写 LOWER():把C转换成小写,例:UPPE(“abCD”)LOWER(“abCD”),ABCD abcd,9.字符串匹配函数: LIKE(,):比较串1和串2对应位置上的字符串,若匹配,则为.T.,串1中可以包含通配符?和*.,x=abc y=abcd ?like(ab*,x) ,like(x,y),.T. .F.,11.宏替换函数:字符型变量,例: x=”2001” ?&x+5 ?”&x+5” ?&x.5,&2006,&2001+5,&20015,替换字符型变量
14、的内容。即函数值是变量中的内容。 用圆点将圆点后的字符串附在宏代换函数返回值之后。,DB=“课程” Use &DB &use 课程 Use &DB.dbf &use 课程dbf Use T&DB &use T课程,日期函数,DATE():系统当前日期 日期型 TIME():系统当前时间 字符型 DATETIME() 日期时间型,YEAR(表达式):取日期表达式的年份值 MONTH(表达式):取日期表达式的月份值 DAY(表达式) :取日期表达式在月份中的天数值,?Year(date()?Month(date() ?day(date(),?date(),time(),datetime(),201
15、0 9 1,类型转换函数,VAL():C型数据转换成N型数据,遇到字母不转换。保留两位小数,?VAL(23.7) ?VAL(2+3),23.702.00,STR(数值,长度,小数位):数值转成字符函数(四舍五入),CTOD():将字符表达式值转换成日期型数据 DTOC():将日期型数据转换成字符串,N=-123.456 ?str(n,9,2) , str(n,6,2) ,str(n,3) , str(n,6)-123.46 -123.5 * -123,长度数值整数位小数位数1(小数点) 长度数值位数 左补空格 长度数值的整数位数 输出一串 长度优先满足整数部分,测试函数,值域测试函数: BET
16、WEEN(表达式1,表达式2,表达式3) 若:表达式2 = 表达式1 = 表达式3, 返回.T. ?BETWEEN(150,100,300), BETWEEN(150,300,100), BETWEEN(100,150,300).T. .F. .F.,空值(NULL)测试函数: ISNULL(表达式):只有表达式为.NULL.或NULL时,结果为.T. ?ISNULL(.NULL.),“空”测试函数: EMPTY(表达式):当表式为数值0、逻辑值.F.和空字符串或任意多个空格字符串 等值时结果为.T.,.T.,例:运算结果为真的是 A)EMPTY(.NULL.) B)LIKE(XY?,XYZ)
17、 C)AT(XY,ABCXYZ) D)ISNULL(SPACE(0),B,数据类型测试函数: VARTYPE(表达式):以一个大写字母的形式返回表达式的类型 N,C,Y,L,T, X:Null值 U:未定义,4. 设X=10, 语句 ?VARTYPE (“X“)的输出结果是 A)N B)C C)10 D)X,13设 X=65,命令?VARTYPE(X)的输出是: A)N B)C C)L D)出错,条件测试函数: IIF(,),逻辑表达式值为.t. 结果为表达式的值,否则为表达式的值,? Iif(len(spac(5)5,1,-1),-1,文件尾测试函数: EOF(工作区号|表别名):测试表文件
18、中的记录指针是否指向文件尾 文件头测试函数: BOF(工作区号|表别名):测试表文件中的记录指针是否指向文件首 记录号测试函数: RECNO(工作区号|表别名):返回指定表文件中当前记录的记录号 记录个数测试函数: RECCOUNT(工作区号|表别名):返回指定表文件中的记录个数 记录删除测试函数: DELETED(工作区号|表别名):测试指定表文件中当前记录是否有删除标记,1.数组:名字相同而下标不同的内存变量,数组元素下标的起始值为1 。一维数组(一个下标)A(2) A(1) A(2)A(5) A(1) A(2) A(3) A(4) A(5) 二维数组(两个下标)Y(2,3),数组,2、数
19、组的定义: DIMENSION (,) DECLARE (,) 例1 DIME M(2,3),N(4),3、数组的赋值 数组生成后,系统自动赋予逻辑假值。,a.单个赋值:DIME A(3)A(1)=5A(2)=AA(3)=00/02/03,b.为整个数组赋值: DIME B(2,3) B=9,综合应用19,表格的RecordSourceType处选择“4SQL说明”。 do按钮的Click事件代码:zgh=ThisForm.Text1.Valueselect 姓名,性别 from employee where 职工号 =zgh into array bThisForm.Text2.Value=b(1)ThisForm.Text3.Value=b(2)ThisForm.Grdorders.RecordSource=“SELECT * FROM orders WHERE 职工号=zgh INTO CURSOR LSB“,