Visual Foxpro程序设计 第三章 VisualFoxpro中的数据 123
第三章 VisualFoxpro中的数据 常用数据类型 1 常量 2 变量 3 运算符与表达式 4 常用函数 5
3. 1 常用数据类型 数字型 B E C D A 字符型 日期型 数据类型 逻辑型 日期时间型
3.2常 量 数值型常量也就是常数,用来表示一个数量的大 小,由数字0-9、小数点和正负号构成;也可以使用 数值型常量 3.2常 量 数值型常量 数值型常量也就是常数,用来表示一个数量的大 小,由数字0-9、小数点和正负号构成;也可以使用 科学记数法形式书写,例如:用5.878E12表示 5.878*10^12。 货币型常量 用来表示货币值,其书写格式与数值型常量相似,但要 加上一个前置的符号($)。 字符型常量 字符型常量也称为字符串,其表示方法是用半角单引号、 双引号或方括号把字符串括起来。这里的单引号、双引 号或方括号称为定界符
3.2常 量 日期型常量 日期型常量的定界符是一对花括号。日期型常量的格式有两种: ① 传统的日期格式 ② 严格的日期格式 日期时间型常量 3.2常 量 日期型常量 日期型常量的定界符是一对花括号。日期型常量的格式有两种: ① 传统的日期格式 ② 严格的日期格式 日期时间型常量 日期时间型常量包括日期和时间两部分内容:{<日期>,<时间>}。 <日期>部分与日期型常量相似,也有传统和严格两种格式。 逻辑型常量 逻辑型数据只有逻辑真和逻辑假两个值。 逻辑真的常量表示形式有: .T.、 .t.、.Y.和.y.。 逻辑假的常量表示形式有: .F.、.f.、 、.N.和.n.。
变量值是能够随时更改的。变量分为字段变量和内存变量两大类 3.3变量 变量值是能够随时更改的。变量分为字段变量和内存变量两大类 字段变量 由于表中的各条记录对同一个字段名可能取值不同,因此, 表中的字段名本身就是变量,称为字段变量 内存变量 内存变量是内存中的一个存储区域,变量值是存放在这个存 储区域里的数据,变量的类型取决于变量值的类型。
变量值是能够随时更改的。变量分为字段变量和内存变量两大类 3.3变量 变量值是能够随时更改的。变量分为字段变量和内存变量两大类 字段变量:由于表中的各条记录对同一个字段名可能取值不同,因此,表中的字段名本身就是变量,称为字段变量。 内存变量:是内存中的一个存储区域,变量值是存放在这个存 储区域里的数据,变量的类型取决于变量值的类型。
3.3变量 每一个变量都有一个名字,可以通过变量名访问变量。 变量名必须是以字母或汉字开头,由字母、汉字、数字和下划线组成。 变量的赋值命令格式: <内存变量名>=<表达式> STORE<表达式>TO<内存变量名表>
① 等号一次只能给一个内存变量赋值。STORE命令可以同时给若干个变量赋相同的值,各内存变量名之间用逗号分开。 3.3变量 功能注释 1 2 3 ① 等号一次只能给一个内存变量赋值。STORE命令可以同时给若干个变量赋相同的值,各内存变量名之间用逗号分开。 ② 在Visual FoxPro中,一个变量在使用之前并不需要特别的声明或定义。当用STORE命令给变量赋值时,如果该变量并不存在,那么系统会自动建立它。 ③ 可以通过对内存变量重新赋值来改变其内容和类型。
3.3变量 数组 数组是内存中连续的一片存储区域,它由一系列元素组成,每个数组元素可通过数组名及相应的下标来访问。每个数组元素相当于一个内存变量,可以给各元素分别赋值。在Visual FoxPro中,一个数组中各元素的数据类型可以不同。 数组在使用之前一般要用DIMENSION或DECLARE命令创建。 命令格式: DIMENSION<数组名>(<下标上限1>)[,<下标上限2>])[,...] DECLARE<数组名>(<下标上限1>)[,<下标上限2>])[,...]
3.3.2数组 注意 1 2 3 4 5 在一切使用内存变量的地方,均可以使用数组 元素。 在赋值和输入语句中使用数组名时,表示将同一个值同时赋给该数组的全部数组元素。 2 在同一个运行环境下,数组名不能与内存变量名重复。 3 在赋值语句中的表达式位置不能出现数组名。 4 可以用一维数组的形式访问二维数组。 5
3.3.3内存变量常用命令 表达式的显示 格式1:?[<表达式表>] 格式2:??<表达式表> 功能: 计算表达式中的各表达式并输出各表达式 值。 区别: 格式1表达式值将在下一行的起始处输出。 格式2表达式值在当前行的光标所在处直接输 出。 可以用一维数组的形式访问二维数组。
3.3.3 内存变量的显示 内存变量的显示 格式1:LIST MEMORY [LIKE<通配符>] 格式2:DISPLAY MEMORY [LIKE<通配符>] 功能:显示内存变量的当前信息,包括变量名、作用域、类型、取值。 选用LIKE短语只显示与通配符相匹配的内存变量。通配符包括*和?。*表示任 意多个字符,?表示任意一个字符。
3.3.3内存变量的保存与恢复 内存变量的保存与恢复 格式1:SAVE TO <内存变量文件名>[ ALL LIKE<通配符>/ALL EXCEPCT <通配符>] 功能:将当前内存中的内存变量存放到内存变量文件中。 说明:内存变量文件的扩展名为.MEM;缺省可选项时,将所有内存变量 (系统变量除外)存放到内存变量文件中。 如要重新使用已保存的内存变量,可用命令RESTORE FROM <内存变量文件名>[ADDITIVE]进行恢复,将内存变量调入内存。
3.4内存变量清除 内存变量清除 格式1: CLEAR MEMORY 格式2: RELEASE<内存变量名表> 格式3: RELEASE ALL [EXTENDED] 格式4: RELEASE ALL [LIKE <通配符>|EXCEPT<通配符>] 功能: 格式1清除所有的内存变量。 格式2清除指定的内存变量。 格式3清除所用的内存变量。 格式4选用LIKE短语清除与通配符相匹配的内存变量,选用EXCEPT 短语清除与通配符不相匹配的内存变量。
3.4运算符与表达式 数值表达式 数值表达式由算术运算符将数值型数据连接起来形成, 其运算结果仍然是数值型数据。数值型数据可以是数值 型常量或者变量。
3.4运算符与表达式 算术运算符及其优先级 优先级 运算符 说 明 1 () 形成表达式内的子表达式 2 **或^ 乘方运算 3 *、/、% 说 明 1 () 形成表达式内的子表达式 2 **或^ 乘方运算 3 *、/、% 乘、除运算、求余运算 4 +、- 加、减运算
3.4运算符与表达式 字符表达式 字符表达式由字符串运算符将字符型数据连接起来形成,其运算结果 仍然是字符型数据。运算符为: +:前后两个字符串首尾连接形成一个新的字符串。 -:连接前后两个字符串,并将前字符串的尾部空格移到合并后的新字 符串尾部。 注意:它们的优先级相同
3.4运算符与表达式 日期时间表达式 运算符为:+和-。 注意:符号“+”和“-”即可以作为日期时间运算符,也可以作 为算术运算符和字符串连接运算符。到底作为那种运算符 用,要看它们所连接的运算对象的数据类型而定。 日期时间表达式的格式
3.4运算符与表达式 格式 结果及类型 <日期>+<天数> 日期型。指定日期若干天后的日期 <天数>+<日期> <日期>-<天数> 日期型。指定日期若干天前的日期 <日期>-<日期> 数值型。两个指定日期相差的天数 <日期时间>+<秒数> 日期时间型。指定日期时间若干秒后的日期时间 <秒数>+<日期时间> <日期时间>-<秒数> 日期时间型。指定日期时间若干秒前的日期时间 <日期时间>-<日期时间> 数值型。两个指定日期时间相差的秒数
3.4运算符与表达式 关系表达式 关系表达式通常也称为简单逻辑表达式,它由关系运算符将 两个运算对象连接起来形成,即:<表达式1><关系表达式> <表达式2>。 关系运算符的作用是比较两个表达式的大小或前后。 其运算结果是逻辑型数据。 关系运算符及其含义如表所示。
3.4运算符与表达式 = $ 关系运算符 运算符 说 明 说明 < 小于 <= 小于等于 > 大于 >= 大于等于 = = 字符串精确比较 <>、#或!= 不等于 $ 子串包含测试
3.4运算符与表达式 注意: 1、上表运算符的优先级相同。 2、运算符= =和$仅适用与字符型数据。其他运算符适用于任 何类型的数据,但前后两个运算对象的数据类型要一致。 3、几个数据比较大小的规定: ① 数值型和货币型数据比较,按数值的大小比较,包括负号。 例如,0>-1、$150>$105。 ② 日期或日期时间型数据比较越早的日期或时间越小,越晚的 日期或时间越大。例如,{^2002-01-10}>={^2001-12-28}。 ③ 逻辑型数据比较,.T.大于.F. ④ 子串包含测试 关系表达式<前字符型表达式>$<后字符型表达式>为子串包 测试。 如果前者是后者的一个子字符串,结果为逻辑真(.T.),否则 为逻辑假(.F.)。
3.4运算符与表达式 设置字符的排序次序 当比较两个字符串时,系统对两个字符串的字符自左向右逐 个进行比较,一旦发现两个对应字符不同,就根据这两个字 符的排序序列决定两个字符串的大小。 设置字符比较次序的 命令是:SET COLLATE TO "排序次序名" 排序次序名必须放在引号当中。 次序名可以是: Machine(机器)次序 PinYin(拼音)次序 Stroke(笔画)次序。
3.4运算符与表达式 字符串精确比较与EXACT设置 双等号运算符==比较两个字符串时,只有当两个字符串完 全相同(包括空格以及各字符的位置)时,运算结果才会是逻 辑真.T.,否则为逻辑假.F.。单等号运算符=比较两个字符串 时,运算结果与SETEXACT ON/OFF设置有关。
3.4运算符与表达式 逻辑表达式 逻辑表达式由逻辑运算符将逻辑型数据连接起来而形成, 其运算结果仍然是逻辑型数据。 逻辑运算符: .NOT.或!(逻辑非) .AND.(逻辑与) .OR.(逻辑或)。 优先级顺序依次为NOT、AND、OR。
3.4运算符与表达式 运算符优先级 ①先执行算术运算符、字符串运算和日期时间运算符; ②其次执行关系运算符; ③最后执行逻辑运算符。 ④圆括号作为运算符,优先级最高。
3.5.1常用函数 函数可以用函数名加一对圆括号加以调用,自变量放在圆括号里。 运算结果,称为函数值或返回值。 函数是用程序来实现一种数据运算或转换。
3.5.1常用函数 数 值 函 数 数值函数是指函数值为数值的一类函数,它们的自变量和返 回值往往都是数值型数据。 1.绝对值和符号函数 格式: ABS (<数值表达式>) SIGN(<数值表达式>) 功能: ABS()返回数值表达式的绝对值。 SIGN()返回数值表达式的符号。 当表达式的运算结果为正、负和零时,函数值分别为1、-1和0。
3.5.1常用函数 2.求平方根函数 格式:SQRT(<数值表达式>) 功能:返回表达式的平方根。 注意:自变量表达式的值不能为负。 3.圆周率函数 格式:PI() 功能:返回圆周率π(数值型),该函数没有自变量。
3.5.1常用函数 求整数函数 格式: INT(<数值表达式>) CEILING(<数值表达式>) FLOOR(<数值表达式>) 功能: INT()返回数值表达式的整数部分。 CEILING()返回大于或等于数值表达式的最小整数。 FLOOR()返回小于或等于数值表达式的最大整数。
3.5.1常用函数 四舍五入函数 格式:ROUND(<数值表达式1>,<数值表达式2>) 功能:返回表达式在指定位置四舍五入后的结果, <数值表达式2>指明四舍五入的位数。 求余数函数 格式:MOD(<数值表达式1>,<数值表达式2>) 功能:返回两个数值相除后的余数,<数值表达式1>是 被除数,<数值表达式2>是除数。余数的正负号 与除数相同。
3.5.1常用函数 求最大值和最小值函数 格式:MAX(<数值表达式>,<数值表达式2>[,<数值表达式3>…]) MIN(<数值表达式1>,<数值表达式2>[,<数值表达式>…]) 功能:MAX()计算各自变量表达式的值,并返回其中的最大值。 MIN()计算各自变量表达式的值,并返回其中的最小值。 自变量表达式的类型可以是数值型、字符型、货币型、双精度型、 浮点型、日期型和日期时间型,但所有表达式的类型必须相同。
3.5.2字 符 函 数 求字符串长度函数 功能:返回指定字符表达式值的长度。函数值为数值型。 大小写转换函数 格式:LEN(<字符表达式>) 功能:返回指定字符表达式值的长度。函数值为数值型。 大小写转换函数 格式:LOWER(<字符表达式>) UPPER(<字符表达式>) 功能:LOWER()大写字母转换成小写字母,其他 字符不变。 UPPER()小写字母转换成大写字母,其他字符不变。
3.5.2字 符 函 数 空格字符串生成函数 格式:SPACE(<数值表达式>) 功能:返回由指定数目的空格组成的字符串。 删除前后空格函数 格式:TRIM(<字符表达式>) 功能: TRIM()去掉尾部空格。 LTRIM(<字符表达式>) LTRIM()去掉首部空格。 ALLTRIM(<字符表达式>) ALLTRIM()去掉首部和尾部空格。
3.5.2字 符 函 数 取子串函数 格式:LEFT(<字符表达式>,<长度>) RIGHT(<字符表达式>,<长度>) SUBSTR(<字符表达式>,起始位置)[,<长度>]) 功能:LEFT()从指定表达式值的左端取一个指定长度的子串作为函 数值。 RIGHT()从指定表达式值的右端取一个指定长度的子串作为函 SUBSTR()从指定表达式值的指定起始位置取指定长度的子串 作为函数。 在SUBSTR()函数中,若缺省第三个自变量<长度>,则函数从 指定位置一直取到最后一个字符。
3.5.2字 符 函 数 计算子串出现次数函数 子串替换函数 格式:OCCURS(<字符表达式1>,<字符表达式2>) 功能:返回第一个字符串在第二个字符串中出现的次数,函数 值为数值型,若第一个字符串不是第一个字符串的子串,函数值为0。 子串替换函数 格式:STUFF(<字符表达式1>,<起始位置>,<长度>, 表达式2>) 功能:用<字符表达式2>值替换<字符表达式1>中由<起始位置>和 <长度>指明的一个子串。
3.5.2字 符 函 数 求子串位置函数 格式:AT(<字符表达式1>,<字符表达式2>[,<数值表达式>]) ATC(<字符表达式1),<字符表达式2>[,<数值表达式>]) 功能:AT()的函数值为数值型。如果<字符表达式1>是<字符表达式2> 的子串,则返回<字符表达式1>值的首字符在<字符表达式2>值中的位置; 若不是子串,则返回0。ATC()与AT()功能类似,但在子串比较时不区分 字母大小写。 第三个自变量<数值表达式>用于表明要在<字符表达式2>值中搜索 <字符表达式1>值的第几次出现,其默认值是1。
3.5.3日期和时间函数 系统日期和时间函数 格式:DATE() TIME() DATETIME() TIME()以24小时制,hh:mm:ss格式返回当前系统时间, 函数值为字符型。 DATETIME()返回当前系统日期时间,函数值为日期时间型。
3.5.3日期和时间函数 求年份、月份和天数函数 格式: YEAR(<日期表达式>|<日期时间表达式>) MONTH(<日期表达式>|<日期时间表达式>) DAY(<日期表达式>|<日期时间表达式>) 功能: YEAR()返回日期表达式或日期时间表达式年份。 MONTH()返回日期表达式或日期时间表达式月份。 DAY()返回日期表达式或日期时间表达式中的天数。 这三个函数的返回值都为数值型。
3.5.3日期和时间函数 时、分和秒函数 格式: HOUR(<日期时间表达式>) MINUTE(<日期时间表达式>) SEC(<日期时间表达式>) 功能: HOUR()从指定的日期时间表达式中返回小时部分(24小时制) MINUTE()从指定的日时间表达式中返回分钟部分。 SEC()从指定的日期时间表达式中返回秒数部分。 这三个函数的返回值都为数值型。
3.5.4 数据类型转换函数 1.数值转换成字符串 格式:STR(<数据表达式>[,<长度>[,<小数位数>]]) 功能:将<数据表达式>的值转换成字符串,转换时根据需要自动 进行四舍五入。 2.字符串转换成数值 格式:VAL(<字符表达式>) 功能:将由数字符号(包括正负号、小数点)组成的字符型数据转换 成相应的数值型数据。
3.5.4 数据类型转换函数 3.字符串转换成日期或日期时间 格式:CTOD(<字符表达式>) 3.5.4 数据类型转换函数 3.字符串转换成日期或日期时间 格式:CTOD(<字符表达式>) CTOT(<字符表达式>) 功能:CTOD()将<字符表达式>值转换成日期型数据。 CTOT()将<字符表达式>值转换成日期时间型数据。 4.日期或日期时间转换成字符串 格式:DTOC(<日期表达式>|<日期时间表达式>[,1]) TTOC(<日期时间表达式>[,1]) 功能:DTOC()将日期型数据或日期时间数据的日期部分转换成字符串。 TTOC()将日期时间数据转换成字符串。
3.5.4 数据类型转换函数 5.宏替换函数 格式:&<字符型变量>[.] 功能:替换出字符型变量的内容,即&的值是变量 3.5.4 数据类型转换函数 5.宏替换函数 格式:&<字符型变量>[.] 功能:替换出字符型变量的内容,即&的值是变量 中的字符串。如果该函数与其后的字符无明确分界 ,则要用“.”作函数结束标识。宏替换可以嵌套使用。
3.5.5 测 试 函 数 1.值域测试函数 2.空值(NULL值)测试函数 3.5.5 测 试 函 数 1.值域测试函数 格式:BETWEEN(<表达式T>,<表达式L>,<表达式H>) 功能:判断一个表达式的值是否介于另外两个表达式的值之间。 其返回值为逻辑值。 该函数的三个自变量的数据类型要一致。 2.空值(NULL值)测试函数 格式:ISNULL(<表达式>) 功能:判断一个表达式的运算结果是否为NULL值。 其返回值为逻辑值。
3.5.5 测 试 函 数 3.“空”值测试函数 4.数据类型测试函数 格式:ISNULL(<表达式>) 3.5.5 测 试 函 数 3.“空”值测试函数 格式:ISNULL(<表达式>) 功能:判断一个表达式的运算结果是否为NULL值。 其返回值为逻辑值。 4.数据类型测试函数 格式:VARTYPE(<表达式>[,<逻辑表达式>]) 功能:测试<表达式>的类型,返回一个大写字母,函数值为字符型。 字母的含义如表所示。
3.5.5 测 试 函 数 表 用VARTYPE()测得的数据类型 返回的字母 数据类型 C 字符型或备注型 G 通用型 N 3.5.5 测 试 函 数 表 用VARTYPE()测得的数据类型 返回的字母 数据类型 C 字符型或备注型 G 通用型 N 数值型、整型、浮点型或双精度型 D 日期型 Y 货币型 T 日期时间型 L 逻辑型 X NULL值 O 对象型 U 未定义
3.5.5 测 试 函 数 5.表文件尾测试函数 6.表文件首测试函数 格式:EOF([<工作区号>|<表别名>]) 3.5.5 测 试 函 数 5.表文件尾测试函数 格式:EOF([<工作区号>|<表别名>]) 功能:测试指定表文件中的记录指针是否指向文件尾。 其返回值为逻辑值。 6.表文件首测试函数 格式:BOF([<工作区号>|<表别名>]) 功能:测试当前表文件(若缺省自变量)或指定表文件中的记录指针是 否指向文件首。 其返回值为逻辑值。 注意:表文件首是第一条记录的前面位置。
3.5.5 测 试 函 数 7.记录号测试函数 8.记录个数测试函数 3.5.5 测 试 函 数 7.记录号测试函数 格式:RECNO([<工作区号>|<表别名>]) 功能:返回当前表文件(若缺省自变量)或指定表文件中当前记录的记 录号。 8.记录个数测试函数 格式:RECCOUNT([<工作区号>|<表别名>]) 功能:返回当前表文件或指定表文件中的记录个数。
3.5.5 测 试 函 数 9.条件测试函数 10.记录删除测试函数 3.5.5 测 试 函 数 9.条件测试函数 格式:IIF(<逻辑表达式>,<表达式1>,<表达式2>) 功能:测试<逻辑表达式>的值,若为逻辑真.T.,函数返回 <表达式1>的值,若为逻辑假.F.,函数返回<表达式2>的值。 <表达式1>和<表达式2>的类型不要求相同。 10.记录删除测试函数 格式:DELETED([<表的别名>|<工作区号>]) 功能:测试指定的表,或在指定工作区中所打开的表,记录指针所 指的当前记录是否有删除标记“*”。其返回值为逻辑值。
欢迎提问!