第2章VFP語言基礎(chǔ)_第1頁
第2章VFP語言基礎(chǔ)_第2頁
第2章VFP語言基礎(chǔ)_第3頁
第2章VFP語言基礎(chǔ)_第4頁
第2章VFP語言基礎(chǔ)_第5頁
已閱讀5頁,還剩103頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第二章VFP語言基礎(chǔ)2.1數(shù)據(jù)類型2.2數(shù)據(jù)存儲容器2.3運算符2.4函數(shù)2.5表達式2.6空值處理2.7程序設(shè)計基礎(chǔ)2.1數(shù)據(jù)類型數(shù)據(jù)類型是指數(shù)據(jù)對象的取值集合,以及對之可實施的運算集合;設(shè)置不同的數(shù)據(jù)類型,是為了提供合適的計算量與計算速度。創(chuàng)建表時需要用戶指明表中每個字段的數(shù)據(jù)類型。變量或數(shù)組的數(shù)據(jù)類型則由保存在其中的值來決定。VFP支持的基本數(shù)據(jù)類型類型說明大小范圍字符型任意文本每字符為1字節(jié),最多可有254個字符任意字符貨幣型貨幣量8字節(jié)-922337203685477.5808~922337203685477.5807日期型包含日期的數(shù)據(jù)8字節(jié)01/01/0001~12/31/9999日期時間型包含日期和時間的數(shù)據(jù)8字節(jié)01/01/0001~12/31/999900:00:00a.m~11:59:59p.m.數(shù)值型整數(shù)或小數(shù)在內(nèi)存中占8字節(jié),在表中占1—20字節(jié)-0.9999999999E+19~0.9999999999E+20邏輯型“真”或“假”1字節(jié)“真”(.T.)或“假”(.F.)浮點型*與數(shù)值型一樣與數(shù)值型一樣與數(shù)值型一樣雙精度型*雙精度浮點型8字節(jié)+/-4.94065645841247E-324~+/-8.9884656743115E307整型*整型值4字節(jié)-2147483647~2147483646備注型*數(shù)據(jù)塊引用在表中占4字節(jié)只受可用內(nèi)存空間限制通用型*OLE對象引用在表中占4字節(jié)只受可用內(nèi)存空間限制(其中,打“*”的類型只能用于字段,不能用于變量和數(shù)組)字符型Character(1)由任意字符(字母,數(shù)字,空格,符號等)組成;(2)可以保存諸如姓名,名稱,地址及無需算術(shù)運算的數(shù)字號碼(學(xué)號,工號,郵編等)。數(shù)值型Numberic(1)由數(shù)字、正負號及小數(shù)點組成;(2)數(shù)值型字段的小數(shù)部分位數(shù)在創(chuàng)建字段時確定,且小數(shù)點、小數(shù)位數(shù)是總字段寬度的一部分。貨幣型Currency(1)涉及貨幣數(shù)據(jù)時,可用貨幣類型來替代數(shù)值類型;(2)若小數(shù)部分超過4位,則VFP將它四舍五入到4位。日期型Date(1)日期型變量以“yyyymmdd”字符格式保存,共占8個字節(jié);(2)日期的格式取決于setdate,setmark,setcentury命令的設(shè)置,或利用菜單命令“工具/選項”,在“選項”對話框的“區(qū)域”選項卡上進行設(shè)置,常用的格式為mm/dd/yyyy。日期時間型DateTime(1)其值存儲在含有兩個4字節(jié)整數(shù)的8個字節(jié)中,第一個4字節(jié)保存日期,第2個保存時間,時間從午夜起計算,以1/100秒為最小計時單位;(2)若缺省日期值,VFP用系統(tǒng)默認值1899.12.30填入,若缺省時間值,VFP用系統(tǒng)默認的午夜零點時間。浮點型Float浮點數(shù)據(jù)類型與數(shù)值型等價提供此類型是為了和早期版本的兼容雙精度型Double(1)用于在表中存儲精度較高、位數(shù)固定的數(shù)值;(2)與數(shù)值型數(shù)據(jù)不同,在向表中輸入數(shù)據(jù)時小數(shù)點的位置由輸入的數(shù)值決定。整型Integer(1)整型字段在表中占4個字節(jié),以二進制形式存放;(2)比數(shù)值型字段占用的空間要少得多。備注型Memo(1)用于在表中存儲數(shù)據(jù)塊;(2)備注字段含有4字節(jié)的引用,指向真正的備注內(nèi)容;(3)備注數(shù)據(jù)的真正大小取決于用戶實際輸入的內(nèi)容;(4)表中記錄的備注型字段數(shù)據(jù)保存在單獨的文件中,文件名與表名相同擴展名為.fpt。通用型General(1)用于在表中存儲OLE對象;(2)通用字段含有4字節(jié)的引用,指向真正的內(nèi)容:電子表格、字處理文檔或另一個應(yīng)用程序創(chuàng)建的文件等;(3)通用字段的真正類型和數(shù)據(jù)大小取決于創(chuàng)建這些對象的OLE服務(wù)器,以及這些OLE對象是以鏈接方式還是以嵌入方式與該應(yīng)用程序相聯(lián)系。若是鏈接OLE對象,則表中只含有對數(shù)據(jù)以及創(chuàng)建這些數(shù)據(jù)的應(yīng)用程序的引用,若是嵌入OLE對象,表中將含有相關(guān)數(shù)據(jù)的副本及對創(chuàng)建這些數(shù)據(jù)的應(yīng)用程序的引用。2.2數(shù)據(jù)存儲容器常量、變量、數(shù)組、記錄、對象稱存儲數(shù)據(jù)的容器。2.2.1標識符(名稱)命名規(guī)則2.2.2常量2.2.3內(nèi)存變量2.2.4數(shù)組2.2.5字段2.2.6對象2.2.7不同數(shù)據(jù)存儲容器的作用域2.2.1名稱命名規(guī)則(1)由字母、數(shù)字、下劃線和漢字符號組成;(2)名稱不能以數(shù)字開頭,系統(tǒng)預(yù)定義了許多系統(tǒng)變量均已下劃線開頭,用戶應(yīng)避免使用下劃線開頭的名稱,且表的字段名不允許以下劃線開頭;(3)名稱的長度在1~128個字符之間,除自由表字段名、表的索引標識名≤10個字符;(4)不能使用系統(tǒng)保留字;(5)文件名的命名規(guī)則由所用的OS決定,但在應(yīng)用中文件的命名應(yīng)遵守上述規(guī)則,否則可能會發(fā)生在命令中無法引用該文件的情況(如,文件名若包含空格,在命令中引用文件時需給文件名加引號)。2.2.2常量常量(Constants):數(shù)據(jù)項的值在整個操作過程中保持不變常量據(jù)其數(shù)據(jù)類型分為6種,不同類型的常量采用不同的定界符表示(1)數(shù)值型常量(2)貨幣型常量(3)字符型常量(4)邏輯型常量(5)日期型常量和日期時間型常量編譯時常量:在設(shè)計階段先預(yù)定義一個具體值,以后凡需用到此值的地方用該值代替,可為任何一種數(shù)據(jù)類型。一經(jīng)改動,可影響到整個應(yīng)用程序。不能再用作為變量名,不能被賦值。#definemin0數(shù)值型常量(1)由數(shù)字、小數(shù)點、正負號組成(2)在內(nèi)存中占8個字節(jié)(3)可用浮點表示法來表示特大或特小的數(shù)如,1.23E20(1.23X1020),2.34E-20(2.34X10-20)貨幣型常量(1)表示貨幣型常量時,需在數(shù)字前加上美元符號$;(2)在內(nèi)存中占8個字節(jié);(3)貨幣型常量無浮點表示法$100.35,$2104字符型常量(1)又稱為字符串,是由字符串定界符括起來的一串字符;(2)3種字符串定界符:’’,””,[],注意不能使用中文標點的‘’,“”,且定界符必須成對匹配,若某定界符本身也是字符串的內(nèi)容,則用另一種定界符;(3)不包含任何字符的串(””)稱為空串,與空格串(””)不同;(4)字符串中的字母,大小寫不等價。邏輯型常量(1)邏輯真常量的表示:.T..t..Y..y.(2)邏輯假常量的表示:.F..f..N..n.(3)在內(nèi)存中占一個字節(jié)(4)字母前后的點符號(.)是邏輯常量的定界符,不可省略日期型常量和日期時間型常量(1)定界符:{}(2){}內(nèi)包含年月日時分秒等,各部分之間以分隔符進行分隔,系統(tǒng)默認的分隔符年月日之間用/,時分秒之間用:(3)VFP支持的格式:傳統(tǒng)的日期格式和嚴格的日期格式(4)VFP6.0及以上版本的默認格式為嚴格的日期格式,若要使用傳統(tǒng)的日期格式,應(yīng)用setstrictdate命令設(shè)置setstrictdate命令setstrictdate命令功能:設(shè)置是否對日期格式進行檢查語法格式:setstrictdateto0|1|20—不進行嚴格的日期格式檢查1—進行嚴格的日期格式檢查2—進行嚴格的日期格式檢查,且對CTOD(),CTOT()函數(shù)也進行嚴格的日期格式檢查傳統(tǒng)的日期格式是VFP5.0及以前版本使用的默認格式受到setdate,setcentury命令的影響默認格式為美國日期格式,語法形式為:{mm/dd/yy[hh:[mm][:ss]][a|p]}嚴格的日期格式是VFP6.0及以上版本的默認格式不受setdate等命令的影響語法形式:{^yyyy/mm/dd[hh:[mm][:ss]][a|p]}如,{^2006-01-01},{^2006-01-018:30p}空日期用{}表示2.2.3內(nèi)存變量變量(Variables):內(nèi)存中的一個存儲單元的位置,變量名是存儲位置的符號標識。可為任意數(shù)據(jù)類型,可隨時改變。VFP中稱為內(nèi)存變量。(1)變量的創(chuàng)建(2)控制變量的訪問(3)變量和字段同名時,字段優(yōu)先(4)內(nèi)存變量的保存與恢復(fù)變量的創(chuàng)建無需特別申明需要時可用STORE命令或“=”進行賦值,賦值的同時完成變量的創(chuàng)建,且確定了該變量的數(shù)據(jù)類型例,store5toa,b,c&&可將同一表達式的值賦給多個內(nèi)存變量name=“VFP”&&只能將表達式的值賦給一個內(nèi)存變量控制變量的訪問變量只在應(yīng)用程序運行時或創(chuàng)建它的工作區(qū)中存在(1)LOCAL指定局部變量:創(chuàng)建的變量或數(shù)組只能在創(chuàng)建其程序中使用、修改,不能被更高層或更低層的程序訪問

