本 章 内 容

69
§3.1 Visual FoxPro 数数数数 §3.2 数数数数 §3.2.1 数数 §3.2.2 数数 §3.2.3 数数 §3.2.4 数数数数 本本本 本本本本本本本 §3.3 本本 §3.3.1 VFP 数数数数数 §3.3.2 数数数 数数数数数 §3.4 本本本 §3.5 本本本 §§3.5.1 数数数数数 §3.5.2 数数数数数

description

第三章 数据与数据运算. 本 章 内 容. §3.1 Visual FoxPro 数据类型 §3.2 数据存储 §3.2.1 常量 §3.2.2 变量 §3.2.3 数组 §3.2.4 字段变量. §3.3  函数 §3.3.1 VFP 函数与分类 §3.3.2  常用系统函数的概念 §3.4  运算符 §3.5  表达式 §§3.5.1  表达式概述 §3.5.2  各类表达式. 3.1 Visual FoxPro 数据类型. - PowerPoint PPT Presentation

Transcript of 本 章 内 容

Page 1: 本  章  内  容

本 章 内 容§3.1 Visual FoxPro数据类型

§3.2 数据存储 §3.2.1 常量 §3.2.2 变量 §3.2.3 数组 §3.2.4 字段变量

第三章 数据与数据运算

§3.3 函数 §3.3.1   VFP 函数与分类 §3.3.2  常用系统函数的概念

§3.4 运算符

§3.5 表达式 §§3.5.1  表达式概述 §3.5.2  各类表达式

Page 2: 本  章  内  容

3.1   Visual FoxPro 数据类型 数据概念的内含包括两方面:数据内容和数据形式。数据内容用于描述客观事物的特征,即数据的“值”;数据形式是指数据内容存储于媒体中的形式,即数据的“类型”。 在 Visual FoxPro 中,数据可以存放在常量、变量、数组、字段、记录和对象等数据容器中。 数据类型定义之后,就确定了其存储方式和使用方式。只有相同类型的数据之间才能进行运算,否则就会导致数据类型不匹配的错误。

Page 3: 本  章  内  容

表 3- 1   VFP 数据类型

数据类型 代码 

特                征  占用存储字节数 

字符型  C 表示名字、地址等非数值运算的数据,可以是任意文本(包括字母、汉字、数字、空格和符号等) 

0~254个字符,每一个字符占用 1个字节 

数值型  N 由数字 0~9、符号+、-以及小数点组成的整数或小数 

在内存中占用 8节,在表中占用 1~20个字节 

整型  I  表示 -2147483647~2147483646之间的整数  4个字节 

浮点型  F  与数值型等价,但它以用浮点的形式存储 

在内存中占用 8节,在表中占用 1~20个字节 

双精度型  B  表示更高精度的数值  8个字节 

货币型  Y  表示货币量  8个字节 

日期型  D  表示包含有年、月、日的数据  8个字节 

日期时间型  T  表示包含有年、月、日及时、分、秒的数据  8个字节 

逻辑型  L  “ ” “ ”表示 真 或 假 布尔值  1个字节 

备注型  M  保存较大的文本数据  4个字节 

通用型  G  连接和嵌入 OLE对象  4个字节 

Page 4: 本  章  内  容

说明:( 1 )表 3- 1 未列出二进制字符型和二进制备注型这两种数据类型。( 2 )表的字段可使用全部的数据类型,而常量和内存变量只能使用字符型、数值型、货币型、日期型、日期时间型和逻辑型这 6 种类型的数据。

Page 5: 本  章  内  容

§3.2  数据存储 在 Visual FoxPro 中,数据不但可以存放在常量、变量、数组中,还可以存放在字段、记录和对象中。常量、变量、数组以及字段、记录和对象统称为 Visual FoxPro 数据容器,如下图所示。

常量 字段变量 变量 简单变量VFP数据 内存变量 下标变量(数组元素)

系统函数 函数 自定义函数

Page 6: 本  章  内  容

§3.2.1 常量 常量是指在操作过程中其值保持不变的量。有 N、 Y、 C、 D、 T和 L共 6 种类型。 1 .数值( N )型常量:正负整数或小数。( 1 )普通记数法: 12 ,- 24, 3.1416

( 2 )科学记数法: 5.863E12 && 表示 5.863×1012

3.246E-8 && 表示 3.246×10-8

2 .货币( Y )型常量:用于表示货币值的常量。 货币型常量的前置符为 $ ,小数保留 4 位,超过 4 位小数,则自动四舍五入。 3 .字符( C )型常量:用一对定界符( " ", ' ', [ ] )括起来的字符串。( 1 )半角的定界符要成对匹配使用。( 2 )当字符串本身包含定界符时,要使用其他定界符。如: ["ABC" 'abc']

( 3 )不包含任何字符的字符串( "" )为空串。

Page 7: 本  章  内  容

4 .日期( D )型常量( 1 )传统格式的日期常量 1 )格式: {mm/dd/yy}或 {mm-dd-yy}或 {mm.dd.yy}

