Vf程序设计基础(数据类型:数据有不同类型,不同地方用的数据类型是不一样,C,N,D(8),L(1),I(4),T(8),Y(8),M(4)……注意有些字段的宽度是系统规定的)2.1常量与变量P481、常量(P48)值不变字符型(C):1、三种定界符,单引号、双引号、中括号(英文的标点符号)‘’,“”,[]必须成对出现,两边一致2、空串与包含空格的字符串不同‘’与‘’要点3、定界符本身也是字符串内容时,需用另外一种定界符为该字符串定界合法:‘K“ABC”S’,‘[DDD]’,'五一庆祝会'非法:[[ABC]],““AAN””,““五一”庆祝会”数值型(N):1、注意科学记数法5.878E12等于5.878*10^12整型I宽度系统定义4个字节(不含小数)货币型(Y):1、小数自动四舍五入取4位2、用8个字节表示(宽度)?$12345.67896====12345.6790日期型(D):{}称定界符,^称脱字符,分隔符有3种(/,-,.)用8个字节表示(宽度)1、严格的日期格式:{^2006/09/01},任何情况下可以用2、传统的日期格式受SETSTRITO0|1的设置影响3、日期格式的设置命令SETCENTURYON|OFF年份用4位|2位(2010年9月11小题)SETMARKTO用什么分隔符’\’,’-‘,’.’如:SETMARKTO‘-‘(注意一定加定界符)SETDATETOYMD按‘年月日’的格式Y:年M:月D:日(默认显示是“月/日/年”)日期时间型(T)逻辑型(L):1、用一个字节表示2、真、假值(.T.和.F.或.Y.和.N.)3、.T..F.为真2、变量(P52)值可以随时更改,变量有内存变量(及数组变量)和字段变量1命名规则:名字组成可以是字符(包括汉字)、下划线、数字要点:但不能以数字开头,只能以字符(英文、中文)或下划线开头。合法:A12,AB,_AB非法:1A,2B2变量赋值“=“:单个变量赋值(“=”也可以是关系(比较)运算符,注意区别)STORETO:多个变量赋相同值A=56&&把数值型常量56赋给变量ASTORE80TOD,B,C变量的值是最后一次赋的值(要点)A=24&&把24这个数值型常量赋给变量A,A是数值型变量,其值为24A=‘BNM’&&把’BNM’这个字符型常量赋给变量A,A是字符型变量,其值为’BNM’?A&&结果是BNM字符AccepttoAIFA=[123]S=0ENDIFS=1?SA)0B)1C)123D)由A的值确定(2010年3月笔试29题)内存变量的数据类型由其值决定(要点)A=12则变量A是一个数值型的内存变量。B=‘ABC’,则变量B是一个字符型的内存变量。3、输出变量的值:?,??A=12?A要点:当内存变量和字段变量同名时,优先输出字段变量的值,如要输出内存变量的值,应指明是内存变量?M-内存变量或M.内存变量2010(15)题举例:假设职员表已在当前工作区打开,其当前记录的“姓名”字段值为“李彤”(C型字段)。在命令窗口输入并执行如下命令:姓名=姓名-“出勤”?姓名屏幕上会显示AA)李彤B)李彤出勤C)李彤出勤D)李彤-出勤(2010年3月笔试27题)4、内存变量其他命令显示(DISPMEMO或LISTMEMO)LIKE模糊匹配,*、?表示任意一串或一个(通配符)清除CLEARMEMO例:LISTMEMOLIKEA*显示以字母A开头的内存变量数组:一般先定义,后使用P52二维数组F(A,B)F:数组名,A、B是下标,A、B的最小值是1,共有A*B个元素,每个元素初值都为.F.1、创建或定义数组DIMEF(2,3)或DECLAREF(2,3)定义一维数组DIMEF(9)定义二维数组DIMEF(2,3)2、定义数组后,每个元素初值为.F.(要点)3、F=3,则所有元素的值都赋值34、用一维数组的形式访问二维数组:(按行的顺序访问)二维F(1,1)F(1,2)F(1,3)F(2,1)F(2,2)F(2,3)一维F(1)F(2)F(3)F(4)F(5)F(6)(要点)表与数组表当前记录复制到数组元素中:SCATTER……TO数组名USECHENGJI&&打开数据表CHENGJIGO6&&指针指向第6条记录SCATTERTOF&&自动定义一个数组,数组名F,元素和数据表的字段个数相同?F(1),F(2)数组复制到表当前记录:GATHERFROM数组名2.2表达式P55常量、变量、函数通过特定的运算符连接起来P56特别注意:数据类型匹配数字表达式:同数学的算术表达式,运算符,()、*、+……结果:数值注意:如A是变量,则(A)是表达式字符表达式:+(完全连接),-(不完全连接)?‘ABC’-‘ABC’结果:字符日期表达式:日期-日期,日期+N,日期-N结果:日期或数值要点:日期+日期是非法关系表达式:运算符号P58结果:逻辑型数值、货币、日期数据比较(先比较“年”,再比较“月”,最后比较“天”)字串包含测试:A、B是字符型变量,A$B,A是B的子串,则为真,否则为假。?‘女’$’男女’——.t.?‘学生’$’大学生’-.t.假设有一个字段变量:姓名姓名中含有“张“字,则‘张’$姓名——.t.姓“张”的记录,则姓名=‘张’——.t.或SUBST(姓名,1,2)=‘张’----.T.或LEFT(姓名,2)=‘张’-----.T.字符排序:工具——选项——数据——排序序列中设置ASCII码:?MAX(‘2’,’12’,’05’),MAX(2,12,05)拼音:?MIN(‘章’,’柳’,’陈’),字符比较:?‘人’’人民’,’人’’人民’结果.F.和.T.注意?'abc''ab','abc''ab','abc'='ab'——.F..F..T.要点:1、相等比较运算时,右边字符串同左边字符串的开始部分,为真2、关系运算符的两边数据一定要匹配3、和$运算的区别,例查找姓王的同学(=),查找名字中有“王”字的同学($)假设数据表中有字段:姓名,用VF命令LISTFOR条件,则判定姓王的同学的条件:姓名=’王’---.T.判定姓名中有“王”字的同学的条件:’王’$姓名---.T.特别注意:姓名是字段变量,因此不能加定界符2010(12题)字符串精确比较与EXAC设置(要点)P59==:精确比较(绝对等于)SETEXACON|OFF:是|否严格OFF是默认设置1、“==”:不管EXAC的设置,精确比较“==“要两边完全相同(含空格),则.t.,否则为.f.2、“=”:(1)SETEXACOFF(非严格比较):右边的字符串同左边字符串的开始部分,.T.(2)SETEXACON(严格比较):等长(短的尾部补空格)再进行精确比较(左右是否完全一样)例:A=’AB‘B=’AB’C=’ABC’SETEXACOFF?A==B,A=B,B=A,B=C,C=B结果:.F..T..F..F..T.SETEXACON?A==B,A=B,B=A,B=C,C=B结果:.F..T..T..F..F.逻辑表达式:.T..F.为真结果:逻辑型优先级(高——低):非(NOT),与(AND),或(OR)与:且,两边必须都为真结果才是.T.,其他都是.F.。或:或者,两边的表达式结果都为.F.时才是.F.,其他都是.T.运算符优先级:算术—字符—日期—关系—逻辑例子:?((10%3=1)AND15-2=0)OR‘电脑’!=’计算机’?((1=1)and13=0)OR‘电脑’!=’计算机’(.T.AND.F.)OR.T..F.OR.T..T.2.3函数P61(带*或**和加粗的是要点,其他函数要弄清楚大概功能)数值函数P61-621、绝对值函数和符号函数ABS(数值表达式)SIGN(数值表达式)2、平方根函数SQRT(数值表达式)**4、取整函数INT(数值表达式)5、四舍五入函数ROUND(数值表达式1,数值表达式2)6、余数函数MOD(数值表达式1,数值表达式2)字符函数P62-63**1、字符串长度函数LEN(字符表达式)?len(space(10)-space(10))2、大小写转换函数upper()、lower()**3、空格字符生成函数SAPCE(数值表达式)**4、删除前后空格函数ALLTRIM(字符表达式)A=’abcdefg‘?len(a)?len(allt(a))**5、取子串函数SUBSTR、LEFT、RIGHTA=’计算机科学技术’?SUBSTR(A,7,4)----科学?LEFT(A,6)------计算机?RIGHT(A,4)------技术有如下赋值语句,结果为”大家好”的表达式是a=”你好”b=”大家”A)b+at(a,1)B)b+right(a,1)C)b+left(a,3,4)D)b+right(a,2)(笔试试卷出现多次)6、计算字串出现次数函数OCCURS(字符表达式1,字符表达式2)?OCCU(‘计’,’计算机是计算的机器’)**7、求子串位置函数AT()结果:数值型?AT(‘is’,’thisisbook’,1)----3?AT(‘is’,’thisisbook’,2)-----6?AT(‘人民’,’中华人民共和国’)-----58、子串替换函数STUFF()?STUFF(‘GOODBYE’,6,3,’MORNING’)9、字符替换函数CHRTRAN()?CHRTRAN(‘ABACAD’,’ACD’,’X12’)*11、日期时间函数P65**年份、月份、天函数?year({^2005/06/28})A={^2008/06/28}?year(a),MONTH(A),DAY(A)--------数值型数据数据类型转换函数P66*12、数值转换字符STR(〈数值表达式〉,……)数字——字符A=-123.456?STR(A,9,2),STR(A,6,2),STR(A)字符转换数值VAL(〈字符表达式〉)字符——数值A=’-3212B12’?VAL(A)*13、字符转换成日期CTOD()*日期转换成字符DTOC()A=DATE()?DTOC(A)&&转换后输出的格式MM/DD/YYYY?DTOC(A,1)&&带参数1,则转换后输出的格式是YYYYMMDD,没有分隔符?LEFT(DTOC(A,1),4)------2010**14、宏替换函数&,替换出字符型变量的内容P67A=’10+90’?a?&a,&a+500X=50Y=100Z=”x+y”?50+&z例:2010年9月笔试16题*15、测试函数P68-701)值域测试函数BETWEEN?BETWEEN(50,50,200)包含两头2)空值测试函数ISNULL.null.相当于不确定(输入CTRL+0)3)“空值”测试函数EMPTY()?EMPTY(0)“空值”对于不同的数据类型不同例:?EMPTY(.null.),EMPTY(45),EMPTY(''),EMPTY(0)?ISNULL(SPACE(0)),ISNULL(.null.),ISNULL(45)4)数据类型测试函数VARTYPE()?VARTYPE(TIME())-----c&&时间函数的数据类型返回值是字符?VARTYPE(123)-------n&&返回数据类型是数值?vartype(.null.)--------X&&“空值”的返回值是X*16、表文件头BOF()、尾EOF()、记录号RECNO()、记录个数RECCOUNT()测试函数例:数据表ABC有20条记录USEABC?BOF()-----.F.SKIP-1?BOF()-----.T.?RECNO()-----当前记录号的值是1GOBOTTOM?EOF()------.F.Skip?eof()------.T.?recno()-------注意,当前记录号的值是21注意:空表的bof()和eof()函数都为真理解:DOWHILENOTEOF()这个循环语句的条件是什么意思推导