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

下载本文档

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

文档简介

1、第第1313章章 数据文件数据文件1.掌握VB中文件的概念、种类及其结构;2.掌握顺序文件的操作:打开、读/写、关闭;3.掌握随机文件的操作:打开、读/写、关闭;4.了解二进制文件的操作。5.了解与文件操作有关的一些语句本章内容及要求:二、文件分类二、文件分类根据访问文件的方式将文件分成3类: 顺序文件 随机文件 二进制文件。 2随机文件随机文件 随机文件(Random Access File)是可以按任意次序读写的文件,其中每个记录的长度必须相同。在这种文件结构中,每个记录都有其唯一的一个记录号,所以在读取数据时,只要知道记录号,便可以直接读取记录。 随机文件的文件结构打开文件读出或写入关闭

2、文件在程序中对文件的操作,通常按3个步骤进行: 一、顺序文件的打开与关闭1. 打开文件Open “文件名” For 模式 As #文件号 Len=记录长度(1) 模式OUTPUT:写操作INPUT:读操作APPEND:追加到文件未尾 OPEN C:VBSCORE.txt FOR OUTPUT AS #1v打开文件的真正含意打开文件的真正含意: (1)并不是把文件内容显示出来,而是读文件或显示文并不是把文件内容显示出来,而是读文件或显示文件内容的必经步骤;件内容的必经步骤; (2)打开文件并不一定只是为了读文件内容而打开,其打开文件并不一定只是为了读文件内容而打开,其实写文件或新建文件之前都要把

3、对应的文件打开。实写文件或新建文件之前都要把对应的文件打开。v如何打开由用户任意指定的文件:如何打开由用户任意指定的文件: (1)用打开用打开/另存为对话框;另存为对话框; (2)用文件列表框用文件列表框/目录列表框目录列表框/驱动器列表框驱动器列表框 要注意要注意OPEN语句与它们分工上的不同语句与它们分工上的不同1. 顺序文件读操作 从现存文件中读入数据,应以顺序Input方式打开该文件。然后使用 Input# 语句、Line Input# 语句和Input( )函数读入到程序变量中。 使用格式如下:格式一:格式一:Input # 语句语句 INPUT #文件号文件号,变量列表变量列表把读

4、出的每个数据项分别存放到所对应的变量,从文件中读出数据时,凡是遇到文件中的逗号、空格或回车符便认为是一个数据项的结束。v例例1:假设有一个名为:假设有一个名为datain.txt的文本文件,其的文本文件,其内容如下:内容如下:32 43 76 58 28 12 98 57 31 42 53 64 75 86 97 13 24 35 46 57 68 79 80 59 37,共共25个数,要求程序运行后,单击窗体,将该文个数,要求程序运行后,单击窗体,将该文件中的数据读入到二维数组件中的数据读入到二维数组mat中。在窗体上按中。在窗体上按5行行5列的矩阵形式显示出来。列的矩阵形式显示出来。Dim

5、 mat(5, 5)Dim I , jOpen App.Path & & datain.txt For Input As #1For i = 1 To 5 For j = 1 To 5 Input #1 , mat(i, j)Next j , iClose #1PrintPrint 初始矩阵为:初始矩阵为:PrintFor i = 1 To 5 For j = 1 To 5 Print Tab(5 * j) ; mat(i, j); Next j PrintNext iFor k=1 to 25 I= k / 5+1 : J=k mod 5 Input #1 , mat(I,J

6、)Next k问题:如果把数据文件中的数据删掉一个或者把程序中的5改为4,会是什么结果呢?也可改为单循环:Eof 函数函数 Eof 函数将返回一个表示文件指针是否到达文件函数将返回一个表示文件指针是否到达文件末尾的标志。如果到了文件末尾,末尾的标志。如果到了文件末尾,Eof 函数返回函数返回TRUE(-1),否则返回,否则返回FALSE(0)。 从文件中读数据的常见循环方式:从文件中读数据的常见循环方式: Do While Not Eof(文件号文件号) 读文件及其它语句读文件及其它语句 Loopv例例2:把文件文件:把文件文件datain.txt的内容全部读出并显示在的内容全部读出并显示在窗

7、体中:窗体中:Open App.Path & & datain.txt For Input As #1Do While Not Eof(1) Input #1 , a Print aLoop格式二:格式二:Line Input # 语句语句 LINE INPUT #文件号文件号 , 字符串变量字符串变量功能:从顺序文件中读取一整行字符到后面指定的字符串变量中。例:把程序文件夹下面的文本文件myfile.txt的内容显示在一个多行文本框中:Open App.Path & & myfile.txt For Input As #1Do While Not EOF(1)