2 )说明: ①传统格式日期只能在 SET STRICTDATE TO 0 状态下使用。 ②分隔符“ /” (默认)、“ -” 和“ .” 三者等效。可以使用 SET MARK TO "/"|"-"|"." 命令来指定日期的分隔符。 ③传统格式日期的格式受到 SET 命令影响。 命令格式: SET CENTURY ON|OFF

功能:用于设置年份的位数。若选用 OFF (默认值),则年份用 2位数表示;若选用 ON ,则年份用 4 位数(包含世纪)表示。 命令格式: SET DATE TO AMERICAN|ANSI

功能:设置日期显示的格式。若选用 AMERICAN (默认值),则日期显示的格式为 mm/dd/yy ;若选用 ANSI ,则日期显示的格式为 yy-mm-dd 。

Page 8: 本  章  内  容

( 2 )严格格式的日期常量 1 )格式: {^yyyy-mm-dd}

2 )说明: ①VFP 默认在日期中使用严格格式,这样就可以避免“千年虫”的问题。 ②严格格式日期不受有关日期的 SET 语句的影响。 ③分隔符“ /” (默认)、“ -” 和“ .” 三者等效。 5 .日期时间( T )型常量( 1 )格式: {< 日期 >[,|][hh[:mm[:ss]]][a|p]}

( 2 )说明: 1) < 日期 > 包含传统格式和严格格式两种。 2) [,|] 表示 < 日期 >和 < 时间 > 之间的分隔符可用逗号或空格。 3) VFP 默认使用 12 小时制, a 表示上午, p 表示下午。 日期和时间的格式不但可以用命令设置,还可以使用“选项”对话框设置。

Page 9: 本  章  内  容

6 .逻辑( L )型常量:只有逻辑真和逻辑假两个值。 用户输入时,逻辑真可用 .T. 、 .t. 、 .Y. 和 .y. 中的任意一种;逻辑假可用 .F. 、 .f. 、 .N. 和 .n. 中的任意一种。 VFP 输出时,逻辑真用 .T. ,逻辑假用 . F. 。

小结: 字符( C )型常量的定界符是一对双引号、单引号或方括号;日期( D )型和日期时间( T )型常量的定界符是一对花括号;逻辑( L )型常量的定界符是一对圆点。

Page 10: 本  章  内  容

§3.2.2   变量 1 .变量概述( 1 )变量的意义:计算机中的变量是内存中一个存储区域,变量

名是存储区域的标识名,变量值是存放在该存储区域中的数据。( 2) VFP 的变量分类

字段变量 变量 简单变量 内存变量 下标变量(数组元素)

Page 11: 本  章  内  容

( 3 )确定一个变量需要 3 个要素:变量名、数据类型和变量值。( 4 )字段变量是在创建表文件时定义的变量。字段变量的类型在创建表文件时定义。( 5 )内存变量是独立于表文件之外而保存于内存中的变量。内存变量的类型取决于它所存储的数据的类型。 2 .内存变量( 1 )内存变量的类型( 2 )内存变量的命名 1 )内存变量名用于标识内存变量。内存变量名的构成约定如下:可以由字母、汉字、数字和下划线组成;必须以字母或汉字开头;内存变量名中不能嵌入空格;内存变量名最长为 128 个字符。 2 )在 VFP 中,内存变量名允许与系统保留字(已经用于 VFP命令的关键词和函数名)同名,但尽量不用保留字作为内存变量名。

Page 12: 本  章  内  容

( 3 )内存变量赋值命令格式 1: < 内存变量名 >=< 表达式 >

格式 2: STORE < 表达式 > TO < 内存变量名表 >

功能:将表达式的值存放入内存变量。说明:“ =” 不等同于等号,在这里它是赋值操作符。【例 3- 2】X=200+300 && X, X 为 N 型内存变量职称 =" 工程师 " && “职称”为 C 型内存变量STORE 3,4,5 TO X,Y,Z &&该命令出错,为什么?STORE 3 TO X,Y,Z &&该命令等价于 X=3, Y=3, Z=3三条命令? X &&输出 X 的值为 3 ,内存变量的类型和值取决于最后一次赋值。

Page 13: 本  章  内  容

3 .内存变量常用命令( 1 )显示内存变量格式: LIST|DISPLAY MEMORY [LIKE < 通配符 >] [TO PRINTER|TO FILE < 文件名 >]

功能:显示内存当前的信息 , 包括内存变量的名、作用域、类型和取值。说明: 1 )命令动词表示做什么,必须写在命令的开头;短语又称子句,表示操作的对象及怎么做,其位置可以任意。 2 )使用 LIST ,则连续滚动显示;使用 DISPLAY ,则分屏显示,按任意键后继续显示。 3 )通配符 ? 代表该位置任意一个字符;通配符 * 代表该位置若干个连续字符。 4 )若选用 TO PRINTER ,则由打印机输出显示的内容;若选用 TO FILE < 文件名 > ,则将输出内容写到指定名字的文件;若缺省,则输出到 VFP 的主窗口(屏幕)。

