2008-02-11

VFP常用函數

VFP常用函數
一.字元及字串處理函數:字元及字串處理函數的處理物件均為字元型資料,但其返回數值型別各異.
1.取子串函數:
格式:substr(c,n1,n2)
功能:取字串C第n1個字元起的n2個字元.返回數值型別是字元型.
例:取姓名字串中的姓.
store "王小風" to xm
?substr(xm,1,2)
結果為:王
2.刪除空格函數:以下3個函數可以刪除字串中的多餘空格,3個函數的返回值均為字元型.
trim(字串):刪除字串的尾部空格
alltrim(字串):刪除字串的前後空格
ltrim(字串):刪除字串的前面的空格
例:去掉第一個字串的尾空格後與第二個字元串連接
store "abcd " to x
store "efg" to y
?trim(x)+y
abcdefg
3.空格函數:
格式:space(n)
說明:該函數的功能是產生指定個數的空格字串(n用於指定空格個數).
例:定義一個變數dh,其初值為8個空格
store space(8) to dh
4.取左子串函數:
格式:left(c,n)
功能:取字串C左邊n個字元.
5.取右子串函數:
格式:right(c,n)
功能:取字串c右邊的n個字元
例:a="我是中國人"
?right(a,4)
國人
?left(a,2)

6.empty(c):用於測試字串C是否為空格.
7.求子串位置函數:
格式:At(字串1,字串2)
功能:返回字串1在字串2的位置
例:?At("教授","副教授")
2
?AT("I","CHINA")
3

