《Visual Basic程序设计教程 教学课件 ppt 作者 邱李华 郭全 vb第11章》由会员分享,可在线阅读,更多相关《Visual Basic程序设计教程 教学课件 ppt 作者 邱李华 郭全 vb第11章(110页珍藏版)》请在金锄头文库上搜索。
1、1,第11章 文件,11.1 文件的基本概念 11.2 顺序文件 11.3 随机文件 11.5 常用的文件操作语句和函数 11.6 文件系统控件,2,引言,在前面各章的示例中,应用程序所处理的数据存储在变量或数组中,即数据只能保存在内存中,当退出应用程序时,数据将不能被保存下来。为了长期有效地使用数据,在程序设计中引入了文件的概念。使用文件可以将应用程序所需要的原始数据、处理的中间结果以及执行的最后结果以文件的形式保存起来,以便继续使用或打印输出。,3,11.1 文件的基本概念,文件:存储数据的基本单位。 文件的分类: 按文件的存储介质不同,可以将文件分为磁盘文件、磁带文件、打印文件等。 按文
2、件的存储内容不同,可以将文件分为程序文件和数据文件。 按对文件文件的访问方式不同,可以将文件分为顺序文件、随机文件和二进制文件,4,1数据文件的结构,数据文件用于保存程序运行时所用到的输入、输出数据或中间结果。 为了有效地存取数据,数据在文件中必须按一定的格式存放,Visual Basic的数据文件一般由一些记录组成。,5,数据文件示例学生成绩表,记录:每行称为一个记录。 字段:每一列称为一个字段。 数据项:每个字段称为“数据项”,,6,2数据文件的分类,顺序文件: 普通的纯文本文件。 查找数据必须按记录顺序进行。 不能同时进行读写操作。 随机文件: 以固定长度记录为单位进行存储。 可以按任意
3、顺序访问其中的数据。 可以同时进行读写操作。 不能用字处理软件查看。 二进制文件: 以字节为单位进行访问。 不能用字处理软件查看。,7,11.2 顺序文件,顺序文件操作: 打开文件 读/写文件 关闭文件,8,11.2.1 顺序文件的打开和关闭,1. 顺序文件的打开,格式:,Open 文件名 For Input|Output|Append As #文件号 Len=缓冲区大小,功能: 按指定的方式打开文件,并指定一文件号。,9,说明: (1)文件名:一个字符串表达式,可以包含文件所在的路径及文件名称。 (2)文件的打开方式: Input:以只读方式打开文件,当要读的文件不存在时会出错。 Outpu
4、t:以写方式打开文件,如果文件不存在,就创建一个新的文件,如果文件已经存在,则删除文件中的原有数据,从头开始写入数据。,10,Append:以添加的方式打开文件,如果文件不存在,就创建一个新的文件,如果文件已经存在,则打开文件并保留原有的数据,写数据时从文件尾开始进行添加。 (3)文件号:介于到511之间的整数,用于为打开的文件指定一个编号。“文件号”前的#号可以省略。同时打开多个文件时,指定的文件号不能重复。为避免文件号的重复使用,可以使用FreeFile函数来获取一个未被使用的文件号。,11,(4)缓冲区大小:在把记录写入磁盘或从磁盘读出记录之前,用该参数指定缓冲区的字节数。缓冲区越大,占
5、用空间越多,文件输入输出操作越快。反之,缓冲区越小,剩余的内存空间越大,文件的输入输出操作越慢。默认缓冲区的容量为512字节。,12,打开文件示例:,例1:在C盘Data文件夹下建立一个名为Student.dat的顺序文件: Open “C:DataStudent.dat“ For Output As #1 例2:打开当前文件夹下名为Salary.dat的顺序文件,以便从中读取数据-: Open “Salary.dat“ For Input As #8 例3:打开C盘Data文件夹下名为Student.dat的文件,以便在文件尾添加数据,Open语句为: Open “C:DataStudent
6、.dat“ For Append As 2,13,2顺序文件的关闭,格式 :,Close 文件号列表,文件号列表:包括一到多个已经打开的文件的文件号,各项之间用逗号隔开,省略“文件号列表”则关闭所有已打开的文件。,14,关闭文件示例:,例1:关闭文件号为1的文件: Close #1 例2:关闭文件号为1、2、3的文件: Close #1, 2, 3 文件号前的“#”号可以省略 例3:关闭所有文件: Close,15,11.2.2 顺序文件的读写,打开顺序文件之后,就可以对顺序文件进行读写操作了。,读操作:指将文件中的数据取到内存(如变量或数组元素)。 写操作:指将内存(如常量、变量或数组元素)
7、中的数据保存到文件中。,16,1顺序文件的写操作,(1)Write #语句,格式 :,Write #文件号,输出列表,功能 :将“输出列表”的内容写入指定的文件中。,17,说明: (1)“输出列表”中的各项之间要用逗号分隔,每一项可以是常量、变量或表达式。 (2)Write #语句将各输出项的值按列表顺序写入文件并在各值之间自动插入逗号,并且将字符串加上双引号。所有数据写完后,将在最后加入一个回车换行符。不含“输出列表”的Write #语句将在文件中写入一空行。,18,【例11-1】建立一个新的学生成绩顺序文件,将输入的学生成绩添加到文件中。,界面设计:,19,代码设计:,(1)在窗体的Loa
8、d事件过程中显示保存文件对话框,并将对话框中指定的文件作为Open语句要打开的文件: Private Sub Form_Load() CommonDialog1.ShowSave Open CommonDialog1.FileName For _ Output As #1 End Sub,20,(2)单击“添加”按钮将输入的数据用Write #语句写入文件,同时清除界面上的数据,: Private Sub Command1_Click() no = Text1.Text : na = Text2.Text g1 = Val(Text3.Text) : g2 = Val(Text4.Text)
9、Write #1, no, na, g1, g2 Text1.Text = “ : Text2.Text = “ : Text3.Text = “ : Text4.Text = “ End Sub,21,(3)单击“结束”按钮关闭文件、结束运行: Private Sub Command2_Click() Close #1 End End Sub,生成的文件格式:,22,(2)Print #语句,格式 :,Print #文件号,输出列表,功能:将“输出列表”的内容写入文件号指定的文件中。,23,说明: (1)“输出列表”中各项之间要用逗号或分号隔开。当用逗号分隔时,采用分区格式输出;当用分号分隔
10、时,采用紧凑格式输出。所有项将在一行内输出,所有项输出后将自动换行。每一项可以是常量、变量或表达式。 (2)用Print #语句输出后,文件中的字符串没有被加上引号,各项之间没有逗号分隔。 (3)“输出列表”中可以使用Spc()函数和Tab()函数。其格式和向窗体上输出的格式相同。,24,将上例中的Write #语句改用Print #语句: Print #2, no, na, g1, g2,生成的文件格式:,25,2顺序文件的读操作,格式:,(1)Input #语句,Input #文件号,变量列表,功能:从文件中读取一行数据,并将这些已格式化的数据依次读入到“变量列表”所列的各变量中。,26,
11、说明: 文件中各数据之间应该用逗号分隔。字符类型的数据应该用双引号括起来。 读取的数据的类型要与变量列表中变量的类型相匹配,否则会读出错误的结果。 Input #语句常与Write #语句配合使用,用于读取由Write #语句写到文件中的数据。,27,EOF函数,在读顺序文件的过程中,如果已到达文件结尾,则会终止输入,并产生一个错误。为了避免这种错误,可以使用EOF函数判断是否已读到了文件尾。,格式:,EOF(文件号),功能:EOF函数返回一个布尔值,当返回值为True时,表明已经到达文件的结尾。,28,【例11-2】读取用例11-1生成的数据文件(用Write #语句生成),计算各学生的平均
12、成绩,并显示各学生的学号、姓名、数学成绩、英语成绩和平均成绩。,界面设计:,29,代码设计: Private Sub Command1_Click() CommonDialog1.ShowOpen Open CommonDialog1.FileName For Input As #2 Text1.Text = “ Do While Not EOF(2) Input #2, num, nam, s1, s2 ave = (s1 + s2) / 2 Text1.Text = Text1.Text & num & “ “ & _ nam & “ “ & Str(s1) & “ “ & Str(s2)
13、 & _ “ “ & Str(ave) & vbCrlf Loop Close #2 End Sub,30,运行时,单击“读取数据”按钮,在打开的对话框中指定文件名,显示结果如图:,31,格式:,Line Input #文件号,变量名,(2)Line Input #语句,功能:从文件中读取一行数据,即读取从行首到回车换行符之间的所有字符(不包括回车和换行符)。读出的数据作为字符串保存到“变量名”指定的变量中。,说明:Line Input #语句常与Print #语句配合使用,用于读取由Print #语句写到文件中的数据。,32,【例11-3】读取如下图所示格式的数据文件中的数据,显示在文本框中
14、。,33,界面设计:,34,格式:,Input(n,#文件号),(3)Input函数,功能:返回从“文件号”指定的文件的当前位置读出的n个字符,35,【例11-4】统计文件中字符串出现的次数。 首先用记事本直接创建一个具有两行(两条记录)的文本文件“a.txt” ,作为要读取的文件。如下图:,36,界面设计:,37,代码设计,Private Sub Command1_Click() x = Trim(Text1.Text) If x “ Then CommonDialog1.ShowOpen Open CommonDialog1.FileName For Input As #1 FLen =
15、LOF(1) 获取文件的总长度 读取长度为FLen的字符(全部字符) s = Input(FLen, #1) 查找x在s中首次出现的位置 f = InStr(1, s, x),38,num = 0 Do While f 0 num = num + 1 继续在s中查找x,查找起始位置为f + Len(x) f = InStr(f + Len(x), s, x) Loop Text2.Text = num 显示查找结果 Close #1 Else MsgBox (“请在文本框中输入一个字符串“) Text1.SetFocus End If End Sub,39,运行时,首先在文本框Text1中输入
16、要统计的字符串(如“bi”),单击“统计”按钮,则显示一个“打开文件”对话框,选择预先建立的文件a.txt,则在文本框Text2中显示统计结果,如下图:,40,【例11-5】读取例11-1生成的学生成绩文件,计算每个学生的平均成绩,计算每门课的平均成绩,将原始数据和计算结果显示于文本框中,同时将计算结果与原数据保存于另外一个指定的文件中。,学生成绩文件:,41,界面设计:,42,代码设计设立三个数组: 学号、姓名、成绩,43,Dim Num(100) As String, Nam(100) As _ String, G(100, 2) As Integer, N As Integer Private Sub Command1_Click() 读取数据 CommonDialog1.ShowOpen Open CommonDialog1.FileName For Input As #1 N = 0 Do While Not EOF(1) N = N + 1 Input #1, N