Page 14: 本  章  内  容

( 2 )清除内存变量格式 1: CLEAR MEMORY

功能 1 :清除所有内存变量。格式 2: RELEASE < 内存变量名表 >

功能 2 :清除(释放)指定的内存变量。格式 3: RELEASE ALL [ LIKE < 通配符 > | EXCEPT < 通配符 >]

功能 3 :若选用 LIKE 子句,则清除与通配符相匹配的内存变量;若选用 EXCEPT 子句,则清除与通配符不相匹配的内存变量。

Page 15: 本  章  内  容

§3.2.3   数组 1 .数组的概念( 1 )数组:数组是一种特殊的内存变量,是一组同名下标变量的总称。( 2 )数组元素:组成数组的下标变量。( 3 )数组维数:数组维数决定于数组元素的下标个数,而不是数组元素的个数。( 4 )数组变量名:数组包含若干个下标变量,但只占用一个变量名。

Page 16: 本  章  内  容

2 .数组的定义格式: DIMENSION < 数组名 >( < 下标上限 1> [ , < 下标上限 2> ] )

[ , …]

功能:定义数组。说明:( 1 )一个语句可定义多个不同维数的数组【例 3- 3】

DIMENSION X(5) ,Y(2,3) &&一个语句可定义多个不同维 数的数组? X(5) ,Y(1,2) &&输出数组元素的值 .F. .F. &&数组元素的初值为 .F.

Page 17: 本  章  内  容

( 2 )一切使用简单变量的地方,均可以使用数组元素。或者说数组元素可与简单变量等同使用。

【例 3- 4】CLEAR MEMORY

DIMENSION Y(2,2) &&数组元素为 Y(1,1), Y(1,2),Y(2,1)    和 Y(2,2),其初值皆为 .F.

STORE “XXX” TO X1,Y(1,1) &&等价于X1=“XXX”, Y(1,1)="XXX"

Y(2,1)={^2001-03-23}

X2=$123.23

DISPLAY MEMORY LIKE Y* &&命令执行结果见下页

Page 18: 本  章  内  容

Y Pub(Public 公用 ) A(Array 数组 )

( 1, 1) C "XXX"

( 1, 2) L .F.

( 2, 1) D 03/23/01

( 2, 2) L .F.

XY3={^2001-08-22,11:30p} && X开头的内存变量有:X1, X2, XY3

DISPLAY MEMORY LIKE X*

RELEASE ALL EXCEPT X*

DISPLAY MEMORY LIKE X*

X1 Pub Y 123.2300

X2 Pub C "XXX"

XY3 Pub T 08/22/01 11:30:00PM

Page 19: 本  章  内  容

【例 3- 5】DIMENSION A(3)

A=8 &&等效于 A(1)=8,A(2)=8,A(3)=8

? A(1),A(2),A(3)

8 8 8

( 4 )数组可以与简单变量同名。【例 3- 6】

DIMENSION B(3)

B=8

? B(1), B(2), B(3),B

8 8 8 8

( 5 )在赋值语句中,表达式的位置可以出现数组名。【例 3- 7】

DIMENSION C(2,3)

D=C &&等价于 D=C(1,1),即 D=.F.

? D

.F.

Page 20: 本  章  内  容

§3.2.4   字段变量

1 .字段变量( 1 )字段变量是随着表文件的建立而定义的变量。( 2 )字段变量是多值变量 , 当前记录所对应的值为字段变量的值。( 3 )表文件打开后,字段变量即可用。2 .变量的优先级( 1 )允许内存变量与字段变量同名。( 2 )同名时默认字段变量优先。( 3 )可用“ M-> 变量名”或“ M. 变量名”指定内存变量。

§3.2.4   字段变量

Page 21: 本  章  内  容

【例 3- 9 】假设已经建立了职工简况表 Zgjk.dbf ,查看以下的执行命令执行的结果,体会变量的优先级的含义。USE Zgjk && 打开“ Zgjk.dbf” 表文件LIST && 显示表的全部记录,执行后记录指针指向表的结束标记 EOF

GO 1 && 把记录指针移到第 1 记录? 姓名 && 输出字段变量“姓名”的值李成华姓名 =" 赵小辉“    &&“ 姓名”为内存变量名 , 允许内存变量与字段变量同名? 姓名 && 同名时默认字段变量优先,所以此时“姓名”是字段变量李成华  && 字段变量“姓名”的值为“李成华”? M-> 姓名  && 指定“姓名”为内存变量赵小辉  && 内存变量的值为“赵小辉”? M. 姓名  && 指定“姓名”为内存变量赵小辉  && 内存变量的值为“赵小辉”

Page 22: 本  章  内  容

§3.3  函数

1. VFP 函数的概念( 1) VFP 函数实质是一段具有特定功能的程序,只不过程序代

码对用户是不可见的,用户只需知道函数的功能和用法。( 2) VFP 函数在形式与使用上都与数学函数相似。( 3 )各函数的参数(自变量)必须是特定类型的数据。( 4 )函数有一个返回值(函数值),返回值的类型不一定与参数

