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

下载本文档

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

文档简介

1、第11章 Visual Basic的数据文件11.1 文件概述文件:存储在外部介质上的数据的集合。输入/输出设备也可看作是文件。每个文件都用唯一的文件全名进行区别。11.1.1 文件结构及用户自定义数据类型1.文件结构(1)字符(Character):是构成文件的最基本单位。(2)字段(Field):也称域,由若干个字符组成,用来表示一项数据。(3)记录(Record):由一组相关的字段组成。(4)文件(File):文件由记录构成,一个文件含有一个以上的记录。2用户自定义数据类型Type语句定义的类型称为记录类型在标准模块或窗体模块的声明部分中定义,窗体模块中定义的记录类型只能是私有的格式:P

2、ublic|Private Type 数据类型名数据元素名 As 类型名数据元素名 As 类型名End Type例如:Type StudentNum As IntegerName As StringAge As IntegerSex As String*1Score As SingleEnd Type定义了记录类型后,可以定义属于这种类型的变量,如:Dim Stu As Student用“变量名.元素名”引用成员,如:Stu.Num=20Stu.Name="zhangqiang"11.1.2 文件种类(1)根据数据性质:程序文件、数据文件 (2)根据数据的存取方式和结构:顺

3、序文件、随机文件 顺序文件记录一个接一个地存放。只能从文件头开始,一个记录一个记录地顺序读取。 随机存取文件又称直接存取文件(简称随机文件或直接文件)。可访问文件中的任一个记录。每个记录的长度是固定的,记录中的每个字段的长度也是固定的。每个记录都有一个记录号,按记录号读写。 (3)根据数据的编码方式:ASCII文件、二进制文件 ASCII文件又称文本文件,每个字节放一个ASCII代码。 二进制文件以二进制方式保存的文件。11.2 文件的打开与关闭数据文件的操作步骤:(1)打开(或建立)文件 (2)进行读、写操作 (3)关闭文件11.2.1 文件的打开用Open语句打开或建立一个文件【格式】Op

4、en 文件全名 For 打开方式 Access 存取类型 锁定 As # 文件号 Len=记录长度【功能】分配缓冲区,确定存取方式。【说明】 打开方式:Output顺序输出Input顺序输入Append顺序追加Random随机存取(默认)Binary二进制 存取类型:Read只读Write只写Read Write读写(随机、二进制、用Append方式打开的文件) 锁定:在多用户或多进程环境中使用,用来限制其他用户或进程对文件进行读写操作。 文件号:整型表达式。1511。 记录长度:整型表达式。随机文件的记录长度(默认128字节)。顺序文件的缓冲字符数(默认512字节)。顺序文件各个记录的长度可

5、以不相同。二进制文件忽略Len子句。 【举例】Open "student.dat" For Output As #1 Open "student.dat" For AppEnd As #1Open "student.dat" For Input As #1Open "student.dat" For Random As #1Open "student.dat" For Random Access Read Lock Write As #1Open "c:ysxxstudent.dat&

6、quot; For Random As #1 Len=25611.2.2 文件的关闭Close语句格式:Close #文件号 ,#文件号说明:(1) 文件号是Open语句中使用的文件号。省略文件号,则关闭所有打开的文件。(2) 关闭的作用:把缓冲区中的数据写到文件;释放文件号。(3) 除了用Close语句外,程序结束时也将自动关闭所有打开的数据文件。11.3 文件操作语句和函数11.3.1 文件指针文件指针用来表示文件的读写位置。用Append方式打开文件时,文件指针指向文件的末尾用其他方式(Input、Output、Random、Binary等)打开文件时,文件指针指向文件的开始。每一次读写

