1、第2章 Visual FoxPro中的数据与运算/本 章 要 点/2/1 Visual FoxPro的数据类型 2/2 Visual FoxPro的常量与变量 2/3 Visual FoxPro的函数 2/4 Visual FoxPro的表达式/2/1 Visual FoxPro中的数据类型/1/ 字符型数据(C/13/二进制备注型/2/ 数值型数据(N/4/ 浮点型数据(F/5/ 双精度符型数据(B/7/ 逻辑型数据(L/6/ 货币型数据(Y/3/ 整型数据(I/8/ 日期型数据(D/9/ 日期时间型数据(T/10/ 备注型数据(M/11/ 通用型数据(G/12/二进制字符型/字符型(Cha
2、racter)数据是不具计算能力的文字数据类型,用字母C表示。 字符型数据包括中文字符、英文字符、数字字符和其他ASCII字符,其长度(即字符个数)范围是0254个字符/注意:如果将***数字定义为字符型数据时,它不具备数学上的数值含义,不能参加数***算,如电话号码,邮编等/2/1/1 字符型/数值型数据由数字、小数点、正负号和表示乘幂的字母E组成,数值精度达16位。 1数值型 数值型(Numeric)数据由数字、小数点、正负号和字母E组成,用字母N表示。通常用于表示实数。 如23,-103/45,1/3E-5(即1/310-5)等/2/1/2 数值型/2浮点型 浮点型(Float)数据是数值
3、型数据的一种,用字母F表示。它与数值型数据完全等价,只是在存储形式上采用浮点格式,主要是为了得到较高的计算精度。 3双精度型 双精度型(Double)数据是具有更高精度的一种数值型数据,用字母B表示。它采用固定长度浮点格式存储,占用8个字节 4整型 整型(Integer)数据是不包含小数部分的数值型数据,用字母I表示。整型数据只用来表示整数,以二进制形式存储,占用4个字节/2/1/2 数值型/日期型(Date)数据是表示日期的数据,用字母D表示。 日期的默认格式是mm/dd/yyyy,其中mm表示月份,dd表示日期,yyyy表示年度,固定长度8位。 有效的日期型和日期时间型数据分隔符为:连字符
4、-”、正斜杠/”、句点/”和空格。 如09/16/2002表示2002年9月16日/2/1/3 日期型/日期时间型(Date Times)数据是表示日期和时间的数据,用字母T表示。 日期时间的默认格式是mm/dd/yyyy hh/mm/ss,其中mm、dd、yyyy的意义与日期型相同,而hh表示小时,mm表示分钟,ss表示秒数。 日期时间型数据也是采用固定长度8位。 如10/01/2002 10/30/30表示2002年10月1日10时30分30秒/2/1/4 日期时间型/逻辑型(Logic)数据是描述客观事物真假的数据类型,表示逻辑判断的结果,用字母L表示。 逻辑型数据只有真(/t/或/y/
5、)和假(/f/或/n/)两种,固定长度1位。 为区别其他数据类型,一般需在表示逻辑值的字母t、y、f、n的前后加圆点符//2/1/5 逻辑型/备注型(Memo)数据是表示、存放较多字符的数据类型。可以把它看成是字符型数据的特殊形式,用字母M表示。 备注型数据没有数据长度***,仅受限于磁盘空间。它只用于表中字段类型的定义,字段长度固定为4位,实际数据存放在与表文件同名的备注文件(/FPT)中,长度根据数据的内容而定/2/1/6 备注型/2/1/7 通用型 通用型(General)数据是存储OLE(对象链接嵌入)对象的数据类型,用字母G表示。通用型数据中的OLE对象可以是电子表格、文档、图形图片等
6、。它只用于表中字段类型的定义。通用型数据字段长度固定为4位,实际数据长度仅受限于磁盘空间。 2/1/8 货币型 货币型(Currency)数据是为存储美元金额而使用的一种称为货币(Currency)的数据类型,其取值范围是:-922337203685477/5808 922337203685477/5807,默认保留4位小数,占据8字节存储空间。货币型数据用字母Y表示/2/1/9 二进制字符型和二进制备注型 这两类数据是以二进制格式存储的数据类型,只能用在表中字段数据的定义。所存储的数据不受代码页改变的影响。 2/1/10 数据类型的应用范围 以上数据类型均可应用于表中字段数据类型的定义,但其
7、中双精度型、浮点型、通用型、整型、备注型、二进制字符型和二进制备注型只能应用于字段,其余则可以用于变量、数组和字段/1)字符型常量:用定界符(单引号、双引号和方括号)括起来的字符串。 (示例:ade 568 book book的中文意思是书。) (2)数值型常量(示例:538/-10/5 ) (3)浮点型常量(示例:-1/05E+20 ) (4)逻辑型常量(示例:/t/ /T/ /f/ /F/ /Y/ /N/ /y/ /n/) (5)日期时间型常量(示例:05/16/99 12/00/00) (6)日期型常量:表示一个确切的日期,用大括号作为定界符,默认格式为mm/dd/yy。示例:05/23
8、/99 严格的日期格式:YYYY-MM-DD (示例:2001-08-16/2/2/1 常量/日期常量常用的系统输出格式:mm/dd/yy 日期常量常用的系统输入格式:yyyy/mm/dd SET DATE TO AMERICAN/MDY/DMY/YMD SET CENTURY ON/OFF /显示的日期中年份用4/2位 SET MARK TO :指定显示的日期中的分界符 SET STRICTDATE TO 0|1|2 关开严格的日期检测/例如:* 注意显示的日期格式 ?2008/9/3 SET CENTURY ON ?2008/9/3 SET DATE TO YMD ?2008/9/3/日期
9、型常量/变量是在操作过程中可以改变其取值或数据类型的数据项。 在Visual FoxPro系统中变量分为字段变量、内存变量、数组变量和系统变量4类。 确定一个变量,需要确定其三个要素:变量名、数据类型和变量值/2/2/2 变量/1/变量名: 变量名由字母、汉字、数字和下划线组成,但必须以字母或汉字开头,中间不能有空格。 如:年龄,nl/A_2是合法的变量名 2A,A 2是不合法的变量名 2/建立内存变量 (1)直接赋值 C=中国 KDATE=2002/01/02 婚否=/T/练习2: R=3 S=3/14*R*R ?S=/S/练习1: A=1 A=A+1 ?A/2/2/2 变量/2)STORE
10、命令 STORE TO 例如:STORE 0 TO A/B/C/D 优点:同时给多个变量赋相同的值/练习3:交换两个变量的值 X=3 Y=4 ?X=/ X/ Y=/ Y/Temp=X X=Y Y=Temp ?X=/ X/ Y=/ Y/2/建立内存变量/内存变量与常量比较/中国 中国=china ?中国/中国/2008-1-1 ?1e3 d=2008-1-1 ?d+1/内存变量与字段变量/如果内存变量与数据表中的字段变量同名时,用户在引用内存变量时,要在其名字前加一个m/或(m/姓名=张三 ?姓名 USE STUD ?姓名 姓名=李四 ?姓名 ?m/姓名/命令格式: ?| ? AT 命令功能:计
11、算表达式表中各表达式的值,并在屏幕上指定位置显示输出各式的值。 ?:先回车换行,再计算并输出表达式的值; ?:在屏幕上当前位置,计算并直接输出表达式的值; :多个以逗号两两分隔的表达式,各表达式的值输出时,以空格分隔; AT 子句指定表达式值从指定列开始显示输出/3)内存变量的显示输出/格式:LIST / DISPLAY MEMORY LIKE 说明:LIST和DISPLAY区别为: LIST连续显示;DISPLAY分页显示/4)显示和打印全部内存变量/示例:A=中国” A1=5 LIST MEMORY LIKE A/格式:SAVE TO /TO MEMO ALL LIKE/ALL EXCEP
12、T 说明:内存变量文件的扩展名为/MEM 示例:SAVE TO AA SAVE TO MM ALL LIKE X* SAVE TO BB ALL EXCEPT ?Y/5)建立内存变量文件保存变量/6)内存变量文件的调入/格式:RESTORE FROM /FROM MEMO ADDITIVE 示例:RESTORE FROM MM RESTORE FROM BB ADDITIVE/格式:RELEASE 或 RELEASE ALL LIKE /EXCEPT 或 CLEAR MEMORY 或 CLEAR ALL 说明:释放指定的内存变量,但不清除系统内存变量; CLEAR ALL在关闭所有表文件的同时
13、清除所有的内存变量。 示例:RELEASE ALL RELEASE X/Y/Z RELEASE ALL LIKE A/7)释放内存变量/定义/命令格式:DIMENSION/DECLARE ( /) /( /) 示例:DIMENSION AB(3)/C2/3/赋值/数组元素的赋值与普通内存变量一样,可以通过STORE命令或=”来实现。 示例: 给二维数组X和一维数组Y进行赋值。 DIMENSION X(3/4)/Y(3) STORE 5 TO X Y(1)=325 Y(2)=ABC” Y(3)=/T/ X(2)=2005/3/31/4/数组变量/系统变量是Visual FoxPro系统特有的内存
14、变量,它由Visual FoxPro系统定义、维护。系统变量有很多,其变量名均以下划线_”开始/5系统变量/2/3 Visual FoxPro的函数/按函数提供方式,可分为系统(标准)函数和用户自定义函数 按函数运算、处理对象和结果的数据类型,可分为数值型函数、字符型函数、逻辑型函数、日期时间型函数、数据转换函数等/abs(-3)/abs(5)/abs(0) ?sign(-3)/sign(5)/sign(0) ?sqrt(4)/sqrt(abs(-81) ?pi()/round(pi()/8) ?int(5/7)/int(-5/7) ?ceiling(5/7)/ceiling(-5/7) ?f
15、loor(5/7)/floor(-5/7) ?round(3/678/2)/round(-5/2345/3) ?mod(5/3) ?max(3/2/5/6)/min(3/2/5/6/数值函数举例/max(23/ 5/ 123/5/注:X1/X2/X3均为字符串表达式,Y1/Y2均为数值表达式/Len(Visual FoxPro中文版) ?Lower(Visual FoxPro) ?Upper(Visual FoxPro) ?aaa+space(2)+bbb ?bbb+trim( aaa aaa )+bbb ?bbb+ltrim( aaa aaa )+bbb ?bbb+alltrim( aaa
16、aaa )+bbb ?Left(中国人民***军/4) ?right(中国人民***军/6) ?substr(中国人民***军/5/4) ?at(a/aABCAa/字符函数 举例/字符函数 -&宏替换函数/功能/替换出字符型变量中的字符/举例1: Hello= How are you? H= Hello ?H ? &H ? H/&H/举例2: STORE stud TO DB USE &DB XM=姓名 ?&XM-你好 Skip ?XM/&XM/等价于?Hello/等价于?Hello/日期和时间函数/注:X为日期型表达式或日期时间型表达式,Y为日期时间型表达式/日期和时间函数 举例/date()/t
17、ime() ?datetime() ?year(date() ?month(2008-8-18) ?day(datetime() ?hour(datetime() ?minute(datetime() ?sec(datetime(/数据类型转换函数/注:X为字符串表达式,Y为数值表达式,D为日期表达式或日期时间表达式,T为日期时间表达式/ASC(X/返回串首字符的ASCII码值/CHR(X/返回ASCII码为X的字符/DTOC(日期/计算结果=+STR(10/3/5/3) STORE 1E3 TO C ?3*VAL(C) ?VAL(1/257) ?VAL(1A/256) ?VAL(A1/256
18、) ?ASC(A)/ASC(a) ?CHR(99)/CHR(49/转换函数举例/ALLTRIM(学号)+的成绩/+STR(成绩/2) ?今天是/+DTOC(DATE(/Deleted(/测试当前记录是否被逻辑删除/TOP/BOTTOM/如果是空表呢/use sc ?recno()/reccount() ?Eof()/bof() skip -1 ?bof() go bottom ?eof() skip ?eof() go 4 ?recno() ?iif(成绩=60/及格/不及格) ?deleted(/测试函数举例/数据类型测试函数: VARTYPE(X) TYPE(字符串) 功能:测试表达式X的
19、结果的数据类型。返回的数据类型由字符表示,如下表/举例1: a=5 b=abc ?vartype(a)/vartype(b) ?TYPE(A)/TYPE(B/举例2: K=AA=10 ?TYPE(K)/TYPE(K) AA=-10 ?TYPE(K)/TYPE(K/2/4 Visual FoxPro的表达式/表达式是由常量、变量、函数及其他数据容器单独或与运算符组成的有意义的运算式子。 运算符分为算术(数值)运算符、字符运算符、日期时间运算符、逻辑运算符和关系运算符五类。 相应的,表达式也分为算术表达式、字符表达式、日期时间表达式、逻辑表达式和关系表达式五类。 常量、变量和函数可以作为表达式的特
20、例。今后涉及到表达式的描述,除特别指明,均可包含这些特殊的形式/算术表达式又称数值表达式,其运算对象和运算结果均为数值型数据/2/4/1 算术表达式/练习1:写出下列数学表达式的Visual FoxPro表达式/1/ 2/ 3/ 4/ 5/ 6/a+b)/(c-d/B2-4AC/B*B-4*A*C 或 B2-4*A*C/3sin30+lg100/3*sin(3/14159*30/180)+log10(100/5x+2(y+z/5*(x+2*(y+z/2 R/2*3/14159*R/SQRT(52+73)/55/将数学表达式转换成数值表达式时,应注意以下规则: (1)所有符号要写在同一水平线上;
21、 (2)所有运算符不能省略; (3)所有括号都是小括号; (4)三角函数的单位是弧度; (5)注意运算符的优先级/数学表达式转换成数值表达式/字符表达式是由字符运算符将字符型数据对象连接起来进行运算的式子/2/4/2 字符表达式/2/4/3 日期时间表达式/:加运算。 日期+数值, 结果为其后多少天的日期。 日期时间+数值, 结果为其后多少秒的时间。 日期+日期() -:减运算。 日期-数值, 结果为其前多少天的日期。 日期时间-数值, 结果为其前多少秒的时间。 日期1-日期2,结果为日期相差的天数。 日期时间1-日期时间2,结果为日期时间相差的秒数/由关系运算符连接两个同类数据对象进行关系比较的运算式称为关系表达式/2/4/4 关系表达式/关系运算符的优先级别相同。 在Visual FoxPro系统中,字符型数据的比较相对复杂 字符串是按照ASCII码值的大小进行比较 ABCDABD 的值是/F/ 汉字按照拼音或比画多少比较/关系运算符注意/用菜单设置汉字排列顺序方式的操作步骤为:单击【工具】|【选项】