的数据类型一致。( 5 )函数的类型取决于返回值的类型。若不注意到这一点,在构

造表达式时,将可能产生数据类型不匹配的错误。

§3.3.1   VFP 函数的概念与分类

Page 23: 本  章  内  容

2. VFP 函数的分类( 1 )按函数提供的方式分类按提供的方式函数可分为:系统函数和自定义函数两大类。( 2 )按数据类型分类按数据类型函数可分为:数值函数、字符函数、日期函数、日期

时间函数、逻辑函数等。( 3 )按函数功能分类按功能函数可分为:转换函数、测试函数、宏替换函数等。

Page 24: 本  章  内  容

1 .数值函数( 1 )取整值函数格式: INT(< 数值表达式 >)

功能:返回数值表达式值的整数部分。【例 3- 10】

X=5.89

? INT(X) , INT(-X)

5 -5

§3.3.2  常用系统函数

Page 25: 本  章  内  容

( 2 )四舍五入函数格式: ROUND(< 数值表达式 1>,< 数值表达式 2>)

功能:返回 < 数值表达式 1> 的四舍五入结果, < 数值表达式 2> 指定要保留的小数位数。

【例 3- 11】X=345.345

? ROUND(X,2), ROUND(X,1), ROUND(X,0), ROUND(X,-1)

345.35 345.3 345 350

Page 26: 本  章  内  容

( 3 )求余数函数格式: MOD(< 数值表达式 1>,< 数值表达式 2>)

功能:返回 < 数值表达式 1> 除以 < 数值表达式 2> 的余数。若被除数与除数同号,则函数值为两数相除的余数;若被除数与除数异号,则函数值为两数相除的余数再加上除数的值。【例 3- 12】

? MOD(10,3), MOD(10,-3), MOD(-10,3), MOD(-10,-3)

1 -2 2 -1

求余数的运算的原理如下图所示。

Page 27: 本  章  内  容

( 4 )求最大值函数格式: MAX(< 数值表达式 1>,< 数值表达式 2>,[< 数值表达式3>…])

功能:计算各表达式的值,返回其中的最大值。【例 3- 13】 ? MAX(345,-3.71,57)

345

( 5 )求最小值函数格式: MIN(< 数值表达式 1 > , < 数值表达式 2 > , [ < 数值表达式 3 > …] )

功能:计算各表达式的值,返回其中的最小值。【例 3- 14】 ? MIN(345,-3.71,57)

- 3.71

Page 28: 本  章  内  容

2 .参数是字符的函数 函数参数(自变量)是字符型,函数返回值的类型不一定是字符型。函数的类型取决于返回值的类型。所以参数是字符型的函数不一定是字符型函数。( 1 )求字符串长度函数格式: LEN(< 字符表达式 >)

功能:返回字符表达式值的长度。说明:该函数是 N 型函数(不是 C 型函数)。【例 3- 15】

? LEN(”Visual Foxpro”)

13

Page 29: 本  章  内  容

( 2 )大小写转换函数格式 1: UPPER(< 字符表达式 >)

格式 2: LOWER(< 字符表达式 >)

功能 1 :将表达式中的字母转为大写。功能 2 :将表达式中的字母转为小写。说明:该函数是 C 型函数。【例 3- 16】

? UPPER("Visual FoxPro") , LOWER("Visual FoxPro")

VISUAL FOXPRO visual foxpro

Page 30: 本  章  内  容

( 3 )生成空格字符串函数格式: SPACE(< 数值表达式 >)

功能:生成空格字符串,长度由数值表达式值决定。说明:该函数是 C 型函数。【例 3- 17】

? " 北京 "+SPACE(4)+"2008 奥运会 "

  北京 2008 奥运会

Page 31: 本  章  内  容

( 4 )删除字符串前后空格函数格式 1: TRIM(< 字符表达式 >)

功能 1 :删除字符表达式值的尾部空格。格式 2: LTRIM(< 字符表达式 >)

功能 2 :删除字符表达式值的前导部空格。格式 3: ALLTRIM(< 字符表达式 >)

功能 3 :删除字符表达式值的前导和尾部空格。说明:该函数是 C 型函数。【例 3- 18】

? LEN(" TEST ")

12

? LEN(TRIM(" TEST "))

8

? LEN(LTRIM(" TEST "))

8

? LEN(ALLTRIM(" TEST "))

4

Page 32: 本  章  内  容

( 5 )取子串函数格式 1: LEFT(< 字符表达式 >,< 长度 >)

功能 1 :从字符表达式值(字符串)的左端开始取出指定长度的子串作为函数值。格式 2: RIGHT(< 字符表达式 >,< 长度 >)

功能 2 :从字符表达式值(字符串)的右端开始取出指定长度的子串作为函数值。格式 3: SUBSTR(< 字符表达式 >,< 起始位置 >,< 长度 >)