所屬的程序停止運行時,將被釋放(2)PRIVATE指定私有變量:將調(diào)用程序中定義的變量和數(shù)組在當前程序中隱藏起來,用戶可在當前程序中重新使用和這些變量同名的變量,而不影響其原始值。一旦程序停止,可重新被訪問。舉例說明(3)PUBLIC指定全局(公共)變量:當前工作期中任何運行的程序都能使用和修改變量、數(shù)組,命令窗口中創(chuàng)建的變量、數(shù)組自動賦為全局變量程序代碼1:localaa=3??af()??afunctionfprivateaa=5??aendfunc運行結(jié)果:353程序代碼2:publicaa=3??af()??afunctionfa=5??aendfunc運行結(jié)果:355變量和字段同名變量和字段同名時字段具有更高的優(yōu)先權(quán)可在變量名前加m.或m->前綴來引用它們例,usexsxm='張洪'(xm是新創(chuàng)建的內(nèi)存變量,不能單獨利用賦值符號=完成字段變量的賦值)?xm?m.xm,m->xm,xs.xm,xm&&變量,變量,字段,字段use內(nèi)存變量的保存與恢復(fù)內(nèi)存變量是系統(tǒng)在內(nèi)存中設(shè)置的臨時單元,退出VFP數(shù)據(jù)丟失可用saveto命令將內(nèi)存變量保存到文件中,以便以后使用可用restorefrom命令將內(nèi)存變量文件中保存的內(nèi)存變量恢復(fù)語法格式:savetoFileName[alllikeSkeleton|allexceptSkeleton]restorefromFileName[additive]2.2.4數(shù)組數(shù)組(Arrays):由一系列有序數(shù)據(jù)(元素)構(gòu)成,可用數(shù)組名和序號引用元素,可是任意數(shù)據(jù)類型。(1)數(shù)組的聲明(2)數(shù)組元素賦值(3)使用說明數(shù)組的聲明絕大多數(shù)情況下,數(shù)組在使用時必須預(yù)先聲明聲明方式:DECLAREDIMENSION私有數(shù)組PUBLIC全局數(shù)組LOCAL局部數(shù)組定義數(shù)組的格式:DECLARE|DIMENSION|PUBLIC|LOCAL數(shù)組名(行數(shù)[,列數(shù)])數(shù)組元素賦值聲明后每個元素默認為.F.可使用數(shù)組名和元素位置賦值,如,a(2)=3,b(2,3)=2可使用數(shù)組名整體賦相同的值,如,a=32還可使用scatter,gather,copytoarray,appendfromarray命令在數(shù)組元素與表的記錄之間進行值傳遞使用說明(1)再次定義數(shù)組,是對原數(shù)組的擴展(即使維數(shù)不同,對已存在的數(shù)組再次定義,原數(shù)組元素的值會被繼承)(2)二維數(shù)組可以作為一維數(shù)組使用(3)同一數(shù)組的不同元素可以賦不同數(shù)據(jù)類型的值2.2.5字段字段(Fields):是表中的記錄中擁有特定數(shù)據(jù)類型的命名位置,可以是任意數(shù)據(jù)類型或字段類型其數(shù)據(jù)類型在表設(shè)計階段由表設(shè)計器進行設(shè)置,或運行時由CREATETABLE確定2.2.6對象對象(Objects):對象是類的實例。類:是對于擁有數(shù)據(jù)和一定行為特征的對象集合的描述。VFP對象可以是表單、表單集、或控件??衫脤ο笸瓿蓱?yīng)用程序中需一致性、依賴性的行為,減少代碼量并提高代碼的重用性。對象有屬性,方法,并能響應(yīng)特定的事件??赏ㄟ^事件、屬性、方法處理對象。創(chuàng)建對象:表單設(shè)計器,或CREATEOBJECT()函數(shù)等2.2.7不同數(shù)據(jù)存儲容器的作用域容器作用域舉例常量私有#definemin0變量公有、私有或局部a=7數(shù)組公有、私有或局部b[2,3]=123字段永久存儲,當保存此記錄的表被打開時才可訪問REPLACEkcWITH“英語”對象屬性通過對象和對象容器層次被引用FrmA.txtkc.Value=“大學(xué)物理”數(shù)據(jù)的作用域取決于其在程序中聲明的方式和位置2.3運算符運算符(Operators)用來處理同種類型的數(shù)據(jù)。在VFP中可分為如下幾類:(1)數(shù)值運算符