7、,指针都自动移动到下一个位置。随机文件,最小移动单位是一个记录的长度。顺序文件,移动的长度与读写的字符串的长度相同。Seek语句:Seek #文件号,位置 功能:指针定位说明:(1)顺序文件,“位置”是从文件开头开始的字节数。随机文件,“位置”是下一次读写的记录号。(2)Get、Put语句中的记录号优先于Seek语句。Seek函数:Seek(文件号)功能:返回文件指针的当前位置。例: Open "d:test" For Output As #1 '新建test顺序文件,文件指针指向第1字节位置 sName = "wang qiang" '

8、变量sName设为字符串 Print #1, sName 'sName输出到文件中,文件内容:wang qiang modi = "l" Seek #1, 6 '文件指针指向第6字节位置,即"q"所在位置 Print #1, modi; 'modi输出到文件中,文件内容:wang liang Currentfilepoint = Seek(1) '变量Currentfilepoint值为7 Close #111.3.2 其他语句和函数1. FreeFile函数格式:FreeFile()功能:得到一个在程序中没有使用的文件号

9、。举例:Filenum=FreeFile() Open “test” For Output As Filenum2. Loc函数格式:Loc(文件号)功能:返回指定文件的当前读写位置。随机文件,返回最后读写的记录号,即当前读写位置的上一个记录。顺序文件,返回文件指针当前位置除以128的值。二进制文件,返回最后一次读写的字节位置。3. LOF函数格式:LOF(文件号)功能:返回文件长度。单位是字节,但要是128的倍数。因为文件的基本单位是记录,每个记录的默认长度是128字节。例如:某个文件的实际长度是257(=128*2+1)个字节,则用LOF函数返回的是384(=128*3)个字节。4. EO

10、F函数格式:EOF(文件号)功能:测试是否到达文件末尾。返回True或False。11.4 顺序文件11.4.1 顺序文件的写操作 1. Print #语句 格式:Print #文件号,Spc(n)|Tab(n)表达式表;|,功能:把数据写入文件。Print方法所“写”的对象是窗体、打印机或控件。Print #语句所“写”的对象是文件。在满足下列条件之一时才写入磁盘: 关闭文件(Close) 缓冲区已满 缓冲区未满,但执行下一个Print #语句2. Write #语句格式:Write #文件号,表达式表说明:(1)“表达式表”中的各项以逗号分开。(2)以紧凑格式存放。自动在数据项之间插入逗号

11、、给字符串加上双引号、最后项末尾插换行符。(3)正数的前面没有空格。【例11.1】 编写程序,利用Write #语句向文件中写入数据,建立学生档案文件,程序可以依次输入多个同学的信息,当输入的姓名为“-1”时,结束输入。步骤: 新建一个“标准EXE工程”,自动在工程中添加一个名称为Form1的窗体。 在窗体模块的声明段中定义自定义数据类型student。Private Type student sName As String sno As String age As Integer sdorm As String sphone As StringEnd Type 编写窗体的Click事件过程。

12、Private Sub Form_Click() Dim stu As student Open "d:student.dat" For Append As #1 i = 1 Do While stu.sName <> "-1" stitle = "第" + Str$(i) + "名学生数据输入" stu.sName = InputBox("请输入姓名:", stitle) stu.sno = InputBox("请输入学号:", stitle) stu.age

