【 tulaoshi.com - 编程语言 】
                             
                            我们在玩《仙剑奇侠传》时,要是不能保存数据,那么非得挑灯夜战三昼夜才能玩完,可见数据存储之重
  要性。爱好编程的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按钮为灰色,即不可激活态);点击按钮,会出现提示框(文本的各项是按姓名顺序排列的,name分别为Kate、Tom、小巩、朱朱、朱茵、李丽丽、李继华、黄庆);在Textname文本框中输入上面任一姓名,点击按钮即可得到其他的字段(年龄、性别)情况,如果不为此八人,则显示提示框。此程序运行后可以建立一个名为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
  ElseIffindtxtindex(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).nameindex(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()
  Ifwhich0Then'which0表明查找到
  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
  Iftotalnum0ThenCmdtxt.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)'计算记录数
  Iftotalnum0Then
  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还有更简单的处理数据的方法,留待以后介绍。希望我烧的骨头汤能适合大家口味。->