功能 3 :从字符表达式值(字符串)的指定位置开始取出指定长度的子串作为函数值。若缺省 < 长度 > ,则 从指定位置开始一直取到最后一个字符。说明:该函数是 C 型函数。【例 3- 19】X="GOOD BYE!" &&注意:空格也是一个字符? LEFT(X,2), RIGHT(X,4), SUBSTR(X,6,2), SUBSTR(X,6)

GO BYE! BY BYE!

Page 33: 本  章  内  容

( 6 )求子串位置函数格式: AT(< 字符表达式 1>,< 字符表达式 2>)

功能:若 < 字符表达式 1>是 < 字符表达式 2> 的子串,则返回< 字符表达式 1> 值的首字符在 < 字符表达式 2> 值中首次出现的位置;若不是子串,则返回 0 。说明:该函数是 N 型函数。【例 3- 20】

? AT("Fox","Visual FoxPro") , AT("fox","Visual FoxPro")

8 0

Page 34: 本  章  内  容

3 .参数是日期和日期时间的函数( 1 )系统日期和时间函数格式 1: DATE( )

功能 1 :返回系统当前日期,为 D 型函数。格式 2: TIME( )

功能 2 :返回系统当前时间,为 C 型函数。格式 3: DATETIME( )

功能 3 :返回系统当前日期时间,为 T 型函数。【例 3- 21】? DATE( ) , TIME( ) , DATETIME( )

10/06/04 20:41:02 10/06/04 08:41:02 PM

Page 35: 本  章  内  容

( 2 )求年份、月份、天数函数格式 1: YEAR(< 日期表达式 >|< 日期时间表达式 >)

功能 1 :从 D 型表达式或 T 型表达式的值中返回年份,为 N 型函数。格式 2:MONTH(< 日期表达式 >|< 日期时间表达式 >)

功能 2 :从 D 型表达式或 T 型表达式的值中返回月份,为 N 型函数。格式 3: DAY(< 日期表达式 >|< 日期时间表达式 >)

功能 3 :从 D 型表达式或 T 型表达式的值中返回日数,为 N 型函数。【例 3- 22】

D=DATE( )

? YEAR(D), MONTH(D), DAY(D)

2004 10 6

Page 36: 本  章  内  容

( 3 )求时、分、秒函数格式 1: HOUR(< 日期时间表达式 >)

功能 1 :从 T 型表达式的值中返回小时,为 N 型函数。格式 2:MINUTE(< 日期时间表达式 >)

功能 2 :从 T 型表达式的值中返回分钟,为 N 型函数。格式 3: SEC(< 日期时间表达式 >)

功能 3 :从 T 型表达式的值中返回秒数,为 N 型函数。【例 3- 23】

T= DATETIME( )

? HOUR(T), MINUTE(T), SEC(T)

20 45 34

Page 37: 本  章  内  容

( 1 )数值转换成字符串函数( N 型→ C 型)格式: STR(< 数值表达式 >[,< 长度 >[,< 小数位 >]])

功能:将 < 数值表达式 > 的值转换成字符串。说明:1 )若 < 长度 > 小于 < 数值表达式 > 值的整数部分 , 返回 *( 表示无法转换 ) 。

2 )小数点和负号都单独占一位。3 )转换时自动对小数进行四舍五入。4 )若缺省 < 长度 > ,则默认 10 ;缺省 < 小数位 > ,则默认 0 。【例 3- 24】N = -123.456

? STR(N,9,2) ,STR(N,6,1) ,STR(N,3) , STR(N,6) , STR(N)

□□-123.46 - 123.5 *** □□-123 □□□□□□ -123

Page 38: 本  章  内  容

( 2 )字符串转换成数值函数( C 型→ N 型)格式: VAL(< 字符表达式 >)

功能:将字符型数字(由正负号、数字和小数点组成)转换成 数值。说明:遇到非数字字符即停止转换。【例 3- 25】

? VAL("-123.45"), VAL("-12A.45"), VAL("A-123.45")

-123.45 -12.00 0.00

( 3 )字符串转换成日期函数( C 型→ D 型)格式: CTOD(< 字符表达式 >)

功能:将 < 字符表达式 > 的值转换成日期型数据。【例 3- 26】

? CTOD("09/10/2003")

09/10/03

Page 39: 本  章  内  容

( 4 )字符串转换成日期时间函数( C 型→ T 型)格式: CTOT(< 字符表达式 >)

功能:将 < 字符表达式 > 的值转换成日期型数据。【例 3- 27】

? CTOT("09/10/2003 20:09:52")

09/10/03 08:09:52 PM

( 5 )日期或日期时间函数转换成字符串( D或 T 型→ C型)

格式: DTOC(< 日期表达式 >|< 日期时间表达式 >[,1])

功能:将表达式值的日期部分换成字符型数据。说明:在 DTOC( ) 函数中,若使用选项“ ,1” ,则字符串的

格 式为 YYYYMMDD ,共 8 个字符。

Page 40: 本  章  内  容

【例 3- 28  】C1=DTOC(DATE()) &&将系统日期转换成字符串 , 并放入内存变量C1

