ImageVerifierCode 换一换
格式:DOCX , 页数:23 ,大小:26.65KB ,
资源ID:28619650      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/28619650.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(第14章数据文件.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

第14章数据文件.docx

1、第14章数据文件第14章数据文件 14.1文件概述 所谓“文件”,是指记录在外部介质上的数据的集合。例如用Word或Excel编辑制作的文档或表格就是一个文件,把它存放到磁盘上就是一个磁盘文件,输出到打印机上就是一个打印机文件。广义地说,任何输入输出设备都是文件。计算机以这些设备为对象进行输入输出,对这些设备统一按“文件”进行处理。在程序设计中,使用文件可以不受内存大小的限制。 1文件结构 为了有效地存取数据,数据必须以某种特定的方式存放,这种特定的方式称为文件结构。Visual Basic文件由记录组成,记录由字段组成,字段由字符组成。(1) 字符(Character)是构成文件的最基本单位

2、。字符可以是数字、字母、特殊符号或单一字节。注:Len(“Abcd英文字母”)8(但占内存为12个字节)(2)字段(Field):也称域。单独的字符是没有任何意义的。只有若干个字符维修组合在一起才有一定的意义。字段由若干个字符组成,用来表示一项数据。如:“张三”、“550004”分别表示某人的姓名,某地区的邮编。 (3)记录(Record):由一组相关的数据组成。例如在通信录中,每个人的姓名、单位、地址、电话号码、邮政编码等构成一个记录,。在Visual Basic中,以记录为单位处理数据。 (4)文件(File):文件由记录构成,一个文件含有若干条的记录。综上所述:一个文件是由若干条记录所组

3、成,每条记录由几项数据项(字段、域)组成,每个数据项由若干个字符所组成。指针:当前操作的记录的标识。 2.文件种类 根据不同的分类标准,文件可分为不同的类型。 (1)根据数据性质,文件可分为程序文件和数据文件。 程序文件(Program File):这种文件存放的是可以由计算机执行的程序 数据文件(Data File):数据文件用来存放普通的数据。 (2)根据数据的存取方式和结构,文件可分为顺序文件和随机文件。 顺序文件(Sequential File):顺序文件的结构比较简单,文件中的记录一个接一个地存放。当要查找某个数据时,只能从文件头开始,一个记录一个记录地顺序读取,直至找到要查找的记录

4、为止。 随机存取文件(Random Access File):又称直接存取文件,简称随机文件或直接文件。与顺序文件不同,在访问随机文件中的数据时,不必考虑各个记录的排列顺序或位置,可以根据需要访问文件中的任一个记录。 在随机文件中,每个记录的长度是固定的,记录中的每个字段的长度也是固定的。此外,随机文件的每个记录都有一个记录号。在写入数据时,只要指定记录号,就可以把数据直接存入指定位置。而在读取数据时,只要给出记录号,就能直接读取该记录。在随机文件中,可以同时进行读、写操作,因而能快速地查找和修改每个记录,不必为修改某个记录而对整个文件进行读、写操作。 随机文件的优点是数据的存取较为灵活、方便

5、,速度较快,容易修改。主要缺点是占空间较大,数据组织较复杂。 (3)根据数据的编码方式,文件可以分为ASCII文件和二进制文件。 ASCII文件:又称文本文件,它以ASCII方式保存文件。这种文件可以用字处理软件建立和修改(必须按纯文本文件保存)。 二进制文件(Binary File):以二进制方式保存的文件。二进制文件不能用普通的字处理软件编辑,占空间较小。14.2文件的打开与关闭 在Visual Basic中,数据文件的操作按下述步骤进行: (1)打开(或建立)文件 (2)进行读、写操作 (3)关闭文件 14.2.1文件的打开(建立)其格式为:Open文件名 For方式Access 存取类

6、型 锁定As文件号Len=记录长度 OPEN打开文件的命令文件名:所要建立或打开的文件名,文件名可以用绝对路径,文件名两边必须用“定界,是字符串形式。方式: Output:顺序输出。(具有建立顺序文件的功能)(可以用Printt 和Write两种语句进行写操作) Input:顺序输入。(读入)(可以用Input和Line Input两种语句进行读操作) Append:顺序输出方式,追加。只能在文件尾加记录。 (具有建立顺序文件的功能)(可以用Input和Line Input两种语句进行读操作) Random:指定随机存取方式, Binary:指定二进制方式文件。在这种方式下,可以用Get和Pu

7、t语句对文件中任何字节位置的信息进行读写。 “方式”是可选的,如果省略,则为随机存取方式,即Random. 存取类型:放在关键字Access之后,用来指定访问文件的类型。可以是下列类型之一: Read:打开只读文件。 Write:打开只写文件。 Read Write:打开读写文件。这种类型只对随机文件、二进制文件及用Append方式打开的文件有效。 锁定: Lock Shared:任何机器上的任何进程都可以对该文件进行读写操作。 Lock Read:不允许其他进程读该文件。 Lock Write:不允许其他进程写这个文件。 Lock Read Write:不允许其他进程读写这个文件。 如果不使

8、用Lock子句,则默认为Lock Read Write. 文件号:对于每个文件都指定一个号,1511范围,其它输入输出语句或函数通过文件号与文件发生关系。 记录长度:对于用随机访问方式打开的文件,该值是记录长度;对于顺序文件,该值是缓冲字符数。“记录长度”的值不能超过32767字节。对于二进制文件,将忽略Len子句。(2) Open语句兼有打开文件和建立文件两种功能。在对一个数据文件进行读、写、修改或增加数据之前,必须先用Open语句打开或建立该文件。如果为输入(Input)打开的文件不存在,则产生“文件未找到”错误;如果为输出(Output),追加(Append)或随机(Random)访问方

9、式打开的文件不存在,则建立相应的文件;此外,在Open语句中,任何一个参量的值如果超出给定的范围,则产生“非法功能调用”错误,而且文件不能被打开。 下面是一些打开文件的例子: Open Price.dat For Output As1可建立或打开一个数据文件,使记录可以写到该文件中。如果文件Price.dat己存在,该语句打开已存在的数据文件,新写入的数据将覆盖原来的数据。 Open Price.dat For Append As1打开已存在的数据文件,新写入的记录追加到文件的后面,原来的数据仍在文件中。如果给定的文件名不存在,则Append方式可以建立一个新文件。 Open Price.da

10、t For Input As1打开已存在的数据文件,以便从文件中读出记录。 以上例子中打开的文件都是按顺序方式输入输出。 Open Price.dat For Random As1按随机方式打开或建立一个文件,然后读出或写入定长记录。 Open Records For Random Access Read Lock Write As1需要注意的是:文件的读入与输出。?14.2.2文件的关闭 文件的读写操作结束后,应将文件关闭,这可以通过Close语句来实现。其格式为: Close文件号,文件号Close语句用来结束文件的输入输出操作。例如,假定用下面的语句打开文件: Open price.da

11、t For Output As1则可以用下面的语句关闭该文件:Close1若关闭目前打开的所有文件,则可以用如下语句: Close第三节 文件操作语句和函数14.3.1 文件指针:指针:是一个标识(隐含),指出文件要进行读、写操作的位置。一、文件指针的定位可以通过如下语句:SEEK #文件号,位置作用:1对于用input、output、append方式打开的文件,是将指针定位到“位置”处。“位置”从文件开头到“位置”为止的字节数,即执行下一个操作的地址,文件第一个字节的位置是1;2对于以Random方式打开的文件,“位置”是记录号。3在Get或Put语句中的记录号优先于由Seek语句确定的位置

12、。此外,当“位置”为0或负数时,将产生出错信息“错误的记录号”,若在文件尾之后时,对文件的写操作将扩展该文件。4与Seek语句配合使用的是Seek函数: SEEK(文件号)返回指定文件的当前指针位置。 对于用Input、Output或Append方式打开的顺序文件,Seek函数返回文件中的字节位置(产生下一个操作数的位置),而Seek语句是把文件指针移到指定的字节位置上;对于用Random方式打开的文件,Seek函数返回下一个要读或写的记录号,而Seek语句只能把文件指针移到一个记录的开头。14.3.2其他语句和函数:1. FREEfile:当前可用的文件号。如果要使用的文件很多,就需要有很多

13、文件号,使用FREEFILE就可得到当前可用的文件号,避免使用重复的号;特别当在通用过程中使用文件时,用这个函数可以避免使用其他Sub或Function过程正在使用的文件号。利用这个函数可以把未使用的新闻公报号赋给一个变量,用这个变量作文件号,不必知道具体的文件是多少。 Private Sub Form_Click() Filename$=Input(“请输入要打开的文件名:”) Filenum=FreeFile Open filename$;”opened as file #”;Filenum Close #Filenum End Sub2. Loc函数 格式: LOC(文件号)返回由“文件

14、号”所指定的文件的当前读写位置;随机文件而言,是读或写的最后一个记录的记录号,即当前读写位置的上一个记录;对于顺序文件,Loc函数返回的是从该文件被打开以来读或写的记录个数,一个记录是一个数据块。3LOF函数格式: LOF(文件号)返回给文件分配的字节数(即文件的长度)。在VB中,文件的基本单位是记录,每个记录默认的长度是128个字节。因此,对于由VB建立的数据文件,LOF函数返回的将是128的倍数,不一定是实际的字节数。对于用其它编辑软件或字处理软件建立的文件,LOF函数返回的将是实际分配的字节数,即文件的实际长度。 以下可以确定一个随机文件中记录的个数RecordLength=60Open

15、 “c:progMyrelatives” For Random As #1X=LOF(1)NumberOfRecords=xRecordLength3EOF函数格式: EOF(文件号)测试当前文件记录指针是否到末尾,值为TRUE或FALSE EOF函数常用来在循环中测试是否已到文件尾,一般格式如下: Do While Not EOF(1) 文件读写语句 Loop14.4 顺序文件文件操作三步:打开 操作 关闭14.4.1 顺序文件的写操作:1、Print语句格式:print #文件号,Spc(n)|Tab(n)表达式表;|,将表达式表的内容写入文件,其中Spc 函数、Tab函数、“表达式表”及

16、尾部的分号、逗号等,含义与Print方法同。Private Sub Form_Click()Open d:123.txt For Output As #1 For i = 1 To 3 Name1 = InputBox(inputname) age = InputBox(input age) sex = InputBox(inputsex) Print #1, Name1, age, sex Next i Close #1End Sub1) Print #1将向文件写入一个空行。2)数值型数据写入时前有符号位,后有尾随空格,但字符串型如果用分号紧凑格式,则为了使各字符串分开,可人为地加入“,”

17、,如: Print #1,A$;”,”;B$;”,”;C$ 注意:不要试图以OUTPUT方式打开一已存在的文件,如果以该方式打开,原来文件内容被新的内容所覆盖(如果你希望是这样的除外。)如果要对已存在的文件再加入新的内容,方式选“APPEND”如对上例中,将方式改变为Append、再运行。2.Write语句格式: Wrtite #文件号,表达式表除Print外,也可用WRITE写文件,其“表达式表”中的各项只能用“,”隔开。WRITE同PRINT的区别在于:1)WRITE写数据时,在磁盘上紧凑格式存放,自动以“,”为分隔符,并且每个每个数据项用“”括起2)用WRITE语句写入的正数前面没有空格

18、。例如:Write #1,One,Two,123文件内容:One,Two,123例:在磁盘上建立一个电话号码本文件,存放单位名称和电话。 Private Sub Form_Click() Open “c:tel.dat” For Output As #1 Unit$=InputBox(“Enter Unit:”) While Ucase(Unit$)”DONE” Tel$=InputBox(“Telephone number:”) Write #1,unit$,tel$ Unit$=InputBox(“Enter unit:”) Wend Close #1 End End Sub可用记事本查看

19、。当用Print语句写入时的区别。Private Sub Form_Unload(Cancel As Integer) Open out7.txt For Output As #1 Print #1, Op1.Value, Op2.Value, Text1.Text Close #1End Sub更为一般的:将所要输入的记录先定义为一种类型记录类型,其中每个分量称之为它的一个域,这种类型先给其一个名,自定义的记录型。要访问其中一个分量用:变量域名其中,变量必须为所定义的记录型定义记录类型:工程添加模块模块添加type 类型名 分量AS 类型分量AS类型 end typeType student

20、 name As String * 10 age As Integer sex As String * 4End TypeDim stu() As student, n As IntegerPrivate Sub Form_Load()n = Val(InputBox(学生人数)ReDim stu(n)For i = 1 To n stu(i).name = InputBox(请输入 & i & 姓名) stu(i).age = Val(InputBox(年龄) stu(i).sex = InputBox(性别)NextiOpen C:123.txt For output As #1For i

21、 = 1 To n Print #1, stu(i).name, stu(i).age, stu(i).sexNext iClose #1End Sub例:保存文本框 要点:如何查看结果?假定文本框的名称为txtTest,文件名为TEST.DAT。方法1:把整个文本框的内容一次性地写入文件。Open “TEST.DAT” For Output As #1Print #1, txtTest.Text Close #1 方法2:把整个文本框的内容一个字符一个字符地写入文件。Open TEST.DAT For Output As #1For i = 1 To Len(TxtTest.Text) Pr

22、int #1, Mid(TxtTest.Text, i, 1); Print Mid(TxtTest.Text, i, 1),Next iClose #1函数Len(串) 取串长函数Mid(串,起始位置,字符数) 从指定位置取子串3. 关闭文件Close #文件号, #文件号.例如,Close #1, #2, #3Close 关闭所有打开的文件14.4.2 顺序文件的读操作:1Input语句格式:input #文件号,变量表把读出的每个数据项分别存放到所对应的变量。以“,”为分界符。 例:Open C:123.txt For input As #1For i = 1 To n Input#1,

23、 stu(i).name, stu(i).age, stu(i).sexNextClose #1For i = 1 To n? stu(i).name, stu(i).age, stu(i).sexNext2LINE INPUT #文件号,字符串变量读一行到变量中,主要用来读取文本文件,以回车为分界符。字符串变量用来接收从顺序文件中读出的字符行。前提:原始文件如何提供? Open “C:123.text” for Input as #2 While not Eof(2) Line input #2,S Text1.text=text1.text+s+chr(13)+chr(10) Wend C

24、lose #2 在文件中读取位置?3.Input$函数格式: Input$(n,文件号)返回从指定文件中读出的N个字符的字符串 x$=Input$(100,#1)不把回车换行序列看作是一次输入操作的结束标志。Private Sub Form_Click() Q$=InputBox(“请输入要查找的字符串:”) Open “c:autoexec.bat” For Input As #1 X$=Input$(LOF(1),1) 把整个文件内容读入变量X$ Close Y=InStr(1,X$,Q$) If y0 Then Print “找到字符串”;Q$ Else Print “未找到字符串”;Q

25、$ End IfEnd Sub14.5 随机文件前提知识: 由若干数据项组成的一条记录即自定义的一种数据类型,这种数据包含需要的数据项 Type 类型名子数据项 AS 类型子数据项 AS 类型End type Type Record ID As Integer Name As String * 20 End Type Dim 变量 AS 自定义类型 如:Dim Rec as Record 不论读写,都不能直接操作Rec 应该操作: Rec.子项 Rec.ID Rec.Name14.5.1 随机文件的打开与读写操作1. 随机文件的写操作分为以下4步:(1)定义数据类型随机文件由固定长度的记录组成

26、,每个记录含有若干个字段。(2)打开随机文件Open 文件名 For Random As #文件号 Len=记录长度打开后既可读又可写。随机文件的长度是固定的,应在打开文件的同时指定记录长度,“记录长度”为各个字段长度之和,以字符为单位,若省略“Len=记录长度”,则默认长度为128个字节。 通过直接计算得到 通过函数得到 Len(记录型变量)Open TESTFILE For Random As #1 Len=Len(MyRecord)(3)写操作 Put #文件号,记录号,变量名 将一个记录变量的内容写到文件指定的记录位置处。1)忽略记录号,则表示在当前记录后的位置插入一条记录。但逗号不能

27、省: Put #2,Filebuff2)如果要写入的字符串变量是一个定长字符串,则除写入变量外,Put语句还写入两个字节的描述符,因此由LEN子句所指定的记录长度至少应比字符串的实际长度多两个字节。还有其它情况。3)关闭文件与顺序文件同。2.随机文件的读操作 Get #文件号,记录号,变量名忽略记录号,则读出当前记录后的那一条记录。例: 建立随机文件。Type Record ID As Integer Name As String * 20End Type Dim MyRecord As Record Open TESTFILE For Random As #1 Len = Len(MyRec

28、ord)For RecordNumber = 1 To 5 MyRecord.ID = RecordNumber MyRecord.Name = My Name Put #1, RecordNumber, MyRecord Next RecordNumberClose #1例: 用Get命令读出上例建立的随机文件中第三条记录。Type Record ID As IntegerName As String * 20End TypeDim MyRecord As Record Open TESTFILE For Random As #1 Len =Len(MyRecord)Position = 3

29、 Get #1, Position, MyRecord Print Myrecord.Id,Myrecord.NameClose #1 3. SEEK函数SEEK(文件号)随机文件:返回下一个要写入或读出的记录号;二进制文件或顺序文件:返回下一个写入或读出的字节位置。 4. SEEK命令Seek #文件号, 位置设置下一个要写入或读出的位置。例: 建立一个文件名为STUDENT.DAT二进制文件。Sub Form_Click( )Dim Name As String * 10Open Student.Dat For Binary As #1DoNAME = InputBox(请输入学生姓名:)

30、Put #1, , NAMEYES = InputBox(继续输入吗?(Y/N)Loop While UCase(YES) = YClose #1End Sub例: 用INPUT函数读出上例建立的文件。Sub Form_Click()Dim Name As String * 10Open Student.Dat For Binary As #1Flength = Lof(1)Char = Input(Flength, #1)Print CharClose #1End Sub14.5.2随机文件中记录的增加与删除1增加记录即在文件的末尾附加记录。方法:先找到文件最后一个记录的记录号,然后把要增加的记录写到它的后面。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1