第八章数据文件_第1页
第八章数据文件_第2页
第八章数据文件_第3页
第八章数据文件_第4页
第八章数据文件_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1第8章数据文件8.1文件概述

8.2顺序文件8.3随机文件8.4二进文件8.1文件概述

文件是指记录在外部存储器上的信息的集合1.文件分类(1)按文件内容分类程序文件:存放的是供计算机执行的程序,包括源程序和可执行程序(窗体文件frm、可执行文件.exe)数据文件:存放运行程序所需的数据,或用来存储程序的运行结果(文本文件.txt、Word文档.doc)(2).按存储信息形式(编码方式)分类根据文件中存储信息所使用的编码方式,可以将文件分为ASCII文件和二进制文件。ASCII文件:存放各种数据的ASCII代码,可用记事本打开二进制文件:二进制方式保存信息,文件不具有可读性3.根据访问文件的模式分类:顺序文件:在VB中也就是文本文件。数据(通常以记录的形式存放,记录可长可短)的写入是一个接一个依次进行的。数据在文件中的存放次序,以及读出次序与写入数据时的顺序一致,也是从头到尾按序进行的。缺点:必须按顺序访问,不能同时读、写随机文件:是可以按任意次序读写的文件数据.通常也以记录的形式存放,但与顺序文件不同的是,其每条记录的长度相等,且拥有一个唯一的记录号每个记录都有其唯一的一个记录号,所以在读取数据时,只要知道记录号,便可以直接读取记录。二进制文件:是字节的集合、它直接把二进制码存放在文件中。除了没有数据类型或者记录长度的含义以外,它与随机访问很相似。二进制访问模式是以字节数来定位数据,在程序中可以按任何方式组织和访问数据,对文件中各字节数据直接进行存取。

8.1.2文件读写

数据文件的操作,一般按以下3个步骤进行:

1)打开(或建立)文件:首先打开文件。内存提供文件缓冲区。如果文件不存在,在执行某些打开命令时,将建立一个新文件

2)读/写文件:执行文件的“读”操作:将数据从文件读入到变量(内存)供程序使用执行文件的“写”操作:输出;就是把数据从变量(内存)中写入文件,传输到外部存储设备并存储的过程

3)关闭文件:对于一个不再使用的文件,应执行关闭命令,以便释放相关的文件缓冲区。8.2顺序文件在程序中对文件的操作,通常按3个步骤进行:

打开文件读出或写入关闭文件例:1将两个同学的学号、姓名和成绩写入文件2将原有数据类型从文件中读出,计算平均成绩并显示在窗体上。3.根据文件的行结构特性,按行从文件中读出数据并显示在窗体上。

PrivateSubCommand1_Click()Open"C:\Scores.dat"ForOutputAs#1Write#1,"051023","王海涛",66Write#1,"052498","周文英",88Close#1EndSubPrivateSubCommand2_Click()DimNo$,NameAsString,ScoreAsIntegerDimCount%,SumAsInteger,AverageAsSingleOpen"C:\Scores.dat"ForInputAs#1DoWhileNotEOF(1)

Input#1,No,Name,ScoreCount=Count+1

Sum=Sum+ScoreLoopAverage=Sum/Count

PrintAverage

Close#1EndSubPrivateSubCommand3_Click()Open"C:\Scores.dat"ForInputAs#1DoWhileNotEOF(1)LineInput#1,LineData

PrintLineData

LoopClose#1EndSub1.打开文件:语句用来打开或建立一个文件,分配一个缓冲区供文件进行输入/输出格式:Open文件名For模式As#文件号模式:Output:对文件进行写操作

Input:对文件进行读操作

Append:在文件末尾追加记录文件号1~511(可以利用FreeFile函数获得可利用的文件号,避免和其他文件号相同)文件名:可以为字符串常量,也可以是字符变量例:Open“C:\VB\Scores.txt”ForOutputAs#1

若要获得文件号,将FreeFile函数的值赋给变量FileNoFileNo=FreeFile()Open“C:\VB\Scores.dat”ForOutputAsFileNo8.2.2常用的语句和函数2.写操作将数据写入顺序文件的命令Print和Write(1)WriteWrite#文件号,输出列表

Write在数据项之间插入“,”并给字符串加上双引号。例如:Write#1,"One","Two",123写入到文件后格式:"One","Two",123