C2=DTOC(DATE(),1) &&指定转换成的字符串格式为 YYYYMMDD

? C1 , C2

10/06/04 20041006

T1=DTOC(DATETIME())

T2=DTOC(DATETIME (),1)

? T1,T2

10/06/04 20041006

Page 41: 本  章  内  容

( 6 )日期时间函数转换成字符串( T 型→ C 型)格式: TTOC(< 日期时间表达式 >[,1])

功能:将日期时间型数据换成字符型数据。说明:在 TTOC( ) 函数中,若使用选项“ ,1” ,则字符 串 的格式为 YYYYMMDDHHMMSS ,共 14 个字符。【例 3- 29】? TTOC(DATETIME())

10/06/04 09:19:17 PM

? TTOC(DATETIME(),1)

20041006211917

Page 42: 本  章  内  容

( 7 )宏替换函数格式: &< 字符型内存变量 >[.]

功能:替换出字符型内存变量的内容。说明: 1 )圆点 [.] 作为函数结束的标记。 2 )它是惟一不带圆括号的函数。【例 3- 30 】使用宏替换函数表示表文件名和字段变量名。

NAME="Zgjk"

USE &NAME &&等价于 USE  Zgjk

XM=" 姓名 " &&XM为字符型内存变量? &XM+" 你好! " &&等价于 ? 姓名 +"你好! "

李成华 你好! &&姓名是字段变量,李成华是字段变量的值SKIP &&记录指针前移一条记录? &XM+" 你好! "

李小敏 你好!

Page 43: 本  章  内  容

【例 3- 31 】在宏替换函数中使用圆点作为结束的标记。 ZY=" 财会 "

? "&ZY3班 "

&ZY3 班 &&替换结果不是预期的目的 ? "&ZY.3班 "

财会 3 班 &&替换结果正确5 .测试函数( 1 )数据类型测试函数格式: TYPE("< 表达式 >")

功能:测试 < 表达式 > 的类型,返回数据类型的代码字母。说明:1 )被测试的表达式要用一对定界符括起来。2 )该函数为 C 型函数。

Page 44: 本  章  内  容

【例 3- 32】

X="TCL" &&内存变量 X 的数据类型为 C

Y=10 &&内存变量 Y 的数据类型为 N

Z=$100.2 &&内存变量 Z 的数据类型为 Y

? TYPE("X"),TYPE("Y"),TYPE("Z")

C N Y

? TYPE("DATE()"), TYPE("DATETIME()")

D T

? TYPE("W")

U && U表示被测表达式的数据类型未定义

Page 45: 本  章  内  容

( 2 )空值测试函数格式: EMPTY(< 表达式 >)

功能:若 < 表达式 > 的值为“空”,则返回 .T. ;否则返回 .F. 。说明:1 )该函数为 L 型函数。2) EMPTY( ) 函数参数表达式取表 3- 3 所列的“空”值时,函数返回值为 .T. 。注意空值 (.NULL.) 的返回值为 .F 。【例 3- 33】X=0

Y=2.18

Z=.F.

? EMPTY(X), EMPTY(Y) , EMPTY(Z) , EMPTY(.NULL.) .T. .F. .T. .F.

? EMPTY(CTOD("")),EMPTY(CTOT(""))

.T. .T.

Page 46: 本  章  内  容

( 3 )表文件结束标记测试函数格式: EOF([< 工作区号 >|< 表别名 >])

功能:若记录指针指向表文件结束标记 EOF ,则返回 .T. ;否则返回 .F. 。说明:1 )该函数为 L 型函数。2 )表文件结束标记 EOF 不是记录。3 )表文件刚打开时,记录指针指向首记录。4 )若表文件只有结构,没有记录,则函数的返回值为 .T. 。5 )若在指定工作区号没有打开表文件,则函数的返回值为 .F. 。

Page 47: 本  章  内  容

( 4 )表文件开始标记测试函数格式: BOF([< 工作区号 >|< 表别名 >])

功能:若记录指针指向表文件开始标记 BOF ,则返回 .T. ;否则返回 .F. 。说明:1 )该函数为 L 型函数。2 )表文件结束标记 BOF 不是记录。3 )表文件刚打开时,记录指针指向首记录。4 )若表文件只有结构,没有记录,则函数的返回值为 .T. 。5 )若在指定工作区号没有打开表文件,则函数的返回值为 .F. 。

Page 48: 本  章  内  容

( 5 )记录号测试函数格式: RECNO([< 工作区号 >|< 表别名 >])

功能:返回当前记录(记录指针指向的记录)的记录号。说明:1 )该函数为 N 型函数。2 )若记录指针指向 BOF ,则返回 1 。3 )若记录指针指向 EOF ,则返回总记录数 +1 。4 )若在指定工作区号没有打开表文件,则返回 0 。

Page 49: 本  章  内  容

