1.61k likes | 1.71k Views
封面. 第二章 数据类型表达式和函数. 1 常量与变量. 2. 运算符与表达式. 3. 常用函数. 2.1 常量与变量. 2.1.1 常量. 常量 是指操作过程中其值固定不变的数据,是一个具体的数据内容。 例如字符串、常数或具体的日期。. 数值型常数. 由数字 0-9 、小数点及正负号构成 可用科学计数法表示 : 1.2345E+3 表示 1.2345×103 ,即 1234.5 ; 2.45E-4 表示 2.45×10-4 ,即 0.000245. 货币型常数. 货币型常量表示货币在数值前加上一个货币符号 ($) 。
E N D
第二章 数据类型表达式和函数 1 常量与变量 2. 运算符与表达式 3. 常用函数
2.1.1 常量 常量是指操作过程中其值固定不变的数据,是一个具体的数据内容。例如字符串、常数或具体的日期。
数值型常数 • 由数字0-9、小数点及正负号构成 • 可用科学计数法表示:1.2345E+3表示1.2345×103,即1234.5;2.45E-4表示2.45×10-4,即0.000245
货币型常数 • 货币型常量表示货币在数值前加上一个货币符号($)。 • 货币型常量在存储和计算时,采用4位小数。当货币型常量超过4位小数时,多余的小数位将四舍五入
字符常数 • 字符型常量是用英文的单引号、双引号或方括号括起来的一串字符,也称为字符串。 • 字符可以是英文字母、数字、标点符号等所有ASCII码字符及汉字。 • 例如:’’湖南长沙’’、’0731-8821234’、[smith]都是字符串。
字符常数 • 单引号、双引号或方括号是字符串的定界符,它们用来规定字符串的起始和终止界限,不作为字符串本身的内容。 • 字符串的定界符必须成对匹配,即当一边以单引号作为定界符时,另一边也必须以单引号作为定界符。 • 此外,如果字符串本身含有作为定界符的字符,则必须用另一种符号作为定界符。
字符常数 • 字符串的长度是指字符串中所含字符的个数,其中,每个汉字相当于2个字符。字符串的最大长度不能超过254。 • 只有定界符没有任何字符的字符串称为空串,其长度为0。
日期型常数 • 默认情况下,日期型常量要使用严格的日期格式{^yyyy-mm-dd}。 • 以花括号{ }作为定界符,花括号内第一个符号是^,年份必须为四位,年月日的次序不能颠倒或缺省。 • 年月日的分隔符可以为/(斜杠)、_(下划线)、.(圆点)或空格。例如,{^2008-8-1} {^2008/08/01} {^2008.8.1} {^2008 8 1}均表示2008年8月1日。
日期型常数 • 若要设置传统的日期格式,则应执行SET STICTDATE TO 0命令。 • 默认用{mm/dd/yy}或{mm/dd/yyyy}表示日期常量。例如,{6/25/08}或{6/25/2008}均表示2008年6月25日。 • 若要恢复为严格的日期格式,执行SET STICTDATE TO 1命令
提示 • 本书在介绍命令时,约定方括号[]中的内容表示可选,竖杠|分隔的内容表示任选其一,尖括号<>中的内容由用户提供。
设置日期显示的格式 SET DATE TO [AMERICAN |ANSI |BRITISH| FRENCH|GERMAN|ITALIAN|JAPAN|USA| MDY|DMY|YMD] 设置日期的显示格式 ,缺省格式为AMERICAN,即mm/dd/yy。
设置是否显示世纪值 SET CENTURY ON/OFF 设置显示日期时是否显示世纪值。当使用ON,显示世纪值,即年号以4位显示;使用OFF,不显示世纪值,即年号以2位显示。
例题 SET CENTURY OFF&&设置2位数字年份 SET DATE TO YMD&&设置年月日格式 ?{^2008-6-1}&&显示结果为08/06/01 SET STRICTDATE TO 0 &&设置不进行严格的日期格式检查 SET CENTURY ON&&设置4位数字年份 SET DATE TO DMY&&设置日月年格式 ? {^2008-6-1},{1/7/08} &&显示结果为01/06/2008和01/07/2008
日期时间型常数 • 日期时间型常量包括日期和时间两部分{日期,时间}。 • 日期部分的格式和日期型常量相似,时间部分的格式为HH:MM:SS [A|P]。HH、MM、SS分别表示时、分、秒,A、P分别表示上午和下午。 • 时、分、秒可以缺省,默认值为12、0、0。A、P可以缺省,默认为上午。 • 注意:日期和时间之间必须用逗号或空格隔开。
日期时间型常数 {^2008-6-1,}表示2008年6月1日上午12点(午夜) 时间部分可以采取24小时制,当时间大于或等于12,则自然表示下午。例如,{^2008-6-1 1:20:30 P}和{^2008-6-1 13:20:30}均表示2008年6月1日下午1点20分30秒
工具(T) 选项(O) 设置日期格式 区域选项卡
逻辑常数 • 逻辑型常量只有逻辑真和逻辑假两个值。 • 逻辑真值用.t.,.T.,.y.,.Y.表示,逻辑假值用.f.,.F.,..n,.N. 表示 • 注意:圆点作为逻辑型常量的定界符,必不可少。
2.1.2 内存变量 • 分为字段变量和内存变量 • 内存变量:独立于数据表而存在,通常用来存放命令操作或程序运行过程中的一些中间结果。 • 内存变量的值在操作过程中可以被改变。退出VFP后,内存变量将被自动释放。
变量命名规则 变量名以字母、汉字或下划线开头,由数字、字母、汉字或下划线组成。名称最长可达254个字符。A 、Class_2、年龄 合法的变量名3Grade、b* 非法的变量名 不要使用VFP的保留字作为变量名。
内存变量的赋值 <内存变量>=<表达式> STORE <表达式> TO<内存变量列表> 计算表达式的值,再将该值赋给内存变量。
内存变量的赋值 • 等号=一次只能给一个变量赋值,Store可同时给多个变量赋同一个值。多个变量之间用逗号隔开。 • 简单变量赋值时无需事先声明或定义。当变量被赋值时,若该变量此时还不存在,系统将建立此变量,即在内存中为其定义一个存储区域。 • 变量的值和数据类型由最后赋予它的表达式决定。当变量被重新赋值时,其值发生改变。若新值为其他数据类型,则变量的数据类型也相应地发生改变。
例题 n1=3 &&把数值3赋给内存变量n1, n1是数值型内存变量 name=‘王波’ &&把字符串赋给内存变量name, name是字符型内存变量 store {^2008/6/1} to 日期1,日期2 &&把日期常量2002年9月12日同时赋给内存变量日期1和日期2,日期1和日期2是日期型内存变量 l=.t. &&把逻辑真值.t.赋给内存变量l,l是逻辑 型内存变量
例题 n2=n1 &&计算表达式n1的值为3,将n2赋值为3 n1的值不受影响 n2=n2+1 &&计算表达式n2+1的值为4,将n2赋值为4 n2=‘n2+1’ &&将字符串n2+1赋值给变量n2, n2是字符型内存变量
显示表达式的值 ? [<表达式表> ] ?? [<表达式表> ] 计算表达式的值,将其显示在窗口工作区。 ?命令首先换行,在当前行的下一行显示表达式的值。 ??命令不换行,在当前行的光标处显示表达式的值。 ?/??可接多个表达式,表达式之间用逗号隔开。
例题 ?’n1=’,n1 &&’n1=’为字符型常量,n1为变量,窗口工作区显示n1=3 ?n2 &&窗口工作区另起一行,显示n2+1 ??name &&窗口工作区在n2+1的后面显示王波
内存变量的显示 LIST/DISPLAY MEMORY [ LIKE <通配符>] [ TO PRINTER| TO FILE <文件名>] 显示内存变量的当前信息,包括变量名、作用域、类型、取值。
内存变量的显示 • 使用LIST MEMORY,在屏幕上以滚动方式显示,不分屏显示; • 使用DISPLAY MEMORY,分屏显示,即显示了一屏后,显示暂停,提示“按任意键继续”,按下任意键后,继续显示下一屏。
内存变量的显示 • LIKE通配符表示只显示与通配符相匹配的内 存变量。通配符*表示任一串字符,?表示任一个字符。 • VFP有74个系统变量。如果用户只要求显示所有自定义变量,可以使用命令DISPLAY MEMORY LIKE *。
内存变量的显示 TO PRINTER子句,表示将显示的信息同时送打印机打印。 TO FILE <文件名>子句,表示将显示的信息存入指定的文本文件,文件的扩展名为txt。
例题 display memo like * &&显示用户定义的全部内存变量 display memo like n* &&显示以字母n开头的所有内存变量,即n1,name和n2 display memo like n?&&显示以字母n开头,且名称不多于两个字符组成的内存变量 即n1和n2
内存变量的清除 CLEAR MEMORY RELEASE <变量名表>] RELEASE <变量名表>] ALL[LIKE <通配符>| EXCEPT<通配符>] 清除内存变量
提示 • 在输入命令时,命令中的保留字可只输入前4个字符。例如display memory 可简化为disp memo
内存变量的清除 • CLEAR MEMORY和RELEASE ALL清除内存中所有内存变量。 • RELEASE内存变量名表清除指定的内存变量。 • 使用LIKE子句,清除符合通配符的变量;使用EXCEPT子句,清除不符合通配符的变量。
例题 Release 日期1,日期2 &&清除变量日期1和日期2 Release all like n* &&清除所有变量名以n开始的变量,即n1,n2和name。 Disp memo like * &&此时,显示的变量有l
2.1.3 数组 • 内存变量又分为简单内存变量和数组。 • 每一个简单变量只占用内存中的一个存储区域,存储一个值。 • 而一个数组在内存中占用连续的一组存储区域,由多个数组元素组成。每个数组元素占用一个存储区域,相当于一个简单变量。用户通过数组名和下标来访问数组元素。
数组的创建 DIMENSION <数组名>(<下标上限1>[, <下标上限2>])[,……] DECLARE <数组名>(<下标上限1>[, <下标上限2>])[,……] DIMENSION和DECLARE两种命令的功能相同,定义多个一维数组或二维数组 数组的下标下限规定为1,一维数组的元素个数为下标上限1,二位数组的元素个数为下标上限1*下标上限2。
例题 DIMENSION m(4),n(2,3)命令定义了数组m和n。 &&m是一维数组,4个数组元素:m(1)、m(2)、m(3)、m(4)。 &&n是二维数组,有6个数组元素:n(1,1)、n(1,2)、n(1,3)、n(2,1)、n(2,2)、n(2,3)。 可以用一维数组的形式访问二维数组。例如二维数组n如果用一维数组表示,依次为n(1)、n(2)、n(3)、n(4)、n(5)、n(6)。即n(4)和n(2,1)是同一个数组元素。
数组的赋值 • 数组创建后,系统自动给每个元素赋以逻辑值假。 • 通过对数组名赋值,可以将同一个值同时赋给全部的数组元素。 • 每个数组元素可分别赋值,同一数组中各数组元素类型可以不同
例题 DIMENSION m(4),n(2,3) &&定义了一维数组m和二维数组n。 ? m(1),n(1,1) &&数组创建后,每个数组元素的初值为逻辑值假。 m=5 &&通过对数组名赋值将所有数组元素赋值为5 ?m(1),m(2),m(3),m(4) n(1,1)=1 n(1,2)=‘中国’ n(1,3)={^2008/10/1} &&每个数组元素可分别赋值,数据类型可以不同
运算符 变量 常量 函数 2.2 运算符与表达式 • 表达式是由常量、变量、函数通过特定的运算符连结起来的有意义的式子。 • 每一个表达式经过运算,将得到一个具体的结果,称为表达式的值。 n1*0.85 + sqrt(9)
表达式 • 根据表达式值的类型,可将表达式分为数值表达式、字符表达式、日期表达式和逻辑表达式。 • 单个的常量、变量和函数,也可以看作一种特殊的表达式。
优 先 级 算数运算符 ( ) **或^ (乘方) 2**4表示24 值为16 * / %(求余) 10%3表示10除3的余数值为1 + —
用表达式表示 2*32 +1.2 4+ 4 5 例题 ?1+5^2*2 &&结果为51。首先进行乘方运算,再进行乘法运算,最后进行加法。 ?(2*3^2+1.2)/(4+4/5) &&对于某些数学算式,注意利用括号来改变优先级
-3 10 -3 10 例题 对于求余运算,余数的正负号与除数相同 ? ?10%3,10%(-3),-10%3,-10%-3 &&结果为1,-2,-1,2 4 -3 余数为1 余数为-2 &&表达式的值为-2
字符型运算符 连接运算符 +号:将前后两个字符串连接起来,形成一个新的字符串。 —号:将前后两个字符串连接起来,若第一个字符串的尾部有空格,则将空格移到合并后字符串的尾部,其他位置的空格不改变位置。