(2)PrintPrint#文件号,输出列表Print#语句功能与Write基本相同,区别在于输出后字符串不加双引号,数据之间没有“,”例如,Print#1,"One","Two",123写入到文件后格式:OneTwo123在实际应用中将文本框里的内容以文件的形式保存在磁盘上:PrivateSubCommand1_Click()Open"C:\DocumentsandSettings\Administrator\桌面\test.txt"ForOutputAs#1Print#1,Text1.TextWrite#1,Text1.TextClose#1EndSubPrivateSubCommand1_Click()Open"C:\DocumentsandSettings\Administrator\桌面\Data.txt"ForOutputAs#1Print#1,"学生成绩"Print#1,Print#1,"051023";"王海涛";66Print#1,"052498";"周文英";88Write#1,"051023","王海涛",66Write#1,"052498","周文英",88Close#1EndSub例8.2利用Print和Write语句把数据写入文件3.关闭文件

输出语句是将数据送到缓冲区,关闭文件时才将缓冲区中数据写入文件。关闭文件形式:

Close#文件号例:Close#1关闭1号文件

Close#1,#2,#3关闭1、2、3号文件若省略了文件号,Close语句将关闭所有已经打开的文件4.读操作

(1)EOF(文件号):测试文件是否到文件末尾若到了文件末尾,EOF函数返回True(-1)否则返回False(0)(2)LOF(文件号):测试文件的长度LOF函数将返回某文件的字节数例如,LOF(1)返回#1文件的长度,如果返回0值,则表示该文件是一个空文件(3)Input

#文件号,变量列表从打开的顺序文件中读出数据并将数据赋给变量通常,用Write#语句写入文件的数据,可使用Input#语句读出数据。Write#语句把各语句项区分开PrivateSubCommand1_Click()Open"E:\Scores.txt"ForOutputAs#1Write#1,"051023","王海涛",66Close#1EndSubPrivateSubCommand2_Click()DimNoAsString,NameAsString,Score%Open"E:\Scores.txt"ForInputAs#1Input#1,No,Name,ScoreClose#1PrintNo,Name,ScoreEndSub(2)LineInput:读出一行数据并赋给字符串变量格式:LineInput#文件号,字符串变量说明:读出的数据中不包含回车换行符PrivateSubCommand1_Click()Text1.Text=""Open"E:\p16data.txt"ForInputAs#1DoWhileNotEOF(1)LineInput#1,InputDataText1.Text=Text1.Text+InputData+vbCrLfLoopClose#1EndSub在窗体上画一个文本框Text1,然后编辑程序PrivateSubForm_Load()Open"d:\temp\dat.txt"ForOutputAs#1Text1.Text=""EndSubPrivateSubText1_KeyPress(KeyAsciiAsInteger)IfKeyAscii=13ThenIfUCase(Text1.Text)=

ThenClose#1EndElseWrite#1,

Text1.Text=""EndIfEndIfEndSub以上程序的功能是:在d盘temp文件夹下建立一个名为dat.txt的文件,在文本框中输入字符,每次按回车键都把当前文本框中的内容写入文件dat.txt,并清除文本框中的内容;如果输入“END”,则不写入文件,直接结束程序。请填空“END”Text1.Text例:有语句:Open“d:\Text.txt”ForOutputAs#1,以下叙述中错误的是

A)若d盘根目录下无Text.txt文件,则该语句创建此文件

B)用该语句建立的文件的文件号为1

C)该语句打开d盘根目录下一个已存在的文件Text.txt,之后就可以从文件中读取信息

D)执行该语句后,就可以通过Print#语句向文件Text.txt中写入信息例8.3设计一个文件加密程序。左边文本框显示打开文件内容,右边文本框显示经加密的内容,窗体底部的进度条显示文件读/写操作的进度PrivateSubCommand1_Click()DimInputDataAsString*1Open"E:\8-3data.txt"ForInputAs#1Text1.Text=""

WithProgressBar1.Min=0.Max=LOF(1).Visible=True.Value=0EndWithDoWhileNotEOF(1)