8、 Line Input #1 , s Text1.Text = Text1.Text + s + vbCrLfLoopClose #1格式三:格式三:Input函数:函数: INPUT$(N, #文件号文件号) 从指定的文件中读取N个字符的字符串,作为函数的返回值例:把程序文件夹下面的文本文件myfile.txt的内容一次性读出并显示在多行文本框中:Open App.Path & & myfile.txt For Input As #1Text1.Text = Input( LOF(1) , 1)Close #1函数功能:求文件的长度例:把程序文件夹下面的文本文件myfile.

9、txt的内容逐个字符读出并显示在多行文本框中。Dim c As String * 1Open App.Path & & myfile.txt“ For Input As #1Do While Not EOF(1) c= Input(1, #1) Text1.Text = Text1.Text & cLoopClose #12、顺序文件的写操作、顺序文件的写操作 向文件写入内容使用向文件写入内容使用 Print # 语句或语句或Write#语句,在程序中是语句,在程序中是数据输出。数据输出。(1)Print语句语句语法格式:说明:说明:文件号为以写方式打开文件的文件号;

10、输出列表为用分号或逗号分隔的变量、常量、空格和定位函数序列。 (2)Write命令命令语法格式:Write #,Write语句采用紧凑格式。数据项之间插入“,”,并给字符数据加上双引号。例:例: Print与与Write语句输出数据结果比较。语句输出数据结果比较。Private Sub Form_Click()Dim Str As String , Anum As Integer Open D:Myfile.dat For Append As 1Str = ABCDEFGAnum = 12345Print #1 , Str , AnumWrite #1 , Str , AnumClose #1

11、End Sub例:例:编程把一个文本框中的内容,以文件形式存入磁盘。编程把一个文本框中的内容,以文件形式存入磁盘。假定文本框的名称为假定文本框的名称为Mytxt,文件名为,文件名为Myfile.dat。方法方法1:把整个文本框的内容一次性地写入文件。把整个文本框的内容一次性地写入文件。Open Myfile.dat“ For Output As #1Print #1, Mytxt.TextClose #1方法方法2:把整个文本框的内容一个字符一个字符地写入文件。把整个文本框的内容一个字符一个字符地写入文件。Open Myfile.dat For Output As #1For i=1 To l

12、en(Mytxt.Text) Print #1 , Mid(Mytxt.Text,i,1);Next iClose #1三、关闭文件三、关闭文件Close 语句使用格式如下: 其中:文件号列表为可选项,如:#1, #2, #3,如果省略,则将关闭Open语句打开的所有活动文件。例如: Close #1,#2,#3 Close 四与读文件操作有关的几个函数四与读文件操作有关的几个函数(1)Lof 函数函数 LOF函数将返回某文件的字节数。例如,函数将返回某文件的字节数。例如,LOF(1)返回返回#1文件的长度,如果文件的长度,如果返回返回0值,则表示该文件是一个空文件。值,则表示该文件是一个空文

13、件。(2)Loc 函数函数 Loc函数将返回在一个打开文件中读写的记录号;对于二进制文件,它将返函数将返回在一个打开文件中读写的记录号;对于二进制文件,它将返回最近读写的一个字节的位置。回最近读写的一个字节的位置。(3)Eof 函数函数 Eof 函数将返回一个表示文件指针是否到达文件末尾的标志。如果到了文件函数将返回一个表示文件指针是否到达文件末尾的标志。如果到了文件末尾,末尾,Eof 函数返回函数返回TRUE(-1),否则返回,否则返回FALSE(0)。 语法结构:语法结构: Do While Not Eof(文件号文件号) 语句语句 Loopv例例1:磁盘上有:磁盘上有f1.txt和和f2

14、.txt两个文本文件,要求两个文本文件,要求将两个文件中的数据读出,并保存到一个新的文将两个文件中的数据读出,并保存到一个新的文件件f3.txt中。中。v例例2:将一个文件:将一个文件f1.txt中的内容全部奇数行和偶中的内容全部奇数行和偶数行互换后保存到文件数行互换后保存到文件f4.txt中。中。顺序文件应用举例例:顺序文件的应用举例. 本程序演示顺序文件的读写操作,程序运行示意如图所示。该程序可以打开一个顺序文件,将其内容读入文本框中进行修改,并可以保存修改。改成可以将文本框的内容在磁盘上建立一个顺序文件。顺序文件应用举例14.2 顺序文件设置控件事件代码如下:Private Sub Co