13、= Val(InputBox("请输入年龄:", stitle) stu.sdorm = InputBox("请输入宿舍:", stitle) stu.sphone = InputBox("请输入电话:", stitle) If stu.sName <> "-1" Then Write #1, stu.sName, stu.sno, stu.age, stu.sdorm, stu.sphone End If i = i + 1 Loop Close #1End Sub 运行程序 利用记事本打开d:stu

14、dent.dat文件11.4.2 顺序文件的读操作1. Input #语句格式:Input #文件号,变量表说明:(1)“变量表”由一个或多个变量组成,从数据文件中读出的数据赋给这些变量。(2)读出的数据,忽略前导空格、回车或换行符。【例 11.2】 把前面建立的学生数据文件读到内存,并在屏幕(窗体)中显示出来。自定义类型同前例窗体单击事件过程:Private Sub Form_Click() Dim stu() As student n = Val(InputBox("输入读取人数:") ReDim stu(n) As student Open "d:stude

15、nt.dat" For Input As #1 Print "姓名" Tab(10); "学号" Tab(20); "年龄" Tab(30); "宿舍" Tab(40); "电话" For i = 1 To n Input #1, stu(i).sName, stu(i).sno, stu(i).age, stu(i).sdorm, stu(i).sphone Print stu(i).sName; Tab(10); stu(i).sno; Tab(20); stu(i).age; T

16、ab(30); stu(i).sdorm; Tab(40); stu(i).sphone Next i Close #1End Sub2. Line Input #语句格式:Line Input #文件号,字符串变量功能:从顺序文件中读取一行,赋给字符串变量。【例11.3】把一个磁盘文本文件的内容读到内存并在文本框中显示出来,然后再把该文本框中的内容存入另一个磁盘文件。步骤: 新建一个“标准EXE”工程,自动在工程中添加一个名为Form1的窗体。 在窗体上建立一个文本框,设置MultiLine属性设为True。 编写如下事件过程:Private Sub Form_Click() Open &q

17、uot;d:student.dat" For Input As #1 Do While Not EOF(1) Line Input #1, saline$ 'saline不包括回车换行符 swhole$ = swhole$ + saline$ + Chr$(13) + Chr$(10) '在每行末添上回车换行符 Loop Text1.Text = swhole$ Close #1 Open "d:student2.dat" For Output As #1 Print #1, Text1.Text Close #1End Sub3. Input$函

18、数格式:Input$(n,#文件号)功能:返回从指定文件中读出的n个字符(二进制输入)。例: x$=Input$(100,#1)从文件号为1的文件中读取100个字符,并把它赋给变量x$。11.5 随机文件特点:(1)定长记录,通过记录号确定位置。(2)每个记录分若干个字段,每个字段的长度等于相应的变量的长度。(3)各变量(数据项)要按一定的格式置入相应的字段。(4)打开随机文件后,既可以读也可以写。11.5.1 随机文件的打开与读写操作1. 随机文件的写操作(1)定义数据类型(2)打开随机文件(3)将内存中的数据写入磁盘Put语句,格式:Put #文件号,记录号,变量 说明: 省略“记录号”,

19、写到下一个记录位置,逗号不能省。 记录长度与数据的长度应匹配。(4)关闭文件2. 随机文件的读操作Get语句,格式:Get #文件号,记录号,变量【例11.4】建立并读取一个学生信息随机文件。步骤:(1)新建一个“标准EXE”工程,自动在工程中添加一个名为Form1的窗体。(2)执行“工程”菜单中的“添加模块”命令,建立标准模块,在该模块中定义如下的记录类型:Type student sName As String * 8 '姓名字段为定长字符串,长度为8 sno As String * 7 '学号字段为定长字符串,长度为7 age As Integer '年龄字段 s

20、dorm As String * 5 '宿舍字段 sphone As String * 11 '电话字段End Type(3)在窗体中添加3个命令按钮:建立文件、显示全部记录、显示指定记录。(4)分别编写3个命令按钮的Click事件过程代码。Private Sub Command1_Click() '建立学生信息数据文件 Dim stu As student, reclen As Integer, recno As Integer reclen = Len(stu) '计算记录的长度 Open "studentr.dat" For Rando

21、m As #1 Len = reclen recno = 1 Do While Trim(stu.sName) <> "-1" stitle = "第" + Str(recno) + "名学生数据输入" stu.sName = Trim(InputBox("请输入姓名:", stitle) stu.sno = Trim(InputBox("请输入学号:", stitle) stu.age = Val(InputBox("请输入年龄:", stitle) stu.s

22、dorm = Trim(InputBox("请输入宿舍:", stitle) stu.sphone = Trim(InputBox("请输入电话:", stitle) If Trim(stu.sName) <> "-1" Then Put #1, recno, stu recno = recno + 1 End If Loop Close #1End SubPrivate Sub Command2_Click() '显示文件中的全部记录 Dim i As Integer, numbers As Integer, r

23、eclen As Integer, stu As student reclen = Len(stu) '计算记录的长度 Open "studentr.dat" For Random As #1 Len = reclen Cls numbers = LOF(1) / reclen '计算记录的数目 Print "姓名" Tab(10); "学号" Tab(20); "年龄" Tab(30); "宿舍" Tab(40); "电话" For i = 1 To num

24、bers '逐条读出记录并输出 Get #1, i, stu Print stu.sName; Tab(10); stu.sno; Tab(20); stu.age; Tab(30); stu.sdorm; Tab(40); stu.sphone Next i Close #1End SubPrivate Sub Command3_Click() '显示文件中指定的记录 Dim i As Integer, numbers As Integer, reclen As Integer, stu As student reclen = Len(stu) Open "stud

25、entr.dat" For Random As #1 Len = reclen Cls numbers = LOF(1) / reclen i = Val(InputBox("请输入记录号:", "数据输入") If i < 1 Or i > numbers Then MsgBox "记录号超出范围" Else Print "姓名" Tab(10); "学号" Tab(20); "年龄" Tab(30); "宿舍" Tab(40);

26、"电话" Get #1, i, stu '读取指定的记录 Print stu.sName; Tab(10); stu.sno; Tab(20); stu.age; Tab(30); stu.sdorm; Tab(40); stu.sphone End If Close #1End Sub11.5.2 随机文件中记录的增加与删除1. 增加记录利用随机文件长度/记录长度求出记录个数将记录数加1,Put语句写数据2. 删除记录把下一个记录重写到要删除的记录位置上其后的所有记录依次前移【实验】在例11.4的软件中增加添加记录、删除记录功能。11.6 文件系统控件VB工具箱的

27、三个控件:驱动器列表框(Drive ListBox)目录列表框(Directory ListBox)文件列表框(File ListBox)1. 驱动器列表框Drive属性:返回或设置当前驱动器的名称只能用程序设置该属性Change事件:从驱动器列表框中选择一个新的驱动器时,触发该事件2. 目录列表框Path属性:返回或设置当前路径只能在程序代码中设置【格式】窗体.目录列表框名称.Path =“路径”【例如】Print Dir1.Path 显示当前路径Dir1.Path=“d:vb”设置路径Change事件:Path属性值改变时,触发该事件3. 文件列表框Path属性:同目录列表框Pattern

28、属性:用来设置在执行时要显示的某一种类型的文件属性窗口、程序代码均可设置默认值为*.*(所有文件)【代码格式】窗体.文件列表框名.Pattern =属性值【例如】 Print File1.Pattern 显示Pattern属性值File1.Pattern=“*.bmp”只显示扩展名为“.bmp”的文件FileName属性:设置或返回某一选定的文件名称可以用它来设置Path或Pattern属性【代码格式】窗体.文件列表框名.FileName =文件名【例如】File1.FileName=“d:vbe*.exe”显示d:vbe目录下扩展名为.exe的文件File1的Path属性值设置为“d:vbe

29、”Pattern属性值设置为“*.exe”4. 驱动器列表框、目录列表框、文件列表框的同步操作Private Sub Drive1_Change() Dir1.Path=Drive1.DriveEnd SubPrivate Sub Dir1_Change() File1.Path=Dir1.PathEnd Sub【例11.5】设计一个窗体,利用文件系统控件来选择查看一个图象文件。步骤: 新建一个“标准EXE”工程,自动在工程中添加一个名为Form1的窗体。 向窗体中添加1个驱动器列表框、1个目录列表框、1个文件列表框、2个标签和1个图象框。 编写代码:Private Sub Form_Load() File1.Pattern = "*.jpg"End SubPrivate Sub Drive1_Change() Dir1.Path = Drive1.DriveEnd SubPrivat

温馨提示

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

评论

0/150

提交评论