(2)字符運算符

(3)日期和日期時間運算符

(4)關(guān)系運算符

(5)邏輯運算符

數(shù)值運算符又稱為算術(shù)運算符。按優(yōu)先級高低排列,VFP中提供的數(shù)值運算符如下表所示。運算符操作舉例數(shù)值運算符()子表達式分組,()中的優(yōu)先

?8*(3+2)

**或^乘方?5**2+2^2*、/乘、除?1/2*4

%模?5%3+、-加、減略字符運算符作用:連接、比較字符型數(shù)據(jù)。運算符操作舉例字符運算符+將字符串連接在一起。參加連接的串可以是字符型常量、字符型字段、字符型變量、返回值為字符型的函數(shù)。結(jié)果仍是字符型?"Visual"+"FoxPro"?"今天是"+dtoc(date())-刪除操作符左側(cè)字符串尾部的空格后連接起來(空格后置)?"abc"-"de"+"123"$比較。查看一個串(左)是否包含在另一個串(右)中結(jié)果為邏輯值?"96"$"96001"日期和日期時間運算符運算符操作舉例日期和日期時間運算符+相加?{^2006/3/1}+10?{^2006/03/018:10:20a}+10-相減?{^2006/3/1}-10?{^2006/03/018:10:20a}-10?{^2006/3/10}-{^2006/3/1}?{^2006/03/018:10:20a}-{^2006/03/017:10:20a}注意:(1)不能對兩個日期型(或兩個日期時間型)數(shù)據(jù)進行相加;(2)日期型和日期時間型數(shù)據(jù)不能相減。關(guān)系運算符運算符操作舉例關(guān)系