【例 3- 34】USE Zgjk &&打开表文件 Zgjk.dbf,指针指向第一记录BROWSE &&在浏览窗口中显示表记录? BOF() , RECNO() .F. 1SKIP -1 &&记录指针倒退一个记录? BOF(),RECNO() .T. 1GO BOTTOM? EOF() , RECNO() .F. 8SKIP &&等价于 SKIP  1或 SKIP  +1? EOF(),RECNO() .T. 9GO 3 &&记录指针移到第 3 记录? BOF() , EOF() , RECNO() .F. .F. 3

Page 50: 本  章  内  容

( 6 )条件测试函数格式: IIF(< 逻辑表达式 >,< 表达式 1>,< 表达式 2>)

功能:若 < 逻辑表达式 > 的值为 .T. ,则返回 < 表达式 1> 的值;若 < 逻辑表达式 > 的值为 .F. ,则返回 < 表达式 2> 的值。【例 3- 35】

成绩 =72 &&成绩为 N 型 内存变量,其值为 72

? IIF( 成绩 >=60 , " 及格“  , " 不及格 ")

及格

Page 51: 本  章  内  容

§3.4  运算符 1 .算术运算符( 1 )算术运算符的操作与示例如下表所示。( 2 )求余运算符 % 与求余函数

MOD( ) 的作用相同。( 3 )算术运算优先级: ( ) → ^ 或 ** → *、 /、% → + 或 -

( 4 )同级运算自左向右。

运 算 符 操  作 示        例

( ) 优先 (5+3)*(5-3)

+ 加

- 减

* 乘

/ 除 3/2

**或 ^ 乘方 10**2或 10^2 && 表示 102

% 求余 10%3 && 等价于 MOD(10,3)

Page 52: 本  章  内  容

2 .字符连接运算符( 1 )字符连接运算符的操作与示例如下表 5 所示。( 2 )字符连接运算符的优先级相同。( 3 )同级运算自左向右。

运 算 符 操  作 示        例

+ 完全连接? " 中国□□□□ "+" 北京“中国□□□□北京

- 移空格连接? " 中国□□□□ "+" 北京“中国北京□□□□

Page 53: 本  章  内  容

3 .关系运算符(又称比较运算符)( 1 )关系运算符又称为比较运算符,关系运算符的操作与示例如表 3- 6 所示。( 2 )关系运算符无优先级。( 3 )同级运算自左向右。( 4 )运算符( ==, $ )专用于字符串比较。其他关系运算符可以对 N、 C、 D、 L 型数据进行比较。

Page 54: 本  章  内  容

运 算 符 操  作 示        例

> 大于 ? "two">"three" && 字符按 ASCII 码值进行比较.T.

< 小于 ? 2<3.T.

= 等于

? " 福建商专 "=" 福建 " && 非精确比较,比到右串结束即结束

.T.? " 福建 "=" 福建商专 ".F.

>= 大等于 ? " 福建商专 ">=" 福建 ".T.

<= 小等于 ? " 福建商专 "<=" 福建 ".T.

<>或 !=或#

不等于 ? " 福建商专 "<>"福 ".F.

== 字符串精确比较 ? " 福建商专 "=="福 " && 两字符串完全相等才相等.F.

$ 字符串包含 ? "金 "$" 李金斗 ".T.

Page 55: 本  章  内  容

4 .逻辑运算符( 1 )逻辑运算符的操作与示例如下表所示。

运 算 符 操  作 示    例.AND. 逻辑与 基本工资 >=1000.AND. 基本工资 <=1200

.OR. 逻辑或 车间 =" 铸造“ .OR. 车间 =" 机修 "

.NOT. 或 ! 逻辑非 .NOT. EOF()

( 2 )逻辑运算优先级: .NOT.→.AND.→.OR.

Page 56: 本  章  内  容

( 3 )逻辑运算符含义  1 )逻辑与(又称逻辑乘)运算符 .AND. 为双目运算符。 设: 1 表示逻辑真 .T., 0 表示逻辑假 .F. ,逻辑与的含义如下表所示。

X Y X .AND. Y

1 1 1×1=1

1 0 1×0=0

0 1 0×1=0

0 0 0×0=0

Page 57: 本  章  内  容

2 )逻辑或(又称逻辑加)运算符 .OR. 为双目运算符。 设: 1 表示逻辑真 .T., 0 表示逻辑假 .F. ,逻辑或的含义如下表所示。

X Y X.OR.Y

1 1 1+ 1=1

1 0 1+ 0=1

0 1 0+ 1=1

0 0 0+ 0=0

3 )逻辑非运算符 .NOT. 为单目运算符。 设: 1 表示逻辑真 .T., 0 表示逻辑假 .F. ,逻辑非的含义如下表所示。

X .NOT. X

1 0

0 1

Page 58: 本  章  内  容

3 )逻辑非运算符 .NOT. 为单目运算符。设: 1 表示逻辑真 .T., 0 表示逻辑假 .F. ,逻辑非的含义如下表所示。

X .NOT.X

1 0

0 1

5 .运算符的优先级  各类运算符及其优先级如下表 3- 11 所示。

Page 59: 本  章  内  容

.NOT.

.AND.

.OR.

逻辑

相同= > < >= <= <>、 #或 !=

= = $关系