8.大小寫轉換函數:
格式:
lower(字串)
upper(字串)
功能:lower()將字串中的字母一律變小寫;upper()將字串中的字母一律變大寫
例:
bl="FoxBASE"
?lower(bl)+space(2)+upper(bl)
foxbase FOXBASE
9.求字串長度函數:
格式:len(字串)
功能:求指定字串的長度
例:a="中國人"
?len(a)
6
二.數學運算函數:
1.取整函數:
格式:int(數值)
功能:取指定數值的整數部分.
例:取整並顯示結果
?int(25.69)
25
2.四捨五入函數:
格式:round(數值運算式,小數位數)
功能:根據給出的四捨五入小數位數,對數值運算式的計算結果做四捨五入處理
例:對下面給出的數四捨五入並顯示其結果
?round(3.14159,4),round(2048.9962,0),round(2048.9962,-3)
3.1416 2049 2000
3.求平方根函數:
格式:sqrt(數值)
功能:求指定數值的算術平方根
例:?sqrt(100)
10
4.最大值、最小值函數:
格式:
Max(數值運算式1,數值運算式2)
Min(數值運算式1,數值運算式2)
功能:返回兩個數值運算式中的最大值和最小值
例:
x1=123.456
x2=234.567
?max(x1,x2)
234.567
?min(x1,x2)
123.456
5.求餘數函數:
格式:mod(運算式1,運算式2)
功能:求運算式1對運算式2的餘數
例:
?mod(10,3)
1
6.求指數、對數函數:
格式:
exp(數值運算式)
log(數值運算式)
功能:
(1).exp()計算自然數e為底,運算式的值為指數的冪
(2).log()計算運算式值的自然對數,返回lnx的值.
例:
x=1
y=exp(x)
?exp(x),log(x)
2.72 1
三.轉換函數:
1.數值轉數位字串函數:
格式:str(n,n1,n2)
功能:將數值n轉換為字串,n1為總長度,n2為小數位
例:?str(321.56)
322 &&隱含四捨五入取整轉換為字元型資料
?str(321.56,6,2)
321.56
2.字元轉數值函數:
格式:val(s)
功能:將數位字串s轉換為數值
例:x="23"
y="76"
?val(x)+val(y)
100
3.字元轉日期函數:
格式:ctod(c)
功能:將日期字串c轉換為日期
例:set date ansi &&日期格式設為美國標準化協會格式
?ctod("^2005.11.14")
2005.11.14
4.日期轉字元函數:
格式:dtoc(d)
功能:將日期d轉化為日期字串
例:將日期型資料轉化為字元型日期資料並顯示漢字日期.
set century on &&開啟世紀首碼,即日期中年份用4位表示
set date ansi
rq={^2005.11.14}
rq=dtoc(rq)
?substr(rq,1,4)+"年"+substr(rq,6,2)+"月"+substr(rq,9,2)+"日"
2005年11月14日
5.時間轉字元函數:
格式:ttoc(時間)
功能:將時間轉為時間字串
6.字元轉時間函數:
格式:ctot(c)
功能:將時間字串轉化為時間
7.字串替換函數:
格式:stuff(<字元運算式1>,<起始位置>,<字元個數>,<字元運算式2>)
功能:從指定位置開始,用<運算式2>的值去替換<運算式1>中指定個數字元.若<字元個數>為零,直接插入;若<運算式2>為空字串,則刪除<運算式1>中指定個數的字元.
例:X="祝大家新年好!"
?stuff(X,7,4,"春節")
祝大家春節好
?stuff(X,11,0,"春節")
祝大家新年春節好
?stuff(x,7,4," ")
祝大家好
8.字元轉ASCⅡ碼函數:
格式:Asc(<字元運算式>)
功能:把<字元運算式>左邊第一個字元轉成相應的ASCⅡ碼值
例:x="Foxpro"
?Asc(x),Asc(lower(x))
70 102
9.ASCⅡ碼值轉字元函數:
格式:chr(數值運算式)
功能:把數值轉成相應的ASCⅡ碼字元,返回值為字元型
例:?chr(70)+chr(111)+chr(111+9)
Fox
四.日期函數:
1.系統日期函數:
格式:date()
功能:給出系統的當前日期,返回值是日期型資料.
例:顯示系統日期
?date()
11/14/05
set date ansi
set century on
?date()
2005.11.14
2.年、月、日函數:
格式:(1).year(日期運算式):從日期運算式中返回一個由四位元數字表示的年份.
(2).month(日期運算式):從日期運算式中返回一個用數字表示的月份.
(3).day(日期運算式):從日期運算式中返回一個用數字表示的日數.
例:測試系統日期
rq=date()
?year(rq),month(rq),day(rq)
2005 11 14
3.系統時間函數:
格式:time()
功能:得到當前時間字串
例:?time()
20:32:26
4.系統日期時間函數:
格式:datetime()
功能:得到當前日期時間
例:?datetime()
2005.11.14 08:35:12 PM
5.星期函數:
格式:dow(日期運算式)
cdow(日期運算式)
功能:dow用數字表示星期,1表示星期日,7為星期六;cdow用英文表示星期
例:?date()
2005.11.15
?dow(date()),cdow(date())
3 Tuesday
五.測試函數:
1.測試檔案結尾函數:
格式:eof([n])
說明:
(1).n指定被測工作區號,其範圍為1~32767
(2).該函數用於測試指定工作區中的表的記錄指標是否指向檔案結尾,是則返回真值;否則返回假值;省略可選項指當前工作區.
例:測試檔記錄指標是否指向檔案結尾
use 職工檔案
go bottom
?eof()
.F.
skip
?eof()
.T.
2.測試檔頭函數:
格式:bof([n])
說明:
(1).n指定被測工作區號,其範圍為1~32767
(2).用於測試指定工作區中的表的記錄指標是否指向檔頭,是則返回真值;否則返回假值;省略可選項指當前工作區.
例:測試記錄指標是否指向檔頭
use 職工檔案
go top
?bof()
.f.
skip -1
?bof()
.t.
3.測試目前記錄號函數:
格式:recno()
功能:得到當前的記錄號
例:
use 職工檔案
?recno()
1
skip
?recno()
2
4.測試表檔記錄數函數:
格式:reccount()
功能:得到表的記錄數
例:測試"職工檔案"表的記錄數
use 職工檔案
?reccount()
5
5.測試表字段數函數:
格式:fcount()
功能:得到當前的欄位數
例:測試"職工檔案"表共有多少個欄位
use 職工檔案
?fcount()
9
6.測試查找記錄是否成功函數:
格式:found()
功能:測試find、seek和locate命令查找記錄是否成功.如成功則返回真值,否則為假值.
例:在"職工檔案"表中查找"小剛"的文化程度
use 職工檔案
locate for 姓名="小剛"
?found()
.t.
display
7.檔測試函數:
格式:file(字元運算式)
功能:測試字元運算式指定的檔是否存在
例:?file("e:\myvfp\職工檔案.dbf")
.t.
8.資料類型測試函數:
格式:type(字元運算式)
功能:測試運算式的資料類型,返回大寫字母:N(數值)、C(字元)、L(邏輯)、D(日期)、M(備註)
例:
x=1236
y="hello"
?type("x")
N
?type("y")
C
9.測試工作區函數:
格式:select()
功能:返回當前工作區的區號
10.測試別名函數:
格式:alias()
功能:測試當前工作區的別名
例:
select 1
use 職工檔案 alias zgda
select 2
use 工資情況
?alias()
工資情況 &&打開表時,不指定別名,表名即為別名
select zgda &&通過別名選擇工作區
?select()
1
11.表檔案名函數:
格式:dbf()
功能:返回當前工作區打開的表名
例:
use 工資情況
?dbf()
e:\myvfp\工資情況
六.其它函數:
1.巨集替換函數:
格式:&變數名
說明:vfp中只有巨集替換函數沒有括弧.功能是返回指定字元型變數中所存放的字串.
例:為"工資情況"表中每個人加100元工資
gz="工資"
use 工資情況
replace all &gz with &gz+100
2.條件函數:
格式:iif(運算式,運算式1,運算式2)
功能:若運算式值為真,則返回運算式1的值;否則返回運算式2的值;函數返回數值型別與運算式1或運算式2類型一致
a=3
b=5
?iif(a>b,"高興","開心")
開心
3.訊息方塊函數:
格式:messagebox(提示文本[,對話方塊類型[,對話方塊標題文本]])
功能:顯示提示對話方塊
說明:
(1)對話方塊類型見表1:
對話方塊類型 功能
0 僅"確定"按鈕
1 "確定"和"取消"按鈕
2 "終止","重試"和"忽略"按鈕
3 "是","否"和"取消"按鈕
4 "是"和"否"按鈕
5 "重試"和"取消"按鈕
16 stop圖示
32 ?圖示
48 !圖示
64 i圖示
0 預設第1個按鈕
256 預設第2個按鈕
512 預設第3個按鈕