運算符<小于比較?200<500>大于比較?"abc">"adc"=等于比較a=50(換行)?a=30<>或#或!=不等于比較?a!=8<=小于或等于比較?a<=80>=大于或等于比較?xh>="960001"==字符串精確等于比較?xm=="王小二"使用說明關(guān)系運算符使用說明(1)可用于任意類型數(shù)據(jù)的比較,但要求運算符兩側(cè)的數(shù)據(jù)類型相同或一致(2)運算結(jié)果為邏輯值(3)有關(guān)字符串的比較A字符串比較時,系統(tǒng)對兩個串的字符從左至右逐個進行比較,一旦發(fā)現(xiàn)兩個對應(yīng)的字符不同,就根據(jù)這兩個字符的排序序列決定其大小B兩個比較字符串的運算符“=”與“==”的區(qū)別字符的排序序列字符排序序列的設(shè)置分為三種情況:(1)機器序列(Machine):按照機內(nèi)碼順序排序,從小到大依次是,空格、大寫字母、小寫字母、一級漢字(按拼音排序)、二級漢字(按筆畫排序);(2)拼音序列(PinYin):是系統(tǒng)默認的字符序列,漢字按拼音序列排序,西文字符從小到大是,空格、小寫字母、大寫字母;(3)筆畫序列(Stroke):漢字按筆畫序列排序,西文字符從小到大是,空格、小寫字母、大寫字母。具體設(shè)置:(1)工具/選項,“數(shù)據(jù)”選項卡中進行設(shè)置(2)命令:setcollateto“Machine”|”PinYin”|”Stroke”“=”與“==”的區(qū)別(1)“=”,受setexact命令影響SETEXACTOFF:默認值,右端表達式結(jié)尾前的每個字符都相匹配例:SETEXACTOFF&&左部匹配?"ABCD"="ABC"&&.T.?"ABC"="ABCD"&&.F.SETEXACTON:每個字符都相匹配;忽略表達式結(jié)尾的空格;比較時,在較短的表達式右邊加上空格,與較長者匹配例:SETEXACTON?"ABCD"="ABC“&&.F.?"ABC"="ABC"&&.T.(2)“==”,不受setexact命令影響,只有長度相等且各個個字符都相同時,兩串才相等,結(jié)果為.T.。邏輯運算符運算符操作舉例邏輯運算符()分組子表達式。改變表達式中的運算順序?.t.and(.t.or.f.)NOT或!邏輯“非”。取反一個邏輯值?not.f.?!.f.AND邏輯“與”。對兩個邏輯值進行“與”操作?.t.and.f.OR邏輯“或”?.t.or.f.用于操作邏輯類型的數(shù)據(jù),運算結(jié)果為邏輯值。按優(yōu)先級高低排列,VFP中提供的邏輯運算符如下表所示。2.4函數(shù)(Function)概念:一個預(yù)先編制好的計算模塊,可供用戶或程序調(diào)用。參數(shù)(Argument):供函數(shù)或過程操作的一個值,一個函數(shù)可接收若干個參數(shù)。返回值:返回單個值(所以函數(shù)調(diào)用可嵌入一個表達式)分類:系統(tǒng)函數(shù)和用戶自定義函數(shù)函數(shù)調(diào)用的語法格式:函數(shù)名([參數(shù)1[,參數(shù)2[,…]]])包含一對()以與命令區(qū)別。2.4.1系統(tǒng)函數(shù)的分類2.4.2常用函數(shù)2.4.1系統(tǒng)函數(shù)的分類VFP提供的函數(shù)有上百種之多按功能可分為五大類,每一大類又可分為若干功能更明確的小類參見P35表2_8(1)數(shù)據(jù)類型類包括:數(shù)值函數(shù),字符函數(shù),日期/時間函數(shù),數(shù)據(jù)轉(zhuǎn)換函數(shù)(2)數(shù)據(jù)庫類包括:數(shù)據(jù)庫函數(shù),字段函數(shù),索引函數(shù),記錄函數(shù),關(guān)系函數(shù),表函數(shù)。(3)環(huán)境類包括:環(huán)境函數(shù),文件管理函數(shù)。(4)輸入輸出類包括:鍵盤和鼠標輸入函數(shù),菜單函數(shù),打印函數(shù),窗口函數(shù)。(5)程序設(shè)計類包括:數(shù)組函數(shù),調(diào)試和錯誤處理函數(shù),低級文件函數(shù),面向?qū)ο蟪绦蛟O(shè)計函數(shù)。2.4.2常用函數(shù)應(yīng)從函數(shù)的功能,語法,及返回值等方面掌握函數(shù)數(shù)值函數(shù)字符函數(shù)日期/時間函數(shù)數(shù)據(jù)轉(zhuǎn)換函數(shù)其它常用函數(shù)數(shù)值函數(shù)(1)Abs(nExpression)——返回指定數(shù)值表達式的絕對值(2)Max(eExp1,eExp2[,eExp3…])——求最大值(3)Min(eExp1,eExp2[,eExp3…])——求最小值(4)Int(nExp)——計算指定數(shù)值表達式的值,并返回其整數(shù)部分,不進行四舍五入(5)Mod(nDividend,nDivisor)——求余數(shù)(6)Round(nExp,nDecimalPlaces)——按指定的小數(shù)位數(shù)對數(shù)值表達式四舍五入,若小數(shù)位數(shù)為負數(shù),返回結(jié)果在小數(shù)點左端包含若干個零。(7)Sqrt(nExp)——返回指定數(shù)值表達式的平方根(8)Rand()——返回0-1之間的一個隨機數(shù)舉例說明數(shù)值函數(shù)舉例說明?int(20.9)&&20?round(1234.1962,3)&&1234.196?round(1234.1962,2)&&1234.20?round(1234.1962,-2)&&1200?40*rand()+20&&返回一個介于20—60之間的一個隨機數(shù)Mod(nDividend,nDivisor)(1)被除數(shù)中的小數(shù)位數(shù)決定了返回值中的小數(shù)位數(shù);(2)除數(shù)為正,返回值為正;除數(shù)為負,返回值為負。例,?mod(5,3)&&2?mod(5.1,3)&&2.1?mod(5,-3)&&-1?mod(5,3.6)&&1?mod(-5,3)&&1?mod(-5,-3)&&-2字符函數(shù)(1)Alltrim(cExp):返回刪除字串前后空格后的串?alltrim('abcd')(2)Trim(cExp):返回刪除字串后綴空格后的串?trim('abcd')(3)Len(cExp):返回字串長度?len('abcd')&&8(4)At():返回一個字符表達式在另一個字符表達中的位置(5)Substr():取子串(6)Left(cExp,nExp):從串cExp最左邊開始取指定數(shù)目nExp個字符構(gòu)成的串,例,?left('abcdefghi',4)&&abcd(7)Right(cExp,nExp):從串cExp最右邊開始取指定數(shù)目nExp個字符構(gòu)成的串,例,?right('abcdefghi',4)&&fghi(8)Space(nExp):返回由nExp指定數(shù)目的空格構(gòu)成的串函數(shù)at()At(cSearchExp,cExpSearched[,nOccurrence]):返回一個字符表達式在另一個字符表達中出現(xiàn)的位置,若未出現(xiàn),返回0。cSearchExp:搜索表達式cExpSearched:被搜索表達式nOccurrence:指定搜索表達式在被搜索表達式中第幾次出現(xiàn),缺省時為1。函數(shù)at()區(qū)分搜索字符的大小寫函數(shù)atc()不區(qū)分搜索字符的大小寫例,?at('ab','ddAB')&&0?at('ab','ddab')&&3?atc('ab','ddAB')&&3取子串函數(shù)SubstrSubstr(cExp,nStartPosition,[,nCharactersRturned])功能:從給定的cExp或備注字段中返回一個子串。nStartPosition:返回的字串在cExp或備注字段中的位置。nCharactersRturned:返回的字符個數(shù),缺省時返回cExp結(jié)束前的全部字符。例,?substr('abcdefghi',4)&&defghi?substr('abcdefghi',4,3)&&def日期/時間函數(shù)(1)Date():返回由OS控制的當前系統(tǒng)日期,其格式受控于:setcentury,setdate,setmark命令的設(shè)置(2)Datetime():返回當前的系統(tǒng)日期和時間,其格式受控于:setcentury,setdate,setmark,sethours,setseconds命令的設(shè)置(3)Dow(dExp|tExp):返回dExp|tExp是一周的第幾天注意第一天為星期日(4)Day(dExp|tExp):返回指定表達式的值是該月的第幾天(5)Month(dExp|tExp):返回指定表達式的值中的月份值(6)Year(dExp|tExp):返回指定表達式的值中的年份值(7)Time():以24小時制8位字符串格式返回當前系統(tǒng)時間例,?len(time())數(shù)據(jù)轉(zhuǎn)換函數(shù)(1)Asc(cExp):返回字串最左邊字符的ASCII碼。(2)Chr(nExp):計算nExp的值,然后以該值為ASCII代碼返回其對應(yīng)的字符。(3)Val(cExp):字符串—〉數(shù)值(4)Dtoc()和Ttoc()函數(shù):日期|時間—〉字符串(5)Ctod()和Ctot()函數(shù):字符串—〉日期|時間(6)Str():數(shù)值—〉字符串Val(cExp)返回由數(shù)字組成的cExp的數(shù)值。(1)cExp最多由16位數(shù)字組成,若超過16位,則對其圓整。(2)Val()函數(shù)從左至右返回cExp中的數(shù)字,直到遇到非數(shù)值型字符為止。(3)若cExp的第一個字符不是數(shù)字、+、-,則返回0。例,?val("12345678901234567890")&&1.23456789012345600E+19?val("123456abc")&&123456.00?val("ab123456")&&0.00Dtoc()和Ttoc()函數(shù)Dtoc(dExp|tExp[,1])Ttoc(tExp[,1|2])參數(shù)1:指定以年月日順序且無分隔符的形式返回字符型日期;參數(shù)2:指定僅返回含時間部分的字符型時間。例,t={^2006/03/018:10:20a}?dtoc(t)&&03/01/06?dtoc(t,1)&&20060301?ttoc(t)&&03/01/0608:10:20AM?ttoc(t,1)&&20060301081020?ttoc(t,2)&&08:10:20AMCtod(

)和Ctot(

)函數(shù)Ctod(cExp):把cExp的值轉(zhuǎn)換成日期型數(shù)據(jù);Ctot(cExp):把cExp的值轉(zhuǎn)換成日期時間型數(shù)據(jù)。(1)cExp的范圍:1/1/1000至12/31/9999(2)cExp的默認格式:mm/dd/yy,可用setdate,setcentury更改默認格式(3)若輸入時未指定世紀,則默認為是當前世紀。例,t="03-15-2006"?ctod(t)&&03/15/06?ctot(t)&&03/15/0612:00:00AMStr()函數(shù)Str(nExp,[,nLength[,nDecimalPlaces]]):將nExp轉(zhuǎn)換為字符串。nLength:指定返回字符串的長度(包括小數(shù)點和小數(shù)點右邊每個數(shù)字所占的字符),缺省時默認寬度為10。nDecimalPlaces:指定返回字符串的小數(shù)位數(shù),缺省時默認寬度為0。nLength>數(shù)值寬度:前導(dǎo)空格填充。nLength<整數(shù)部分的數(shù)字位數(shù):返回一串星號,表示數(shù)值溢出。nDecimalPlaces<nExp的值中的小數(shù)位數(shù):截去多余的數(shù)字。數(shù)值寬度>10位,且未指定nLength:以浮點數(shù)形式輸出對應(yīng)的字符串。例,?str(123.45)&&_______123(_表示空格)?str(123.45,5)&&__123(未指定小數(shù)位數(shù))?str(123.45,5,3)&&__123(寬度不夠,首先保證整數(shù))?str(123.45,2)&&**(數(shù)值溢出)?str(123.45,5,1)&&123.5(截去多余的小數(shù)位)?str(1234567890)&&123567890?str(12345678901)&&_1.234E+10?str(12345678901,11)&&1235678901其它常用函數(shù)(1)between()(2)inkey()(3)type()(4)iif()(5)diskspace()(6)file()(7)messagebox()(8)getfile()between()格式:between(eTestValue,eLowValue,eHighValue)eTestValue:測試值eLowValue:指定范圍的下界eHighValue:指定范圍的上界功能:判斷eTestValue的值是否在eLowValue與eHighValue之間返回:.T.,.F.,NULL(若eLowValue或eHighValue為NULL值,則返回NULL值)例:?between('a','a','z')&&.T.?between('a','A','z')&&.F.?between('2','1','5')&&.T.?between(2,1,5)&&.T.inkey()格式:inkey([nSeconds])功能:返回一個鍵碼值,該值對應(yīng)于鍵盤緩沖區(qū)中第一個按鍵操作nSeconds:對鍵擊的等待時間;缺省時,inkey()函數(shù)立即返回一次鍵擊的值;為0時,inkey()函數(shù)一直等待到有鍵擊為止。若沒有按下鍵,inkey()函數(shù)返回0;若在等待時間按下若干個鍵,inkey()返回第一個鍵的值。例:?inkey(100)&&若在100秒內(nèi)按abcd…等鍵,返回97?inkey(0)&&若按1,返回49type()格式:type(cExpression)功能:返回表達式cExpression值的類型cExpression:表達式,且必須用引號例:?type('date()')&&D?type('datetime()')&&T?type('time()')&&C?type('.t.and.f.')&&L?type(‘a(chǎn)=5’)&&U(變量a未預(yù)先賦予數(shù)值型的值,U表示不確定的類型)a=5?type('a')&&N?type('a=5')&&L?a=5&&.T.iif()條件函數(shù)格式:iif(LExp,eExp1,eExp2)功能:根據(jù)表達式LExp的值返回eExp1,eExp2中的一個值;LExp的值為條件,當條件為真時返回eExp1的值,否則返回eExp2的值eExp1,eExp2的類型一般相同,但也可不同例:a=3?iif(a!=3,"y",0)&&0a=5b=6max=iif(a>b,a,b)?max&&6?iif(dow(date())=1ordow(date())=7,'今天休息','今天上班')diskspace()格式:diskspace()功能:返回當前磁盤驅(qū)動器上可用存儲空間的大小(字節(jié)數(shù))例:setdefaulttod:\?diskspace()file()格式:file(cFileName)功能:測試輔助存儲器上是否存在指定的文件cFileName:用于指定被測試文件的一個字符串返回:若指定文件存在,返回.T.,否則返回.F例:?file('d:\jxgl\xs.dbf')messagebox()格式:messagebox(cMessageText[,nDialogBoxType[,cTitleBarText]])功能:顯示一個用戶自定義對話框cTitleBarText:指定對話框的標題缺省時顯示“MicrosoftVisualFoxpro”返回值:函數(shù)的返回值表明選取了對話框的哪個按鈕cMessageTextcMessageText:指定在對話框中顯示的文本若文本較長需換行,可在表達式中包含回車符chr(13)例:messagebox('Hello!')messagebox('Hello!'+chr(13)+'大家好!')nDialogBoxType指定對話框中的按鈕和圖標、顯示對話框時的默認按鈕以及對話框的行為,缺省時值為0。數(shù)值對話框按鈕0“確定”1“確定”,“取消”2“終止”,“重試”,“忽略”3“是”,“否”,“取消”4“是”,“否”5“重試”,“取消”數(shù)值圖標16“停止”32“問號”48“驚嘆號”64“信息(i)”數(shù)值默認激活按鈕0第一個按鈕256第二個按鈕512第三個按鈕例,messageb('Error,inputagain!',4+48+0)函數(shù)名的縮寫返回值函數(shù)的返回值表明選取了對話框的哪個按鈕返回值按鈕1確定2取消3放棄4重試5忽略6是7否例,?messageb('Again!',4+48+0)函數(shù)名的縮寫getfile()格式:getfile([cFileExtensions][,cText])功能:顯示“打開”對話框cFileExtensions:文件擴展名用于指定沒有選擇“全部文件”時,列表中顯示的擴展名cText:指定文件文本框前的標簽返回:選定文件的名稱例:a=getfile('pjx','項目文件名')?acText參數(shù)cFileExtensions參數(shù)2.5表達式表達式(Expression):是通過運算符將變量、常量、函數(shù)、字段名等組合起來可以進行運算的式子。單個的常量、函數(shù)、字段名、控件及屬性都為表達式,一般而言,可使用常量的地方都可使用表達式表達式求值的結(jié)果:單個值表達式的應(yīng)用:設(shè)置字段和記錄的有效性規(guī)則,表示查詢條件等表達式的類型:字符表達式,日期表達式,算術(shù)表達式,邏輯表達式,名稱表達式和宏替換表達式的運算:表達式自左向右進行運算。在運算過程中,當運算出某個中間結(jié)果后,若已經(jīng)能確定最終的結(jié)果,則將終止本邏輯表達式中后面部分的運算字符表達式(1)組成:由字符運算符(+、_、$)、字符類型的字段、返回字符值的函數(shù)、字符型變量、數(shù)組元素、字符常量組成(2)運算結(jié)果:字符型,邏輯型(如,表達式‘a(chǎn)’$‘a(chǎn)b’結(jié)果為.T.)日期表達式(1)組成:由日期運算符、Date或DateTime類型的字段、返回日期或日期和時間的函數(shù)、日期或時間型的變量和數(shù)組元素、Date或DateTime類型的常量組成(2)運算結(jié)果:日期型,日期時間型,數(shù)值型算術(shù)表達式(1)組成:由算術(shù)運算符、Float、Double、Integer、Numeric類型的字段,返回一個數(shù)值數(shù)據(jù)的函數(shù),包含數(shù)值數(shù)據(jù)的變量和數(shù)組元素,數(shù)值常量組成(2)運算結(jié)果:數(shù)值型邏輯表達式(1)組成:由邏輯運算符和邏輯類型字段、返回邏輯值的函數(shù)、包括邏輯值的內(nèi)存變量或數(shù)組元素、邏輯常量、任何一個返回邏輯值的表達式組成(2)運算結(jié)果:真(.T.)、假(.F.)名稱表達式和宏替換(1)名稱表達式定義:名稱表達式是由圓括號括起來的一個字符表達式,該表達式可以是單個變量或數(shù)組元素作用:用來替換命令和函數(shù)中的名稱,為命令和函數(shù)提供了靈活性舉例說明名稱表達式的具體應(yīng)用(2)宏替換作用:宏替換與名稱表達式具有相似的作用,可使用宏替換的方法用內(nèi)存變量替換名稱使用方式:將連字符&置于變量名前,告訴VFP將此變量值當作名稱使用,可使用一個點符號(.)結(jié)束宏替換表達式舉例說明宏替換的具體應(yīng)用(3)宏替換與名稱表達式的區(qū)別宏替換與名稱表達式的區(qū)別同:都可以用變量或數(shù)組中的值來替換名稱異:宏替換的范圍更廣些,而名稱表達式的運行速度更快些(1)宏替換可以替換整個命令,而名稱表達式不行(2)宏替換可以作為其它表達式的組成部分,而名稱表達式不可以(3)某些命令和函數(shù)中不能使用名稱表達式usejsf='js.xm'locatefor&f=‘高山’&&可以實現(xiàn)正確定位locatefor(f)=‘高山‘&&不能實現(xiàn)正確定位a='dir‘&a(a)&&出錯s='xh'&s='0118101'(s)='0118102'&&出錯store'0181202'to(s)&&正確執(zhí)行?&s,(s)&&結(jié)果為0118102xha=5b=10c='a'?max(&c,b)?max((c),b)&&出錯名稱表達式具體應(yīng)用(1)用名稱表達式替換命令中的變量名a=100b='a'(b)=10store10to(b)&&相當于store10toa?a&&結(jié)果為10(2)用名稱表達式替換命令中的文件名a='xs'use(a)&&相當于usexs(3)可用字符表達式來構(gòu)成一個名稱表達式a='jxsj'b='xs'use(a+'!'+b)&&相當于usejxsj!xs(4)使用多個名稱表達式時,以逗號將各個名稱分隔,形成名稱列表usexsf1='xh'f2='xm'browsefields(f1),(f2)小結(jié):將名稱保存到變量或數(shù)組元素中,以后就可以用名稱表達式(用小括號括起內(nèi)存變量)來代替在命令或函數(shù)中所需的名稱宏替換的具體應(yīng)用例1:x='1'y='2'm1y=34?m&x.y&&相當于?m1y