15、mmand1_Click() 本过程完成文件的读取功能 Dim File1 Dim nextline As String CommonDialog1.Filter= Text Files(.txt)|.txt 指定默认文件类型 CommonDialog1.ShowOpen 调用以CommonDialog1控件打开的对话框,以输入要打开的文件名 File1=CommonDialog1.filename 将打开对话框提供的文件名赋予变量File1 顺序文件应用举例Open File1 For Input As #1 按读方式打开下面循环可以用语句“Text1.text=Input(LOF(1),1

16、)”替代 Do Until EOF(1) 将打开文本文件的内容赋予文本框 Line Input #1 ,nextline Text1.Text=Text1.Text+nextline+Chr(13)+Chr(10) Loop Close 1 关闭打开的文件End SubPrivate Sub Command2_Click() 本过程完成将文本框的内容写入文件中 Dim contents ,File1 CommonDialog1.showSave 调用CommandDialog1控件的保存对话框,以提供建立文件的文件名 File1=CommonDialog1.filename Open File

17、1 For Output As #1 以写方式打文件 Contents=Text1.Text Text1.Text= 清除文本框中的内容 Print #1 ,Contents 往文件中写入内容 Close 1 End Sub1.对于上面的某个程序界面对于上面的某个程序界面,如果需要把窗体上用户输入的信息如果需要把窗体上用户输入的信息存储在文件中存储在文件中,一种办法是用顺序文件的方法一种办法是用顺序文件的方法,把每个文本框内把每个文本框内容作为写文件语句的一个输出项容作为写文件语句的一个输出项,即即:Print #1, Text1.Text; Text2.Text; Text3.Text; T

18、ext4.Text; Text5.Text; Text6.Text思考思考:用这种方法写这类程序有什么不便用这种方法写这类程序有什么不便?2.如果要从存储有该信息的文件中查找第如果要从存储有该信息的文件中查找第5个人的信息个人的信息,如果用顺如果用顺序文件的方法去访问文件序文件的方法去访问文件,需要依次读出前四个人的信息需要依次读出前四个人的信息(即使即使不关心前四个人的信息也得读它不关心前四个人的信息也得读它,读后可立即丢弃读后可立即丢弃),然后使用以然后使用以下语句读出并显示下语句读出并显示:Input #1, Text1.Text, Text2.Text, Text3.Text, Tex

19、t4.Text, Text5.Text, Text6.Text思考思考:用这种方法写这类程序有什么不便用这种方法写这类程序有什么不便?v能否用一种简单的方法来读写该类信息文件呢能否用一种简单的方法来读写该类信息文件呢,比比如如: Print #1, x (先让先让x中存储有某个人的信息中存储有某个人的信息) Input #1, 5, a (即想用这种简单形式的语句读出文件即想用这种简单形式的语句读出文件中第中第5个人的信息存储在个人的信息存储在a中中) 注注:上面的两条语句不是正确的上面的两条语句不是正确的VB语言的语法语言的语法,在此使在此使用这种形式只是为了表达一种编程目的用这种形式只是为

20、了表达一种编程目的v要想使用这种简单直观的编程方式要想使用这种简单直观的编程方式,需要使用随机需要使用随机文件读写的编程技术文件读写的编程技术.14.3 随机文件 在文件中以顺序文件方式进行存取数据很方便也很常用,但是当需要大量查找或修改文件中的数据时会很困难,而这时采用随机文件方式存取数据就显得比较方便。 随机文件的每一个数据项都有相同的长度,它的数据项通常称做记录。随机文件是以记录为单位的,每条记录都被赋予了记录号以便查找。应用程序可以根据记录号直接读取随机文件中的任意记录,而无须由前至后逐个读取记录。 对随机文件的存取是以记录为单位进行的,每个记录包括一个或多个字段。具有一个字段的记录对

21、应于任一标准类型,比如整数或定长字符串。具有多个字段的记录对应于用户自定义类型。 1、 声明记录类型变量(教材P44-45) 在打开一个文件进行随机访问之前,应定义一个类型,该类型对应于该文件包含或将包含的记录。 语法格式为: Private|Public Type 自定义类型名自定义类型名 元素名元素名 As type 元素名元素名 As type End Type 例如,声明一个学生自定义类型。 Type Student Number As String 2 学号,宽度为2字节 Name As String 8 姓名,宽度为8字节 Score As Integer 成绩,宽度为2字节 En