(2).返回值見表2:
返回值 按鈕
1 確定
2 取消
3 終止
4 重試
5 忽略
6 是
7 否
例:分析messagebox("您確實要退出系統嗎?",4+64,"提示資訊")會彈出什麼樣的視窗.
分析:回頭觀察此函數的格式,彈出的對話方塊中的提示文本是"您確實要退出系統嗎",對話方塊標題是"提示資訊",
函數中間有"4+64",其中4指定對話方塊中出現"是"和"否"兩個按鈕(見表1),64指定對話方塊中出現i圖示(見表2)
ok,我們在命令視窗依次執行下列命令:
tui=messagebox("您確實要退出系統嗎?",4+64,"提示資訊")
&&變數tui用於接收messagebox函數的返回值,彈出的窗口如圖1
?tui
&&變數tui值取決於運行時使用者點了哪個按鈕,如果點了"是",返回6,如果點了"否",返回7,見表2
說明:實際應用中,我們常在系統功能表或在表單的"退出"按鈕中添加如下代碼:
tui=messagebox("您確實要退出系統嗎?",4+64,"提示資訊")
if tui=6 &&如果此條件成立,說明用戶點了"是"按鈕,執行quit命令,安全退出
quit
endif

VFP常用命令小結
1、CREATE
作用:建立一個新的表。
格式:CREATE [<文件>|?](注意,命令字符可取前面四個字元,後面可省略不寫,即CREA,下同;中括弧表示其中的參數是可選的;|管道符號表示兩個參數只能選擇一個,不能同時選擇,下同。)如:ceate d:\rsb
說明:文件指建立以.dbf為副檔名的VFP資料庫檔,在命令後面加上一個問號表示系統會彈出對話方塊,要求用戶輸入想要建立的表名。在命令中不加檔案名或問號系統也會彈出對話方塊,要求用戶輸入想要建立的表名。
2、MODIFY STRUCTURE
作用:顯示表檔結構,並允許修改此表的結構。
格式:MODIFY STRUCTURE
說明:只有在用USE命令打開表檔以後,才能顯示或修改表檔的結構。
3、APPEND
作用:在當前表的尾部(無論表中有無記錄)追加記錄(在當前表指當前正使用的表)。
格式:APPEND [BLANK]
說明:在APPEND命令後面加上BLANK參數表示在當前表的尾部添加一條空白記錄。無BLANK參數時,表示在當前表的尾部添加一條記錄並要求使用者輸入相應的欄位內容。
4、INSERT
作用:在表檔中間插入一個新記錄。
格式:INSERT [BEFORE] [BLANK]
說明:INSERT 在目前記錄後插入一記錄;
INSERT BEFORE 在目前記錄前插入一記錄;
INSERT BEFORE BLANK 在目前記錄前插入一空記錄。
5、BROWSE
作用:主要用於打開流覽視窗,查閱表檔並同時進行修改。
格式:BROWSE [FIELDS <欄位名表>]
6、USE
作用:打開和關閉表文件。
格式:USE [<檔案名>]
USE
說明:前一個命令用來打開<檔案名>指定的表檔,該表如有備註型欄位,則同時打開相應的
備註文件(.fpt文件);後一個命令關閉當前打開的表檔。
7、LIST和DISPLAY
作用:顯示表(.dbf)的內容、結構或狀態。
格式:LIST|DISPLAY [OFF] [<範圍>] [FIELDS] <運算式表> [WHILE <條件>] [FOR <條件>]
[TO PRINT|TO FILE <文件>]
LIST|DISPLAY STRUCTURE TO PRINT|TO FILE <文件>]
LIST|DISPLAY STATUS [TO PRINT|TO FILE <文件>]
說明:命令帶OFF參數表示不顯示記錄號,範圍指定對哪些記錄進行操作,範圍包括:RECORD n
第幾號記錄、NEXT n 目前記錄開始的幾個記錄、REST 自目前記錄開始至檔末尾的所有記錄、ALL
所有的記錄。不選範圍則隱含範圍為ALL;FIELDS後跟欄位名,欄位名與欄位名之間用逗號分
隔。WHILE後跟條件,FOR後面也跟條件,區別是,WHILE後的條件如果滿足,便停止查找;FOR後的
條件查找所有滿足條件的記錄。TO PRINT和TO FILE <檔>分別表示將顯示結果在印表機上列印出
來和將顯示結果輸出到檔。DISPLAY命令在顯示記錄滿屏後,要求使用者按任意鍵繼續顯示,並且在
該命令中,如果省略範圍僅顯示目前記錄。格式中,下面兩個命令分別為顯示表結構(STRUCTURE)和工作狀態(STATUS)。
8、記錄的定位
作用:用記錄指標(POINTER)定位記錄。
格式:GO[TO] RECORD n|TOP|BOTTOM
n
SKIP [+|-]
說明:第一個命令又叫絕對定位,其中,RECORD n定位到n號記錄,TOP定位到第1個記錄,
BOTTOM定位到最後一個記錄。第二個命令定位到第n個記錄,n是一個數值。第三個命令又叫相對定
位,它以目前記錄為基準前移(-)或後移(+)n個記錄,不選任選項,則預設記錄指標後移一個記錄。
9、CHANGE和EDIT
作用:顯示要編輯或修改的欄位。
格式:CHANGE|EDIT [<範圍>] [FIELDS <欄位名表>] [WHILE <條件>] [FOR <條件>]
10、REPLACE
作用:用運算式的值代替命令中與之相對應的欄位的內容。
格式:REPLACE [<範圍>] <欄位1> WITH <運算式1>[,<欄位2> WITH <運算式2>] [FOR <條件>
] [WHILE<條件>]
11、DELETE、PACK、ZAP和RECALL
作用:分別是給要刪除的記錄作刪除標記、徹底刪除、刪除所有記錄和取消被選中的表記錄的
刪除標誌。
格式:DELETE [<範圍>] [WHILE<條件>] [FOR <條件>] (特例:DELETE FILE FILENAME.DBF,
該命令刪除指定的表檔)
PACK
ZAP
RECALL [<範圍>] [FOR <條件>] [WHILE<條件>]
12、SORT和INDEX
作用:分別是建立一個其記錄以新的物理順序排列的新表檔和對當前表根據關鍵字運算式的值
從小到大排列,並存入TO後指定的索引檔案名的檔或複合索引檔的一個標識中。
格式:SORT TO <檔案名> ON <欄位名1> [/A] [/C] [/D][,<欄位名2> [/A] [/C] [/D]]...
[ASCENDING|DESCENDING] [<範圍>] [FOR <條件>] [WHILE<條件>] [FIELDS<欄位表>]
INDEX ON <關鍵字運算式> TO <檔案名>
INDEX ON <關鍵字運算式> TAG <標識名> [OF <檔案名>] [FOR <條件>]
說明:第1個命令中,/A按欄位名昇冪排序,/D按欄位名降冪排序,/C忽略大小寫,針對字元型
關鍵字而言,ASCENDING和DESCENDING分別表示昇冪和降冪。第1個命令建立.dbf表文件,第2個命令
建立.idx單一索引檔,第3個命令建立.cdx複合索引檔(Compound Index)。
13、USE <表檔案名> INDEX <索引檔案名表>、SET INDEX TO和SET ORDER TO
作用:分別是打開表檔的同時打開索引檔、打開索引檔和改變主索引。
格式:USE <表檔案名> INDEX <索引檔案名表>
SET INDEX TO [<索引檔案名表>]
SET ORDER TO [<索引檔案名>](特例:重新索引命令:REINDEX)
14、FIND、SEEK和LOCATE及CONTINUE
作用:前兩個命令FIND和SEEK是在一個已經建立了索引檔的表中,定位到關鍵字中的內容與命
令行中字串相同的第一個記錄。後一個命令在用USE打開表檔以後,直接查詢表中欄位內容。
格式:FIND <“字串”>|<字串>
SEEK <運算式>
LOCATE [<範圍>] [FOR <條件>] [WHILE<條件>]
CONTINUE
說明:FIND命令與SEEK命令的區別是前者後跟字串,而後者後跟運算式。在用LOCATE命令找到
一個匹配記錄後,可用CONTINUE命令搜索表的剩餘部分來尋找其他匹配的記錄。
15、COUNT
作用:統計當前表檔中符合條件的記錄數。
格式:COUNT [<範圍>] [FOR <條件>] [WHILE<條件>] [TO <記憶體變數名>]
說明:記憶體變數名可用除參數外的任意字元。
16、SUM
作用:對當前表中選中記錄的全部或指定的數值欄位或由指定欄位組成的數值運算式累加求和。
格式:SUM [<範圍>] [數值<運算式>] [TO <記憶體變數名表>] [FOR <條件>] [WHILE<條件>]
17、AVERAGE
作用:對當前表中選中記錄的全部或部分數值型欄位及其組成的運算式求平均值並顯示。
格式:AVERAGE [<範圍>] [數值<運算式>] [TO <記憶體變數名表>] [FOR <條件>] [WHILE<條件>]