例2:a=100ab=100s='a'store200to&sstore300to&s.b?a,ab2.6空值處理支持空值的作用:降低了表達未知數(shù)據(jù)的難度,且可更方便地與含有NULL值的Access或其他SQL數(shù)據(jù)庫產(chǎn)品協(xié)同工作(1)NULL值的特點(2)NULL值在命令和函數(shù)中的行為(3)NULL值在邏輯表達式中的行為NULL值的特點(1)等價于沒有任何值(2)與0、“”、空格不同(3)排序優(yōu)先于其他數(shù)據(jù)(4)在計算過程中或大多數(shù)函數(shù)中可用到(5)會影響命令、函數(shù)、邏輯表達式和參數(shù)的行為,VFP支持的NULL可出現(xiàn)在任何使用值或表達式的地方(6)可用ISNULL()函數(shù)判斷是否為NULL值(7)NULL值不是一種數(shù)據(jù)類型,當給字段或變量賦NULL值時,該字段或變量的數(shù)據(jù)類型不變,只是值變?yōu)镹ULL值。a='10'a=NULL?type('a')&&CNULL值在命令和函數(shù)中的行為以下通用規(guī)則適用于傳遞給命令和函數(shù)的NULL值:(1)給命令傳遞NULL值將產(chǎn)生錯誤(2)接收.NULL.為有效參數(shù)的函數(shù)其結(jié)果亦為.NULL.(3)若向本應(yīng)接受數(shù)值型參數(shù)的函數(shù)傳遞.NULL.值參數(shù),將產(chǎn)生錯誤(4)當傳遞NULL值時,ISBLANK()、ISDIGIT()、ISLOWER()、ISUPPER()、ISALPHA()和EMPTY()返回.F.,而ISNULL()返回.T.(5)INSERT-SQL和SELECT-SQL命令通過ISNULL和ISNOTNULL子句處理NULL值。在這種情況下,INSERT、UPDATE、REPLACE將NULL值放入記錄中(6)SQL合計函數(shù)將忽略NULL值,若所有值皆為NULL,則VFP合計函數(shù)產(chǎn)生.NULL.,否則任何NULL值將被忽略相關(guān)函數(shù)的返回值參數(shù)EMPTY()ISBLANK()ISNULL()NULL.F..F..T.空白字段、空字符串、空格字符串.T..T..F.0.T..F..F.NULL值在邏輯表達式中的行為邏輯表達式表達式的結(jié)果X=.T.X=.F.X=.NULL.XAND.NULL..NULL..F..NULL.XOR.NULL..T..NULL..NULL.NOTX.F..T..NULL.2.7程序設(shè)計基礎(chǔ)程序相關(guān)概念程序的創(chuàng)建與運行程序結(jié)構(gòu)過程與用戶自定義函數(shù)程序相關(guān)概念程序:是為了完成某一具體任務(wù)而編寫的一系列指令。VFP程序由一系列代碼組成,代碼可以包括以命令形式出現(xiàn)的指令、函數(shù)或VFP可以理解的任何操作。且VFP將過程化程序設(shè)計與面向?qū)ο蟪绦蛟O(shè)計結(jié)合在一起,幫助用戶創(chuàng)建出功能強大、靈活多變的應(yīng)用程序。在程序中能完成的工作都可以通過界面或命令操作方式來完成,而運行程序具有明顯的優(yōu)勢:程序可被修改并重新運行;可從菜單、表單和工具欄啟動程序;一個程序可調(diào)用其它程序;具有在命令窗口中所不能使用的結(jié)構(gòu)化程序設(shè)計命令。程序的創(chuàng)建與運行創(chuàng)建程序文件(1)文件/新建菜單命令(2)常用工具欄/新建按鈕(3)項目管理器:代碼選項卡/程序/新建(4)命令窗口:modifycommand[Filaname|?]運行程序(1)常用工具欄/“!”按鈕(2)項目管理器:選擇程序文件/運行(3)命令窗口:doProgramName[withParameterList]運行程序文件的過程一旦運行程序文件,系統(tǒng)會自動地對程序文件(*.prg)進行編譯,生成偽編譯程序(*.fxp);執(zhí)行程序時,系統(tǒng)實際上是執(zhí)行*.fxp文件;偽編譯是計算機系統(tǒng)中對解釋性程序語言源代碼保密的一種常用技術(shù),文本格式的源代碼經(jīng)過偽編譯成為二進制機器碼,并可被特定的程序讀懂。程序結(jié)構(gòu)程序結(jié)構(gòu)——根據(jù)不同的情況和條件,控制程序去執(zhí)行相應(yīng)的語句序列程序結(jié)構(gòu)主要分為:(1)順序結(jié)構(gòu),按照順序依次執(zhí)行程序中的命令;(2)分支結(jié)構(gòu),根據(jù)條件的結(jié)果執(zhí)行不同的操作;(3)循環(huán)結(jié)構(gòu),使得一組語句重復(fù)執(zhí)行若干次。順序,分支,循環(huán)可相互嵌套(在一種結(jié)構(gòu)中包含任何一種結(jié)構(gòu)),一個程序從總體上來說是一個順序結(jié)構(gòu),而其中的各個子部分則是各種結(jié)構(gòu)的組合和嵌套。程序結(jié)構(gòu)的嵌套嵌套:在一種程序結(jié)構(gòu)中包含另一種程序結(jié)構(gòu)例,clearfori=1to9forj=1toi??str(j,1)+'*'+str(i,1)+'='+str(i*j,2)+space(2)endfor?endfor分支結(jié)構(gòu)兩種實現(xiàn)分支結(jié)構(gòu)的語句:(1)IF…ELSE...ENDIF語句(2)DOCASE…ENDCASE語句語法格式與執(zhí)行過程舉例說明語法格式:IF條件表達式[THEN]命令組1[ELSE命令組2]ENDIF執(zhí)行過程:若含有ELSE子句,當條件表達式為.T.時,執(zhí)行命令組1,否則執(zhí)行命令組2;若不含有ELSE子句,當條件表達式為.T.時,執(zhí)行命令組1,否則執(zhí)行ENDIF后面的語句。…ifa>bmax=aelsemax=bendif?max…ifx>=0ifx>0y=1elsey=0endifelsey=-1endifDOCASE語句語法格式與執(zhí)行過程語法格式:DOCASECASE條件表達式1命令組1[CASE條件表達式2命令組2……CASE條件表達式N命令組N][OTHERWISE其他命令組]ENDCASE執(zhí)行過程:從第一個CASE開始,判斷其后的條件表達式是否為.T.,當遇到第一個結(jié)果為.T.的表達式時,執(zhí)行它后面的命令組,跳過下一個CASE和ENDCASE之間的所有語句,若包含了OTHERWISE語句,當所有的CASE表達式的值為.F.時,執(zhí)行OTHERWISE后的其它命令組。a=1b=-2c=1delta=b*b-4*a*cDOCASECASEdelta>0?"方程有兩個不相等的實數(shù)根:"??(-b+sqrt(delta))/(2*a)??(-b-sqrt(delta))/(2*a)CASEdelta=0?"方程有兩個相等的實數(shù)根:"??-b/(2*a)CASEdelta<0?"方程有兩個復(fù)根:"real_part=-b/(2*a)img_part=sqrt(-delta)/(2*a)

?ALLTRIM(STR(real_part))+"+"ALLTRIM(STR(img_part))+"i"

?ALLTRIM(STR(real_part))+"-"ALLTRIM(STR(img_part))+"i"ENDCASE循環(huán)結(jié)構(gòu)循環(huán):使得一組語句組重復(fù)執(zhí)行若干次??深A(yù)先指定要循環(huán)的次數(shù),也可不預(yù)先指定;只要某個條件成立,就可一直循環(huán)下去,直到條件不成立。三種實現(xiàn)循環(huán)的語句(1)FOR…ENDFOR計數(shù)循環(huán)(2)DOWHILE…ENDDO根據(jù)某條件決定是否結(jié)束循環(huán)(3)SCAN…ENDSCANLO

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論