文件的概念及其使用方法是VB程序设计知识点梳理汇总.docx
第7章文件通过前几章的学习,使我们了解,利用VB可以编写一些用于科学计算、图形处理等方面的程序。不仅如此,VB还广泛地应用于编制如人事、财务、生产、教学等各方面的管理程序,在这类应用中,通常需要处理大量不同类型的数据信息,而这些数据信息常常需要独立存储在某种介质上(如磁盘等),以便需要时通过程序来加工处理,这种独立存储的数据集合就称为文件。因此,掌握文件的概念及其使用方法是VB程序设计的重要内容之一。7.1 与文件操作有关的控件在WindoWS应用程序中打开文件或保存文件时,通常需要打开一个对话框,用于选择文件所在的驱动器(盘)、文件夹(目录)、文件名。在VB中,使用盘驱动器列表框(DriVeLiStBox)、目录路径列表框(DirLiStBoX)以及文件列表框(FileListBox)这3种控件的组合,可以创建类似Windows资源管理器的文件操作对话框,用于选择文件。7.1.1 盘驱动器列表框控件盘驱动器列表框控件用于显示驱动器列表,工具箱中该控件图标为。该控件缺省的名称为:DrivekDriVe2、1 .盘驱动器列双框控件常用属性(1) DriVe属性(字符串类型)用来设置当前驱动器或返回所选择的驱动器名。DriVe属性只能在程序运行时赋值,而不能通过属性窗口设置.0为驱动器列表框的Drive属性赋值的语句格式为:盘驱动器列表框名DriVek驱动器名格式中的“驱动器名”为指定的驱动器,也就是说使该驱动器成为当前驱动器;如果省略,则不改变当前驱动器。如果所指定的驱动器在系统中不存在,则产生错误。程序运行时若选择驱动器,则Drive属性值改写为所选择的驱动器名。如运行时单击驱动器列表框控件drivel中D:盘图标,则drive!.drive的值为"d:"。值得注意的是:盘驱动器列表框中显示的驱动器名都是由系统自动生成的,用户只能通过列表框选择使用,不可以对DriVe控件使用AddItemRernOVeItem等方法添加或删除列表项。LiSt属性(字符串数组)1.iSl数组的每一个元素中的字符串,为1个驱动器名,数组下标从O开始。(3)LiStCoUnt属性(正整数)1.islCount属性值表示系统中盘驱动器的个数。若系统有驱动器a:、c:、d:、e:、f:(光驱),则驱动器列表框控件drivel的LiStCOUnt属性值为5,执行下列语句后在窗体上输出的结果为“a:c:d:e:f:"。Fori%=0ToDriveLListCount-1PrintDrivel.List(i%);Nexti%2.盘驱动器列表框控件常用事件运行时,当单击驱动器列表框中某一驱动器图标时,该驱动器的名就赋值给控件的Drive属性,同时引发Change事件。例7-1在窗体上设计一个盘驱动器列表框Drivel、一个标签Labello当程序启动时,设置当前驱动器为C盘;选择盘驱动器列表框中的盘符,在标签上显示相应的当前驱动器信息。在窗体的Load事件中设置Drive属性的初值、编制事件过程Drivel_Change如下:PrivateSubForm_Load()Drivel.Drive=,c:,1.abell.Caption="当前驱动器为:"+Drivel.DriveEndSubPrivateSubDrivel_Change()1.abell.Caption="当前驱动器为:n+Drivel.DriveEndSub图7“b例7之运行情况1 Forall.Labell界面设计和程序运行的情况分别如图7-la和图7-lb所示。l三7-la例7-1之界面设计7.1.2 目录路径列表框控件目录路径列表框控件在工具箱中的图标为。目录路径列表框控件用于显示当前驱动器中文件夹(目录)列表。如图7-2所示。其中,突出显示的为当前目录。目录路径列表框控件缺省的控件名称为:DirKDir2、I.目录路径列表框控件常用属性Path属性(字符串类型)Path属性值为当前目录或所选择的目录名。如果选中盘X的根目录,则Path属性为"x:";如果选中盘X的某一个子目录y(文件夹),则Path属性为"x:y"。请注意,Path属性值的最后一个字符是否为取决于是否选中根目录。同DriVe属性一样,Path属性只能用程序代码设置,而不能在设计时通过属性窗口设置。为目录列表框的Path属性赋值的语句格式为:目录路径列表框名Path=目录路径名图7-2文件夹(目录)列表运行时单击目录列表框中某一文件夹(目录)图标时,该目录被突出显示,表示被选中。选中目录则改变目录列表框的ListIndex属性,但是没有改变其Path属性,若要改变Path属性值为所选中的目录路径,应当执行语句:目录路径列表框名Path=目录路径列表框名.List(目录路径列表框名.Listindex)LiSt属性(字符串数组)1.ist(0)List(I)、LiSt(LiStCOUnt-I)中的字符串为目录路径列表框中所选目录下所有的目录名,该数组由系统自动生成。1.iStCOUnt属性(正整数)1.iStCoUnt属性值为LiSt数组中的元素个数,即所选目录之下1级目录的数量。如在图7-2中,若VB98目录下的子目录已全部显示,则DirLListCount属性值为5。若执行语句:Fori%=0ToDirLListCount-1PrintDir1.List(i%)Nexti%窗体上输出结果为:c:ProgramFileXMicrosoftVisualStudioVB98Setupc:ProgramFileXMicrosoftVisualStudioVB98Templatec:ProgramFileXMicrosoftVisualStudioVB98Tsq1c:ProgramFileXMicrosoftVisualStudioVB98Wizards(3) c:ProgramFileXMicrosoftVisualStUdiOVB98新文件夹(4) 1.iStIndeX属性(整数)该属性取值范围为-n-ListCount-l,当前目录所对应的LiStIndeX属性值为-1,当前目录的上1级目录所对应的ListIndex属性值为-2,其中的n反映了当前目录在目录层次中的深度。Path属性值也可以通过在事件过程的程序代码中重新定义Dir控件的ListIndex属性来选择设置:DirLListIndex=IDirLListIndex=ODirLListIndex=-ZDirl.ListIndex=-3选当前目录下1级目录中的第3个目录为当前目录(文件夹)选当前目录下1级目录中的第1个目录为当前目录。选当前目录上1级目录为当前目录。选当前目录上2级目录为当前目录。若要改变的当前目录不存在,则显示出错信息。如在图7-2中,假定当前所选文件夹是VB98:执行语句''Dirl.ListIndex=2''后文件夹TSql被突出显示;执行语句"DirLListIndex=O”后文件夹SetUP被突出显示;执行语句“Dirl.ListIndex=-3”后文件夹ProgramFiles被突出显示,等等。(5) 录路径列表框控件常用事件Change事件每次重新设置或选择改变目录路径列表框的Path属性时,都将引发Change事件。运行时双击目录路径列表框的列表选项,可改变Path属性值为当前目录名,并执行Change事件。Click事件单击选中目录路径列表框控件Dirl的某个目录名,则选中该目录,但DirLPath属性没有改变,可以在事件过程DirLCliCk中写入语句wDirLPath=Dirl.List(Dirl.Listindex)w,则可以在选择目录的同时改变DirkPath属性为所选目录的路径。在窗体的Load事件中可以设置Path属性的初值。例7-2目录路径列表框示例.界面设计:在窗体上建立目录路径列表框控件Dirl、三个标签控件(LabeI1、Label2>Label3)以及一个列表框控件ListL程序启动时,程序运行后, 别显示当前目录、 的目录路径信息。设置初始当前目录为"C:WINDOWS”;通过鼠标双击Dirl中的列表选项,改变当前目录,同时在三个标签控件上分当前LiSUndeX和LiStCoUnt的值,在LiSu中显示当前目录的所有下一级目录程序的运行情况如图7-3所示。图7-3双击“MyDocuments,文件夹后的显示过程设计编写Form_Load和Dirl_Change事件过程如下:PrivateSubForm_Load(),设置Dirl控件的初始路径Dirl.Path=,C:WINDOWSEndSub'双击控件Dirl时执行下列事件过程DirLChangePrivateSubDirl_Change()1.abell.Caption="当前目录:"+Dirl.Path1.abel2.Caption=nListIndex='*+Str(Dirl.ListIndex)1.abel3.Caption=nListCount='*+Str(Dirl.ListCount)Listl,ClearFori%=OToDirl.ListCount-11.istl.AddItemDirl.List(i%)Nexti%EndSub在双击Dirl前,目录列表框中突出显示的是C:WINDOWS目录;双击"MyDocuments”文件夹后,所选目录和DirLPath均改变为"c:MyDocuments”。将下列CliCk事件过程与上述过程DirLChange相比较,可知要实现同样的功能,其中的语句Dirl.Path=Dirl.List(Dirl.Listindex)w是必不可少的。,单击控件Dirl时执行该事件过程PrivateSubDirl_Click()Dirl.Path=Dirl.List(Dirl.ListIndex)1.abell.Caption="当前目录:,+Dirl.Path1.abel2.Caption=,ListIndex=+Str(Dirl.ListIndex)1.abel3.Caption=nListCount='*+Str(Dirl.ListCount)1.istl.ClearFori%=OToDirl.ListCount-11.istl.AddItemDirl.List(1%)Nexti%EndSub在实际应用中,目录路径列表框Dirl与盘驱动器列表框Drivel有着紧密的关系。一般情况下,改变盘驱动器列表框中的驱动器名后,目录路径列表框中的目录也要随之改变为该驱动器上的目录。要实现这样的同步变化,可以在盘驱动器列表框的Change事件中设置如下命令:DirLPath=DriveLDrive将用户在盘驱动器列表框中选择的DriVe属性,改写目录列表框中的Path属性,使目录列表框中显示所选驱动器下的目录。7.1.3 文件列表框控件文件列表框控件用于显示当前目录中的文件列表,该控件图标为文件列表框控件缺省的控件名称为:Filel、FiIe2、1 .文件列表框控件常用JB性Path属性(字符串类型)同目录路径列表框的Path属性一样,用以设置当前文件列表框内所显示文件的存储路径。仅在运行时读写,不能在属性窗口中设置。文件列表框总是显示Path所指示的文件夹中的文件。若在FOrm_Load事件中写入语句"Filel.Path="CWindows"”,则窗体装入后FiIel显示文件夹C:Windows中的文件列表。Filename属性(字符串类型)用以设置或返回所选文件的文件名,不能在属性窗口中设置,运行时若在文件列表框中选择文件将改写Filename属性值。所选文件的全名仆为:IfRight(FiIekPath11)=',"Thenf$=Form1.FiIe1.Path+FormtFiIetFiIeNameEIsef$=Form1.File1.Path+""+Form1.File1.FiIeNameEndIf在第6章中介绍的通用对话框控件也有同名的FileName属性,请读者注意两者的区别。同样,在实际应用中,文件列表框也要随着目录路径列表框的改变而变化。在程序中创建三个控件Drivel.Dirl、FileL并编制下列事件过程,则程序运行时对这些列表框所作选择可以起到调用通用(文件)对话框的作用。PrivateSubDrivel_Change()Dirl.Path=Drivel.DriveEndSubPrivateSubDirl_Change()Filel.Path=Dirl.PathEndSub(3)Pattem属性(字符串类型)用以设置文件列表框中文件的显示模式,缺省值为。此属性可以在属性窗口中设置,也可以在程序中通过赋值设置。字符串中为若干个用分号间隔的文件名,在文件名中可以含有通配符。例如:在FormOad事件中写入语句File1.Pattern="*.exe"»使FiIel列表框中只显示所有扩展名为EXE的文件;写入语句Filel.Pattern="*.datja*.*",使Filel列表框中只显示所有扩展名为DAT以及文件名首字符为a的文件,等等。2.文件列表框控件常用事件与盘驱动器列表框和目录路径列表框不同的是:文件列表框能支持PathChange和PattemChange事件,但不能响应Change事件。(1)PathChange事件当改变了文件列表框的文件显示路径时,引发PathChange事件。PatternChange事件当改变了文件列表框的文件显示模式,即Pattern属性值的改变将引发PattemChange事件。例7-3在窗体上建立一个盘驱动器列表框DriVel、目录路径列表框Dirl、文件列表框Fileh影像框Image1,运行时选择Filel中所列的图片文件,则相应图片显示在影像框Imagel中。界面设计,如图7-4所示。图74例7.3之界面设计,设置Drivel的初始盘符,设置Filel的文件显示模式,使Dirl与Drivel同步改变,Filel与Dirl同步改变,单击文件列表选项,加载图片过程设计PrivateSubForm_Load()Drivel.Drive=,c:Filel.Pattern=,*.bmp;*.pif,EndSubPrivateSubDrivel_Change()Dirl.Path=Drivel.DriveEndSubPrivateSubDirl_Change()Filel.Path=Dirl.PathEndSubPrivateSubFilel_Click()IfRight(Filel.Path,1)="Thenf$=Forml.Filel.Path+Forml.Filel.FileNameElsef$=Forml.Filel.Path+,'h+Forml.Filel.FileNameEndIfImagel.Picture=LoadPicture(f$)EndSub程序运行的情况如图7-5所示。图7-5例7-3之运行情况7.2与文件操作有关的语句7.2.1直接调用外部可执行文件的SheIl方法调用Shell函数可以执行外部的可执行文件,其扩展名如.exe、.com、.bat或.pif,缺省扩展名为.exe0不能执行操作系统的内部命令及所有非执行文件(如文档),否则将显示出错信息。调用shell函数的格式:Ca11SheII(<FiIename>.Windows_styIe)或变量名>=SheII(FiIename,Windows_styIe)其中:FiIename为字符串,是所调用可执行文件的全名。WindOWs_style参数用于规定当前窗口与被调用文件窗口的不同状态。其值为0、1、2、3、4、6的表达式。函数返回值在WindoWs9x中无意义,但必须书写,因此格式中的“变量名”是无用但又是必须的。例7-4将例7-3工程生成为exe文件,保存在D:盘根目录下,并取名为T叩ian,则可用以下方式调用该工程。PrivateSubCommandl_Click()X=Shell(d:tuian.exezO)EndSub例7-5在窗体上添加通用对话框控件CommondiaIog1、单击命令按钮Command1,打开文件对话框选择扩展名为EXE的文件执行。界面设计,如图76a所示:图7-6a例7-5之界面设计图7-6b例7-5之运行情况过程设计PrivateSubCommandl_Click()CoinmonDialogl.Action=1x=Shell(CoininonDialogl.Filename,O)EndSub若运行时在文件对话框中选择WindoWS中“计算器”文件“calc.exe",则该程序被调用,如图7-6b所示,关闭计算器窗口后,控制返回到VB应用程序界面。7.2.2目录和文件操作语句1 .改变当前盘格式:ChDrive盘符其中:盘符为字符串,即驱动器名。例7-6确认calc.exe的准确位置如"c:windowscalc.exe”(可以通过运行"开始”菜单的“查找”选项确认),下列过程打开该文件。PrivateSubCommandl_Click()ChDrive"c:"'改变c:盘为当前盘y=Shell("windowscalc.exe",0),省略盘符,指当前盘EndSub2 .创建文件夹格式:MKDir文件夹名例7-7(先建立1个目录路径列表框以便观察)执行下列事件过程。PrivateSubcommandl_click()MKdirncaaa,建立文件夹c:aaaMkDirc:aaabbb,建立文件夹c:aaabbbEndSub如果要创建的文件夹已经存在、或所指出的路径是错误的,则执行该过程将产生错误信息。如上面的两条命令如交换次序,则出现错误,因为在建立文件夹bbb时,所指出的路径c:aaa还不存在。3 .删除文件夹格式:RMDir文件夹名例7-8(在运行例7-7程序的基础上)执行下列事件过程。PrivateSubCommandl_Click()RMdir"c:aaabbb”,删除文件夹c:aaabbbRMDir"c:aaa”,删除文件夹c:aaa,如果与上1句交换位置将出错。EndSub如果要删除的文件夹不存在,或是该文件夹下面还有文件、文件夹存在,则该语句将产生错误信息。4 .改变当前目录格式:CHDir<PATH>例如,执行语句“CHdir"c:vb6"",即把c:vb6设置为当前目录。如果要改变的目录不存在,则该语句将产生错误信息。CUrDir (盘符) 例如:ChDrive "d:" ChDir "hts" Print CurDir此外,还有返回当前目录的CUrDir函数,其格式为:,改变d:盘为当前盘。,改变默认盘的当前目录为d:htS”O,函数CUrDir返回值为字符串"d:hts"。5 .复制文件格式:FiIeCopy源文件名,目标文件名例如,执行语句"FileCopy"d:htsvb_4.doc'r,"a:vb4.doc",可将d:hts中的文件vb_4.doc复制到a:盘,并取名为vb4.doc。文件名中,缺省盘符指当前盘;缺省路径指当前目录。文件名中,不可以缺省文件主名、不可使用通配符。6 .删除文件格式:Kill<文件名>例如,执行语句"Kill"d:htsvb_4.doc"”则删除d:hts中文件名为vb_4.doc的文件。(1)文件名中,缺省盘符指当前盘;缺省路径指当前目录。(2)文件名中可使用通配符,以删除一批文件。如执行语句“Kill"d:hts*.doc"",则删除d:hts中所有的扩展名为doc的文件。如果需要删除的文件未找到,系统显示出错信息。7 .文件改名、移动格式:Name<oId_name>as<new_name>例如,执行语句"Name"d:htsaaa.txt"as"d:bbb.dat"”后,文件d:htsaaa.txt被改名(在此亦即移动)为d:bbb.dat。缺省盘符为当前盘、缺省路径为当前目录。如果指定的目录、文件不存在,则该语句将产生错误信息。如果新文件名与原文件的路径和文件名都不同,则做移动且改名操作。8 .获取文件属性的函数格式:GetAttr(<FiIename>)函数的返回值是,个整数例如:X=GetAttr(*d:bbb.dat*)函数的返回值与对应文件属性值分别如下:常规属性:O(2)只读属性:1隐藏属性:2(4)系统属性:4(5)文件夹:16(6)上次备份后已改变:329 .设置文件属性格式:SetAttr<FiIename>,Attributes例如:SetAttr"d:bbb.datM,设置文件d:bbb.dat为只读文件SetAttr"aaa.txt",2'设置缺省目录下的文件aaa.txt为隐藏文件10 .返回文件最后1次修改的日期和时间的函数格式:FiIeDateTime(<Filename>)返回值为字符串例如,执行语句“dt$=FiIeDateTime("d:bbb.dat")"后,如dt$中的字符串为00-5-23PM4:18:26”,表明该文件最后1次修改的日期和时间是2000年5月23日下午4点18分26秒。11 .检测文件长度的函数格式:FileLen(<Filename>)返回数值表示文件的字节数例如,执行语句“PrintFilelen("d:bb.dat”)”的输出结果为文件bb.dat的字节数。7.3数据文件的操作7. 3.1文件的基本概念1 .文件、文件标识符文件是数据信息在磁盘上的1种存储结构。计算机系统中的不同文件以不同的文件标识符区分,文件标识符即文件全名,包括存储路径、主名、扩展名3部分组成。在使用顺序文件时应注意以下几点:顺序文件在打开时必须指定对文件的操作方式(Input>OutputAppend),打开后只能对文件按指定的方式进行操作。每打开一次文件,只能进行单一的一种操作。顺序文件以OUtPUt方式打开后,总是从文件的开头写,使用这种方式打开一个已经存在的文件,磁盘上的原有同名文件将被覆盖、其中的数据将会丢失;顺序文件以APPend方式打开后,总是从文件的末尾写,磁盘上的原有同名文件中的数据仍然存在;顺序文件以Input方式打开后,总是从文件的开头读文件,即使需要的是最后一行内容也必须如此。2 .文件的存储格式按文件的存储格式,可以把文件分为以下几种。ASCII(字符、正文)文件:按字符的ASCn码存储,每个字符占1个字节。二进制文件,按数据的机内码存储,每个数据所占存储空间为该类型数据的字节数。3 .文件的存取方式按文件的存取方式,可以把文件分为以下几种。顺序文件:必须在顺序访问文件中某个数据前(物理位置)的所有数据后,才可以访问该数据。随机文件:可以直接访问文件中的任何1个数据。ASCII文件中的数据进入内存要转换为二进制形式,计算机处理的效率不如二进制文件。由于用户可以直接识别、并可以用编辑器编辑ASCII文件中的数据,使用较为普遍;而顺序文件的操作相对随机文件较为方便,以下介绍ASCII文件的顺序操作。7.3.2顺序文件操作1 .打开、关闭文件文件必须先打开,才可以对其进行访问。结束访问后应当关闭文件,应用程序终止运行时也会自动关闭文件。(1)打开文件格式:Open<FiIename>ForModeLockLock_IeveIAs#File-numb其中:必选项Filename为字符串,为所打开文件的文件标识符。Mode选项只能取下列关键字之一:Input:打开文件、只读,文件不存在则显示出错信息。Output:打开文件、只写,文件不存在则新建文件、否则刷新文件。Append:打开文件、在文件末尾追加数据,文件不存在则新建文件。Lock_level选项只能取下列关键字之一:Read:别的任务或进程不可读该文件。Write:别的任务或进程不可写该文件。ReadWrite:别的任务或进程不可读、写该文件。若缺省该选项,用InPUt打开的文件默认该项为Write、用Output、Append打开的文件默认该项为ReadWrite0FiIJnUmb为打开文件后使用的通道号,为正整数值,-一般应从小到大使用。函数Freefile返回值为系统中当前最小、没有为其他文件所用的通道号,常常与OPen语句一起使用:n%=Freefile:Open"d:usera.txt"ForOutputAsn%(2)关闭文件结束访问文件后,应关闭该文件以保证其正确和完整,关闭文件使用CIOSe语句。格式:Close#FiIe_numb该语句关闭由通道号File.numb所指定的文件,若缺省悌Filejumb,则关闭所有用OPen语句打开的文件。2 .写顺序文件可以用PrinI#语句或Write#语句将数据写入到顺序文件。(1) Write#语句格式:Write#FilejIUmb,表达式列表其中:表达式列表用逗号或分号间隔效果一样,都是在写入的数据间加入逗号作分隔符。表达式列表末尾无分隔符,则输出回车、换行符到文件。字符串表达式写入文件时字符串两端自动加双引号,其他非数值类型数据写入文件时两端加“#”号。例7-9用Write#语句写文件。PrivateSubForm_Click()Open"d:aaaa.dat"ForOutputAs#1,打开文件,做好写准备Write#1,1,2,3;4;5,写文件Write#1,5;6;7;8;9Write#1,,在文件中写入一空行Write#1,abc,def,;True,不换行Write#1,FalseClose#1'关闭文件EndSub读者可以利用Windows附件中的写字板程序打开文件d:aaaa.dat,观察文件的实际内容,如图7-7所示。图7-7用写字板程序打开文件d:aaaa.datPrint#语句格式:Print#File_numb,表达式列表用Print#语句写到文件的内容、格式,与Prinl语句输出到窗体上的内容与格式相类似。例7-10用Print#语句写文件。PrivateSubForm_Click()Print PrintPrintPrint PrintCloseEnd Sub#1,#1,#1,#1,#1,#1Open"d:aaab.dat”ForOutputAs#11,2,3;4;55;6;7;8;9同样,利用写字板程序打开d:aaab.dat,观察文件的实际内容,如图7-8所示。图7-8用写字板程序打开文件d:aaab.dat,abc,udef;True,False3 .读顺序文件可以用InPiil#语句或LineInPUI#语句从顺序文件读数据。InPUI#语句格式:InPUt#File_numb,变量名列表读顺序文件时,由数据间的分隔符区分哪段字符与哪个变量对应,具体规则如下:非数字、小数点、正负号、E字符作为数值数据之间的分隔符;日期、逻辑类型数据的两端以号作为分隔符,与其他类型数据之间应有非空字符间隔。逗号、换行符可以作为字符数据的分隔符,双引号作为字符数据分隔符必须成对出现。LineInput#语句格式:LineInput#filejumb,字符串变量名将文件的当前读写位置起至换行符前的所有字符读入到字符串变量。例如:用InPUt方式打开例7-9所建立的文件d:aaaa.dat,执行以下命令:Open"d:aaaa.dat”ForInputAs#11.ineInput#1,s$Prints$窗体上的输出结果如下:12345下面,讨论外部文件的数据格式与输入语句如何匹配的问题: 如果文件中的数据是在某种编辑器中直接输入的,则数据间必须有适当的分隔符,否则程序将难以处理!例如下列形式的数据很难读到相应的变量中去。张三03/12/678976李四()5/11/695769如果改成如下形式,则可以设计输入语句“Input#l,a$,d,i%j%”读取。其中,与变量2$对应的字符串,可以加引号或以逗号作为间隔符。“张三”#()3/12/67#,89,76李四,#05/11/69#,5769"王五",#03/12/67#,89,76建议: 如果文件中的数据是直接在编辑器中输入的,需要为字符串加引号,日期、逻辑类型数据加“#”号,所有不同数据之间加逗号。 如果文件中的数据是VB应用程序的输出结果,以采用WRrrE#语句输出而以InPUI#语句输入为宜。4.与文件读写有关的函数测试文件的当前读写位置是否到达文件末尾的函数:E0F(#File_numb)函数返回逻辑值TRUE表示已到达文件末尾。文件刚打开时,读写位置位于文件开始处。在程序中,利用InPUt#或LineInPUt#语句读取数据时,常用EOF函数来测试是否到了文件尾。测试已打开文件的字节总数:LOF(#FilejUmb)函数返回长整数表示该文件的所占存储单元的字节总数。例771找出I(X)O之内的素数写入文件d:aaasu.dat。然后输入若干个数,通过在该文件中查找这些数是否存在的方法,判断它们是否为素数。界面设计在窗体上设计两个命令按钮COmmand1、Command2,和一个文本框Textl。过程设计,开始时使Commandl有效而Command2不能响应。单击Commandl后创建存放素数的数据文件d:aaasu.dat,然后使Command2有效而Command1不能响应;单击Command2,用输入对话框输入1个小于IO(X)的正整数,判断是否素数,并在文本框中输出有关的信息。编写Command1、Command2的Click事件过程代码如下:PrivateSubCommandl_Click(),该事件过程在文件d:aaasu.dat中1行写入5个素数。Open"d:aaasu.dat"ForOutputAs#1k%=2Write#1,2,3,,写入2个素数2和3之间自动加逗号间隔。Fori%=5To997Step2Forj%=3ToSqr(i%)Step2Ifi%Modj%=OThenExitForNextj%Ifj%>Sqr(i%)Thenk%=k%+1Ifk%=5Thenk%=OWrite#1,i%U行写入5个素数后换行ElseWrite#1,i%zEndIfEndIfNexti%Close#1Commandl.Enabled=FalseComnand2.Enabled=TrueEndSubPrivateSubCommand2_Click()Textl.Text=",k%=工nputBox(”请输入1个小于100O的正整数“,“判断是否素数”)Open"d:aaasu.dat"ForInputAs#1DoWhileNotEOF(1)Input#1,n%Ifn%=k%ThenTextl.Text=Str(k%)+”是素数!”Ifn%>=k%ThenExitDoLoopIfEOF(1)Orn%>k%ThenTextl.Text=Str(k%)+”不是素数!”Close#1EndSubPrivateSubCommand3_Click()EndEndSubPrivateSubForm_Load()Command2.Enabled=FalseEndSub7. 4实例例7/2选择一个文件,分别统计文件中数字字符、英文字符以及其他字符的个数,然后输出统计结果。界面设计,如图7-9a所示。在窗体上添加4个标签控件:LabelkLabel2,LabeI3分别显示提示信息“数字字符数”、“字母字符数”、“其他字符数",LabeI4用于在程序启动时提示用户单击窗体选择文件;添加3个文本框控件Textl、TeXt2、Text3用来输出统计结果:添加通用对话框控件CommonDiaIog1,设置为“打开文件”对话框,用于选择文件。图7-9a例7/2之界面设计过程设计。程序启动后,先隐藏LabeH、Labd2、LabeI3和Textl、TeXt2、Text3;单击窗体打开“打开文件”对话框,选择文件(如d:abc.txt),在程序中用I叩Ut方式打开在“打开文件”对话框中所选择的文件,利用LinelnPUt语句将文件中的信息整行整行地读到变量中,然后统计各类字符的数量,并将统计结果输出。编写Fonn_LOad()、Form_Click()事件过程如下:PrivateSubForm_Click()DimSAsString,LengthAsIntegerDimnlAsInteger,n2AsInteger,n3AsIntegerCoininonDialogl.Action=1Forml.Caption="文件"&CommonDialogl.FileName&”字数统计”,用input方式打开在“打开文件”对话框中所选择的文件OpenCominonDialogl.FileNameForInputAs#1nl=O:n2=O:n3=ODoWhileNotEOF(1)1.ineInput#1,S1.ength=Len(三)Fori%=1ToLengthIfMid(Szi%z1)<=9AndMid(Szi%z1)>=,0Thennl=nl+1,统计数字字符的个数,函数UCaSe返回其字符串参数转换后的字符串,转换的规则是,小写字母全部,转换为对应的大写字母。ElseIfUCase(Mid(Szi%z1)<=',ZAnd_UCase(Mid(S,i%z1)>=ATh