VFP主要程式語句
1、 條件判斷語句
格式:(1)IF <條件>
<命令語句組>
ENDIF
說明:如果條件為真,則執行命令語句組中的各語句,否則跳過這些命令語句不執行,
而執行ENDIF後的語句。
(2)IF <條件>
<命令語句組1>
ELSE
<命令語句組2>
ENDIF
說明:如果條件為真,執行命令語句組1,否則執行命令語句組2。
(3)IF <條件1>
IF <條件2>
<命令語句組1>
ELSE
<命令語句組2>
ENDIF
...
ELSE
<命令語句組N>
ENDIF
說明:進行多重條件的嵌套選擇。
(4)DO CASE
CASE <條件1>
<命令語句組1>
CASE <條件2>
<命令語句組2>
CASE <條件3>
<命令語句組3>
...
...
CASE <條件N>
<命令語句組N>
[OTHERWISE]
[<命令語句組N+1>]
ENDCASE
說明:依次判斷條件,轉入條件為真的命令語句組中執行。當所有條件都不成立時,若有
OTHERWISE項,則執行命令語句組N+1,否則執行ENDCASE後面的語句。
2、迴圈語句
格式:(1)DO WHILE <條件>
<命令語句組>
[LOOP]
<命令語句組>
[EXIT]
<命令語句組>
ENDDO
說明:判斷條件是否為真,如為真就重複執行循環體中的命令語句組,直到條件為假,結束循
環。
(2)SCAN
<命令語句組>
ENDSCAN
說明:在一個表中建立一個執行命令語句組的迴圈,並執行對每一條記錄的操作,直到表檔記錄完為止。

3 Comments:

Blogger Unknown said...

請問一下,太久沒用,忘光光
有一個資料庫欄位是 D1
DD="D"+"1"
如何讓DD顯示出 D1 欄位的內容

謝謝

8:13 下午

 
Blogger Kumaitsme said...

List D1

8:54 上午

 
Blogger ulanequesenberry said...

The casino and sports book in the state of Michigan
A casino 보령 출장샵 and sports book was established in 2009 in Detroit and is the only real estate betting 광주 출장안마 company 김천 출장마사지 in the 대구광역 출장안마 state. Now 문경 출장샵 it is just under

4:54 上午

 

張貼留言

<< Home