我們在玩《仙劍奇俠傳》時,要是不能保存數據,那麼非得挑燈夜戰三晝夜才能玩完,可見數據存儲之重
要性。愛好編程的CFAN是不會放過數據文件的,下面跟著我馳騁吧!我們先吃一個哈密瓜,開門即來編一傳統的比較有代表性的程序,不可不看的喲!
程序分為一個表單cfanvb.frm,一個模塊cfanvb.bas。一個表單程序。程序的表單中有五個命令按鈕,從上到下分別命名為Cmdnew、Cmdsave,Cmdtxt、cmdlookfor、Cmdexit,標題分別為&New、&Save、&Txt、&Lookfor、&Exit;還有三個文本框,名稱分別為Textname、Textage、Textsex;還有三個標簽。
程序的功能
功能1:能存儲你所輸入的每一條完整記錄,並創造數據庫文件nas.db。
功能2:能按輸入的姓名字段查找記錄並顯示。
功能3:將所有記錄按NAME字段排序制成文本文件nas.txt,以便打印、修改。
程序運行情況
先後輸入八條記錄,name字段分別為李繼華、朱茵、小鞏、朱朱、李麗麗、黃慶、Tom、Kate,並一一存儲(按Save按鈕,存儲第一條記錄前,Txt按鈕為灰色,即不可激活態);點擊【Txt】按鈕,會出現【文本已經建好】提示框(文本的各項是按姓名順序排列的,name分別為Kate、Tom、小鞏、朱朱、朱茵、李麗麗、李繼華、黃慶);在Textname文本框中輸入上面任一姓名,點擊【Lookfor】按鈕即可得到其他的字段(年齡、性別)情況,如果不為此八人,則顯示【notfind】提示框。此程序運行後可以建立一個名為Nas.db的數據庫文件和一個名為Nas.txt的文本文件。
Cfanvb.bas模塊代碼為:
Typenas'定義記錄類型
nameAsString*6'姓名
ageAsString*3'年齡
sexAsString*4'性別
EndType
Typenasindex'定義另一記錄類型
nameAsString*6'姓名
numberAsInteger'記錄號
EndTyep
PublicamongAsnas'定義公共變量
publicindex()Asnasindex'定義枚舉索引數組
PublictotalnumAsInteger'定義總記錄數
cfanvb.frm表單的代碼為:
OptionExplicit'強制變量必須進行正規聲明
Constnasdb="
as.db"'定義常量數據庫文件名
Constnastxt="
as.txt"'定義文本文件名
Functionsearch(findtxt)AsInteger'Function過程,尋找某一姓名findtxt,得出記錄號search
DimfrontAsInteger'定義變量
DimbehindAsInteger
DimfindnumAsInteger
DimmiddleAsInteger
front=1
behind=totalnum'定義初始值
findnum=0
DoWhilefront<=behindAndfindnum=0
middle=(front behind)2'用二分法查找
Iffindtxt=Rtrim(index(middle).name)Then'找到此記錄
findnum=middle
ElseIffindtxt>index(middle).nameThen
front=middle 1'要找的記錄在middle之後
Else
behind=middle-1'要找的記錄在middle之前
EndIf
Loop
search=findnum'如找到,則找到的記錄號為search;否則,search為0
EndFunction
Subcreateindex()'為所有記錄建立索引
DimIAsInteger,changeAsnasindex,jAsInteger
ForI=ITototalnum
Get#1,I,among'讀出第I條記錄
index(I).name=among.name'此記錄的name字段賦予索引I的name字段
index(I).number=I'記錄號賦予索引I的number字段
NextI
ForI=ltototalnum-1
Forj=I 1Tototalnum
Ifindex(I).name>index(j).nameThen
change=index(I)
index(I)=index(j)
index(j)=change
EndIf
Nextj
NextI'對索引數組排序,使index(I).nameFndSub
PrivateSubCmdexit_Click()
Close#1'關閉文件1
End'結束
EndSub
PrivateSubCmdlookfor_Click()'查找
DimwhichAsInteger
DimfinditAsInteger
which=search(textname.Text)'調用search()
Ifwhich>0Then'which>0表明查找到
findit=index(which).number
Get#1,findit,among'由記錄號讀出記錄
withamong
textname=.name'將此記錄的各字段顯示於文本框
Textage=.age
Textsex=.sex
EndWith
Else
MsgBox"can'tfindit",48,"lookfor"'否則沒找到提示信息
EndIf
EndSub
PrivateSubcmdnew_Click()'所有文本框清空
textname=""
Textage=""
Textsex=""
textname.SetFocus'textname文本框得到輸入焦點
EndSub
PrivateSubCmdsave_Click()
totalnum=totalnum 1'記錄數加1
Iftotalnum>0ThenCmdtxt.Enabled=True'使Cmdtxt按鈕由灰色變成可激活
Withamong'將各文本框內容存於記錄
.name=textname.text
.age=Textage.Text
.sex=Textsex.Text
EndWith
Put#1,totalnum,among'將記錄加入#1
ReDimindex(totalnum)'重新定義枚舉數組
createindex'調用過程重新建立索引
textname=""'清空文本框,激活textname
Textage=""
Textsex=""
textname.SetFocus
EndSub
PtivateSubCmdtxt_Click()'建立文本文件
DimI
Dimmessage1AsString,message2AsString
OpennastxtForOutputAs#2'打開文本,接受輸出
ForI=1Tototalnum
Get#1,index(I).number,among'讀記錄
Withamong
Print#2,"";Ucase(Trim.(.name))
Print#2,"age:";.age'用Print語句建立文本
Print#2,"sex:";.sex
EndWith
NextI
Close#2'關閉文本文件
textname.SetFocus
message1="文本nas.txt已經建好"
message2="file"
MsgBox$message1,64,message2'顯示文本已建好對話框
EndSub
PrivateSubForm_Load()'程序運行裝人表單時的事件
OpennasdbForRandomAs#1'打開數據庫
Len=Len(among)
totalnun=LOF(1)/Len(among)'計算記錄數
Iftotalnum>0Then
ReDimindex(totalnum)'定義枚舉索引數組
createindex'建立索引
Else
Cmdtxt.Enabled=False'禁止Cmdtxt按鈕
EndIf
EndSub
我們通過以上程序,可以得出哪些啟示呢?
1.文件可分為文本文件(一般為順序存取格式,本程序為cfanvb.txt)和隨機存取文件(本程序為cfan
vb.db)。
2.隨機存取文件由一些固定長度的記錄組成,建立好索引後,能在不讀入其他記錄的情況下,直接跳到某一記錄。
3.在文本文件中使用的語句:
(1)OpenfilenameForoutput(append)As#numberoutput:創建一個新文件並准備寫入數據;
append:打開一個已存在的文件並准備寫入數據於文件的結尾。
(2)Print#number,[data1;data2;data3...]
它可將一個或多個沒有分隔的字符串輸出到指定文件#filenumber,“print#filename,”表示輸出一空行。
(3)Write#number,data1,data2,data3...
它可將一行數據寫入一個已經打開的文件,並提供“,”作間隔。
(4)OpenfilenameForInputAs#number
它為讀數據而打開一個文件。
4.隨機存取文件常用語句:
(1)OpenfilenameForRandomAs#numberLen=recordlength
以隨機方式打開一既可以讀又可以寫的文件,其中recordlength為文件記錄的字節數。
(2)Put#number,recordnumber,record(寫入)
Get#number,recordnumber,record(讀出)
其中,#number文件已經打開,"recordnumber指明要寫入(或讀出)的位置,record指那條記錄。
本文介紹了處理數據的一些傳統方法和基本知識,根據本程序的思路,你可制作出自己喜歡的小程序。其實VB6還有更簡單的處理數據的方法,留待以後介紹。希望我燒的骨頭湯能適合大家口味。->