InputData=Input(1,#1)

Text1.Text=Text1.Text+InputData

ProgressBar1.Value=ProgressBar1.Value+1Loop

Close#1EndSubPrivateSubCommand2_Click()DimcAsString*1,iAsc%Text2.Text=""Fori=1ToLen(Text1.Text)c=Mid(Text1.Text,i,1)SelectCasecCase"A"To"Z"iAsc=Asc(c)+3IfiAsc>Asc("Z")TheniAsc=iAsc-26Text2.Text=Text2.Text+Chr(iAsc)Case"a"To"z"iAsc=Asc(c)+3IfiAsc>Asc("z")TheniAsc=iAsc-26Text2.Text=Text2.Text+Chr(iAsc)CaseElseText2.Text=Text2.Text+cEndSelectNextiEndSubPrivateSubCommand3_Click()Open"E:\8-3data.txt"ForOutputAs#1Print#1,Text2Close#1EndSub例8.4编写顺序文件读写程序。选择“添加数据”,则将一个学生的学号、姓名和成绩添加到Score.txt文件中选择“读取数据”,则从文件读取数据并计算总分和平均成绩,最后送入文本框123456李力

77PrivateSubCommand1_Click()Open"C:\Score.txt"ForAppendAs#1

Write#1,Text1.Text,Text2.Text,Val(Text3.Text)Close#1EndSubPrivateSubCommand2_Click()DimNo$,NameAsString,Score%,Sum%,countAsIntegerOpen"C:\Score.txt"ForInputAs#1Text4.Text=""DoWhileNotEOF(1)Input#1,No,Name,Score

Sum=Sum+Score

count=count+1

Text4.Text=Text4.Text+No&Space(2)+Name+Space(2)&Score&vbCrLfLoopText4.Text=Text4.Text+"总分:"&Sum&vbCrLfText4.Text=Text4.Text+"平均成绩:"&Sum/count&vbCrLfClose#1EndSub8.3随机文件

随机文件中的一行数据称为一条记录。随机文件对文件的读写顺序没有限制,可以随意读写某一条记录。记录的长度是固定的,以便由记录号来定位。例:8.5编写随机文件应用程序,将两个同学的记录(由学号、姓名、成绩组成)写入随机文件C:\Scores.dat,记录号分别为1,4,然后从C:\Scores.dat中读出第4条记录并显示在窗体上添加标准模块,定义记录类型和记录变量TypeStudTypeNoAsString*6NameAsString*8MarkAsIntegerEndType在窗体上编辑程序DimStdAsStudTypePrivateSubCommand1_Click()Open"C:\Scores.dat"ForRandomAs#1Len=Len(Std)WithStd

.No="051023".Name="王海涛".Mark=66EndWith

Put#1,1,StdWithStd

.No="052498".Name="周文英".Mark=88EndWithPut#1,4,Std

Close#1EndSubPrivateSubCommand2_Click()Open"C:\Scores.dat"ForRandomAs#1Len=Len(Std)Get#1,4,Std

PrintStd.No,Std.Name,Std.Mark

Close#1EndSub随机文件:打开与关闭由Open语句和Close语句来实现1.打开文件:Open文件名ForRandomAs#文件号Len=记录长度随机文件打开后,可以同时进行写入与读出操作在Open语句中要指明记录长度例如:Open"d:\abc.dat"ForRandomAs#1Len=202.关闭随机文件:Close#文件号随机访问模式中文件的读写

1.Put#文件号,记录号,变量名(随机文件的写操作)将一个记录变量的内容,写入所打开的磁盘文件中指定的记录位置处。如果忽略记录号,则表示在当前记录后的位置插入一条记录。2.Get#文件号,记录号,变量名

将指定的记录内容读入记录变量中。若忽略记录号,则表示读出当前记录后的那一条记录

例:以下叙述中错误的是

A)顺序文件中的数据只能按顺序读写

B)对同一个文件,可以用不同的文件号打开

C)执行Close语句,可将文件缓冲区中的数据写到文件中

D)随机文件中各记录的长度是随机的

在窗体上有Text1、Tex2两个文本框,一个Command1命令按钮。运行后窗体外观如图设如下变量PrivateTypePersonnameAsString*8majorAsString*20EndTypeDimpAsPerson设文本框中的数据已正确地赋值给Person类型的变量p,当单击“保存”按钮时,能够正确地把变量中的数据写入随机文件Text2.dat中的程序段是:A)Open"C:\Text2.dat"ForOutputAs#1Put#1,1,pClose#1B)Open"C:\Text2.dat"ForRandomAs#1Get#1,1,pClose#1C)Open"C:\Text2.dat"ForRandomAs#1Len=Len(p)Put#1,1,pClose#1D)Open"C:\Text2.dat"ForRandomAs#1Len=Len(p)Get#1,1,pClose#1例8.6编写学生信息管理程序添加标准模块,定义变量TypeStudTypeiNoAsIntegerstrNameAsString*20strSexAsString*1sMarkAsSingleEndType在窗体编辑程序DimStudentAsStudTypeDimRecord_NoAsIntegerSubForm_Load()Open"C:\STUDENT.DAT"ForRandomAs#1Len=Len(Student)Label2.Caption=LOF(1)/Len(Student)Close#1EndSubSubCommand1_Click()WithStudent.iNo=Val(Text1.Text).strName=Text2.Text.strSex=IIf(Option1.Value,"1","0").sMark=Val(Text3.Text)EndWithOpen"C:\STUDENT.DA

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论