+或 -

*、 /或%

^高

( )

算术

优 先 级运    算    符运算符类型

  5 .运算符的优先级  各类运算符及其优先级如下表所示。

Page 60: 本  章  内  容

§3.5  表达式

1 .表达式的基本概念( 1 )表达式的定义:用运算符把常量、变量和函数连接起来的式子。( 2 )数据运算的规则:只有类型相同的数据之间才能进行运算操作。所以,在构造表达式时,数据类型要统一,运算符与数据类型也要统一。( 3 )表达式的值:即表达式的运算结果。( 4 )表达式的类型:取决于表达式数据的类型。( 5 )常量、变量和函数可以看作表达式的简单特例。

§3.5.1  表达式概述

Page 61: 本  章  内  容

2 .表达式书写规则( 1 )表达式要写在同一行内。( 2 )在表达式中,运算嵌套关系的表示只用圆括号 ( ) ,不用方括号 [ ] 或花括号 { } 。( 3 )乘号 * 不能省略。

Page 62: 本  章  内  容

1 .数值表达式(又称算术表达式) 用算术运算符把数值型数据连接起来的式子称为数值表达式。

【例 3- 36 】设 a=2, b=6, c=3 ,求

在命令窗口中键入以下表达式:a=2 &&为赋值表达式,表示将常数 2 放入内存变量 a

b=6

c=3

  &&表达式写在同一行内,乘号 *不能略,只用圆括号 ( )。? (– b + sqrt ( b*b-4*a*c ) )/ (2 *a )

- 0.6340

a

acbb

2

42

§3.5.2  各类表达式

Page 63: 本  章  内  容

2 .字符表达式 用字符连接运算符( +或 - )把字符型数据连接起来的式子称为字符表达式。【例 3- 37】

   在命令窗口中键入以下表达式:X="How□"

Y="are□you!"

? X+Y &&当运算对象是字符型时,加号表示连接How□are□you!

Page 64: 本  章  内  容

3 .日期时间表达式 用运算符把日期时间型数据连接起来的式子称为日期时间表达式。 日期时间表达式的格式、运算结果和类型如表 3- 12 所示。【例 3- 38】

? DATE()-{^2002-12-8} &&若用 + 号则出错

小结: 运算符“ +” 与“ -” 可运算的数据类型有: N (算术运算)、 C (连接运算), D和 T 。

Page 65: 本  章  内  容

格      式 结  果 类  型< 日期 >+< 天数 > < 日期 > D

< 天数 >+< 日期 > < 日期 > D

< 日期 >-< 天数 > < 日期 > D

< 日期 >-< 日期 > < 天数 > N

< 日期时间 >+< 秒数 > < 日期时间 > T

< 秒数 >+< 日期时间 > < 日期时间 > T

< 日期时间 >-< 秒数 > < 日期时间 > T

< 日期时间 >-< 日期时间 > < 秒数 > N

< 日期 >+< 日期 > 出错

< 日期时间 >+< 日期时间 > 出错

表 3 - 12 日期时间表达式的格式、运算结果和类型

Page 66: 本  章  内  容

4 .关系表达式( 1 )关系表达式:用关系运算符把同类型的表达式(数据)连接而成的式子。关系运算的结果是逻辑值。( 2 )关系运算规则: 1) N 型和 Y 型数据的比较:按值的大小。 2) D 型和 T 型数据的比较:按早晚,越早越小,越晚越大。 3) L 型数据的比较:规定 .T. 大于 .F. 。 4 )关系表达式的值是 L 型数据。

Page 67: 本  章  内  容

【例 3- 39 】字符串非精确比较。1) SET EXACT OFF &&系统初态默认值 , 比较到比较运算符

右边的字符串结束即结束。在命令窗口中键入: ? " 福建商专 "=" 福建 " &&比较到右串 " 福建 " 结束即结束 .T.

2) SET EXACT ON &&设置等长比较。先在较短字符串的尾部添加空格,使两个字符串等长,

然后进行比较。在命令窗口中键入: SET EXACT ON &&设置等长比较 ? “ 福建商专” =“ 福建”             &&等效于: ? " 福建商专 "="福建□□□□ "

.F.

Page 68: 本  章  内  容

【例 3- 40 】字符串精确比较。1 )格式: < 字符表达式 1>==< 字符表达式 2>

2 )功能:若两个字符串完全相等,则返回 .T. ;否则返回 .F. 。3 )说明:不受 SET EXACT OFF|ON 状态开关的影响。 【例 3- 41】

    在命令窗口中键入:? " 福建商专 "==" 福建 " &&两个字符串完全相等才相等.F.

Page 69: 本  章  内  容

5 .逻辑表达式 逻辑表达式:用逻辑运算符把逻辑型数据连接而成的式子。【例 3- 42】

    在命令窗口中键入:? 5>3 .AND. 5<3 && 关系表达式 5>3和 5<3 的运算结果是逻辑值

.F.

? 6*8<=45 .AND. 4*5=20

.F.

? .NOT. 3+5>6

.F.