22、d Type 在定义与记录对应的类型以后,应接着声明程序需要的任何其他变量,用来处理作为随机访问而打开的文件。如: Public student1 As student,student2 As student 定义记录变量13.3 随机文件2 随机文件的操作 一、打开格式: Open “文件名” For Random Access 存取类型 As #文件号 Len=记录长度二、读操作1.格式: Get #文件号 , 记录号 ,变量名2.功能: 将一个已打开的磁盘文件的一条记录的内容读入一个变量之中。 忽略记录号,则读出当前记录后的那一条记录。三、写操作1.格式:Put #文件号文件号 ,记录号

23、记录号 ,变量名,变量名2.功能:将一个变量的数据写入磁盘文件中,将一个记录变量的内容写到指定的记录位置处。忽略记录号,则表示在当前记录后的位置插入一条记录。v添加记录的方法添加记录的方法: 首先计算出文件中的记录数首先计算出文件中的记录数:k=LOF(文件号文件号)/Len(记录型变量记录型变量) 然后然后:Put #1, k, x (x为要添加的记录变量为要添加的记录变量)v删除记录的方法删除记录的方法: 把除需删除记录之外的所有其它记录写到另一个文件把除需删除记录之外的所有其它记录写到另一个文件中中v例:创建一个简单的学生成绩管理信息系统:例:创建一个简单的学生成绩管理信息系统:(1)学

24、生信息包括姓名和学号等,分班级存放在不同)学生信息包括姓名和学号等,分班级存放在不同的文件中,每班对应一个文件;程序中包括学生信的文件中,每班对应一个文件;程序中包括学生信息管理模块,可以进行简单的修改。息管理模块,可以进行简单的修改。(2)成绩信息包括学号、姓名、成绩,每门课每个班)成绩信息包括学号、姓名、成绩,每门课每个班对应一个文件输入成绩时,学生的姓名和学号采用对应一个文件输入成绩时,学生的姓名和学号采用列表方式选择输入。列表方式选择输入。(3)成绩分析模块包括求平均成绩、按成绩档次统计)成绩分析模块包括求平均成绩、按成绩档次统计人数等,统计结果存放到文件中。人数等,统计结果存放到文件

25、中。例题:创建一个随机文件,然后读出其中内容,显示在文本框中:例题:创建一个随机文件,然后读出其中内容,显示在文本框中:在窗体中创建一个文本框在窗体中创建一个文本框text1,两个命令按钮,两个命令按钮command1和和command2,点击,点击command1(写入文件)时创建文件,点击(写入文件)时创建文件,点击command2(读出文件)时把文件中(读出文件)时把文件中的数据读出来,显示在文本框中。下面是程序代码:的数据读出来,显示在文本框中。下面是程序代码:自定义数据类型(记录类型,在窗体的通用代码段中声明)自定义数据类型(记录类型,在窗体的通用代码段中声明)Private Typ

26、e Record ID As Integer Name As String * 20 End Type创建文件的代码,创建文件的代码,Command1的单击事件的单击事件Private Sub Command1_Click() Dim MyRecord As Record Open TESTFILE For Random As #1 Len = Len(MyRecord) For recordnumber = 1 To 5 MyRecord.ID = recordnumber MyRecord.Name = My Name & recordnumber Put #1, recordnu

27、mber, MyRecord Next recordnumberClose #1End Sub读出文件的代码(读出文件的代码(Command2的单击事件)的单击事件)Private Sub Command2_Click()Dim MyRecord As RecordOpen TESTFILE For Random As #1 Len = Len(MyRecord)While Not EOF(1) Get #1, , MyRecord Text1.Text=Text1.Text & Chr(10) & Chr(13) & Chr(10) & Chr(13) &am

28、p; MyRecord.ID & & MyRecord.NameWendClose #1End Sub 二进制文件是一个字节流,文件系统并不解释各字节的意义,解释工作由具体的应用程序完成。 以二进制方式访问文件有下述特点: 可以直接访问文件中的所有数据。 由应用程序根据需要解释数据的意义。 访问文件的语句不更改原始数据的所有内容。 二进制文件每一次读写是以字节为单位对数据进行访问操作的,它允许用户读写或修改文件中的任何字节信息。当把二进制数据写入文件中时,使用Byte数据类型的数组,而不是String变量。String被认为包含的是字符,而二进制型数据可能无法正确地存储在String变量中。 当要保持文件的尺寸尽量小时,应使用二进制文件。13.4 二进制文件一、二进制文件的打开Open 文件名 For Binary As #文件号二、二进制文件的写操作Put #文件号,位置,变量名写入长度等于变量长度的数据。三、二进制文件的读操作GET #文件号,位置,变量名 从指定位置开始读出长度等于变量长度的数据存入变量中,数据读出后移动变量长度位置,如

温馨提示

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

评论

0/150

提交评论