430 likes | 565 Views
第七章 文件. 第七章 文件. 7.1 文件的基本概念 7.2 顺序文件 7.3 随机文件 7.4 二进制文件 7.5 文件操作语句和函数 7.6 文件控件. 记录. 字段. 字段. 字段. 字段. 字段. 字段. 7.1 文件的基本概念. VB 的文件结构 字符 ( Character ) —— 构成文件的最基本单位。 字段 ( Field ) —— 由若干字符组成的一项数据。 记录 ( Record ) —— 由若干个相互关联的字段 ( 数据项 ) 组成。.
E N D
第七章 文件 7.1 文件的基本概念 7.2 顺序文件 7.3 随机文件 7.4 二进制文件 7.5 文件操作语句和函数 7.6 文件控件
记录 字段 字段 字段 字段 字段 字段 7.1 文件的基本概念 • VB的文件结构 字符(Character)——构成文件的最基本单位。 字段(Field)——由若干字符组成的一项数据。 记录(Record)——由若干个相互关联的字段(数据项)组成。 文件指存储在外部介质上数据的集合。为了有效地存取数据,数据必须以某种特定的方式存储,这种特定的方式称为文件结构。 例如:由学生的学习成绩信息组成的记录: 文件(File)——若干个记录的集合。
7.1 文件的基本概念 • VB文件种类 • 根据文件存储数据的性质分类:程序文件和数据文件 • 程序文件:可由计算机执行 • 数据文件:存储普通数据,通过程序来存取和管理
7.1 文件的基本概念 • VB文件种类 • 根据文件的存取方式和结构分类:顺序文件 和 随机文件 • 顺序文件: • 一行一条记录,记录可长可短 ; • 顺序文件中的记录按顺序一个接一个存储 • 对顺序文件进行读写操作时,总是从文件头开始,顺序读写。
7.1 文件的基本概念 • 随机文件(直接存取文件) 随机文件是由大小相同的记录组成,每个记录中包含记录号和字段。 对随机文件的读写操作时,给出记录号可以访问文件中与记录号对应的记录。 记录号n 记录号n+1 记录n 记录n+1
7.1 文件的基本概念 • VB文件种类 • 根据文件中数据的编码方式分类:ASCII文件和二进制文件 • ASCII文件:又称文本文件,它是以ASCII码的方式进行存储的,这种文件可以用字处理软件建立或修改。 • 二进制文件:二进制文件中的数据均以二进制方式存储,其存取单位是字节,二进制文件不能用一般的字处理软件进行编辑。
7.1 文件的基本概念 • 文件的基本操作 打开 或创建 关闭 读/写 文件的读操作是指把文件中的数据传送到内存的操作; 文件写操作是指把内存中的数据存入磁盘文件的操作; 文件打开后都有相应的文件号与之相关,可以看作文件的代表。 将数据写入文件,并释放相关资源。
格式:Open 文件名 For 打开方式 As [#] 文件号 为文件的输入、输出分配缓冲区,并将文件号与一个文件名连接起来。 7.2 顺序文件 1. 顺序文件的打开 • 文件名可以是字符串常量,也可以是字符串变量 字符串常量 "c:\VB\Test.txt" 字符串变量 str ="c:\VB\Test.txt" • 文件号是介于1~511之间的整数
7.2 顺序文件 • 打开方式 • Output:对文件进行写操作 • Append:在文件末尾追加记录 • Input:对文件进行读操作 除Input外,其余打开模式都可对不存在的文件先新建再打开 Open "Test.txt" For Input As #1 Open App.Path + "\Test.txt" For Input As #1 注:App.path:用来返回当前路径
7.2 顺序文件 2. 顺序文件的关闭 • 格式:Close [[#]文件号] [, [#]文件号] ... Close #文件号:关闭对应文件号的文件 Close:关闭所有已打开的文件 打开c:\VB目录下一个文件名为Score.txt的文件,供读数据,指定文件号为# 1 Open "c:\VB\Score.txt" For Input As #1 …… Close #1 Open "Score.txt" For Output As #1 …… Close #1
分区格式输出 紧凑输出 省略#会怎么样呢? 7.2 顺序文件 • 3.顺序文件的写操作——Print # 语句 格式:Print #文件号,[[Spc(n)|Tab(n)][表达式表][;|,]] Open " d:\test.txt" For Output As #1 ‘打开文件供输出 Print #1, "this is a test" ‘输出一行内容 Print #1, ‘输出一个空行 Print #1, "hello", ""; "world" Print #1, Spc(5); "hello everyone " Print #1, Tab(10); "hello" Close #1 Print格式
顺序文件 例:随机产生一个5×5的二维数组,将该数组的所有元素写入文件test.txt。 Private Sub Form_Click() Dim a(1 To 5, 1 To 5) Open “d:\test.txt" For Output As #1 For i = 1 To 5 For j = 1 To 5 a(i, j) = Int(Rnd * 100) Print Format(a(i, j), "@@@"); Print #1, Format(a(i, j), "@@@"); Next j Print Print #1, Next i Close #1 End Sub App.path & “\test.txt”当前路径下的test.txt文件 App.path:用来返回当前路径 Print矩阵
7.2 顺序文件 顺序文件的追加操作 • 这种操作适合把写入的数据附加到文件末尾的情况 Open 文件名 For Append As [#] 文件号 例 续前例,再随机生成一个二维数组, 把该数组各元素的值追加到test.txt的后面。 Open “d:\test.txt" For Append As #1
7.2 顺序文件 Write #1, "One", "Two", 123 Print #1, "One", "Two", 123 3.顺序文件的写操作——Write # 语句 格式:Wirte #文件号, [输出列表] 输出列表:一般指用"," 或" ;"分隔的数值或字符串表达式 Wirte 均以紧凑格式写入信息,并自动添加"," Print语句和Write语句的区别在于: Write语句以紧凑的格式存放数据,系统自动在各数据项之间加入“,”,字符串加上双引号。而使用Print语句写入数据时,系统不会自动添加分隔符。
用文件操作语句和函数 1. LOF函数 函数调用格式:LOF(文件号) LOF函数返回被打开文件的大小。 2. LOC函数 函数调用格式:LOC(文件号) LOC函数返回被打开文件的当前读写位置 3. EOF函数 函数调用格式:EOF(文件号) EOF 函数返回被打开文件是否到了文件末尾。返回值为True,表示到达文件末尾;否则返回值为False。
用文件操作语句和函数 4. FreeFile 函数 FreeFile函数的返回值是一个在程序中没有使用的文件号 5. FileAttr 函数 函数调用格式:FileAttr(文件号,属性) FileAttr函数的返回值是所打开文件的相关属性。 当属性取值为1,返回文件存取方式的相关代码。 如input方式打开,返回值为1。 6. Lock 函数与Unlock 函数 函数调用格式: Lock[#]文件号[,记录|[开始] To 结束] ...... Unlock[#]文件号[,记录|[开始] To 结束] Lock函数与Unlock函数用于对文件的锁定和解锁。
真题(2005年4月) 在窗体上画一个名称为Command1的命令按钮和一个名称为Text1的文本框,在文本框中输入以下字符串:Microsoft Visual Basic Programming,然后编写如下事件过程: Private Sub Command1_Click() Open "d:\temp\outf.txt" For Output As #1 For i = 1 To Len(Text1.Text) c = Mid(Text1.Text, i, 1) If c >= "A" And c <= "Z" Then Print #1, LCase(c) End If Next i Close End Sub
真题(2005年4月) 答案:D 程序运行后,单击命令按钮,文件outf.txt中的内容是__ (A)MVBP (B)mvbp (C)M (D)m V v B b P p
7.2 顺序文件 【例7-1】用Windows自带的“记事本”程序创建一个顺序文件data.dat。该文件内包含若干整型数据,各数据间用空格分开。编写一个程序,找出该文件中的最大值、最小值和平均值,并写入该文件。 • 3.顺序文件的读操作 • 格式:Input #文件号, 变量列表 • 功能:从一个顺序文件中读取出一个或多个数据项,并将读出的数据分别赋给指定的变量。
7.2 顺序文件 Private Sub Form_Click() Dim max%, min%, aver!, count%, n%, sum% count = 1: sum = 0 Open “D:\data.dat" For Input As #1 Input #1, max min = max While Not EOF(1) ‘判断被打开的文件是否到了文件末尾 Input #1, n If n > max Then max = n If n < min Then min = n count = count + 1: sum = sum + n Wend Close #1 Open "f:\data.dat" For Append As #1 Print #1, "最大值"; max, "最小值"; min, "平均值"; sum / count Close #1 End Sub 7-1
7.2 顺序文件 3.顺序文件的读操作 • 格式:Line Input #文件号, 字符串变量 功能:从文件中读出一行数据,并将读出的数据赋给指定的字符串变量 说明: ①“文件号”同前,“字符串变量”用来保存读出的字符串。 ② Line Input # 语句一次只能从文件中读出一个字符串,直到遇到回车符(Chr(13))或回车换行符(Chr(13) + Chr(10))为止。回车或回车换行符将被忽略,不会被加到字符串后。 ③Line Input #语句读出的数据通常用Print #语句写入文件。 ④用Line Input #语句对文本文件进行操作比较方便。
7.2 顺序文件 【例7-2】在窗体上分别创建一个文本框对象Text1和一个命令按钮对象Command1,单击命令按钮时,将【例7-1】中的文本文件“d:\7-1\data.dat”的内容一行一行地读入文本框。
Private Sub Command1_Click( ) dim s as string Text1.Text = "" Open "d:\7-1\data.dat " For Input As #1 ‘打开文件 Do While Not EOF(1) ‘文件里的内容未读完时就继续循环 Line Input #1, s Text1.Text = Text1.Text + s + Chr$(13) + Chr$(10) ‘在文本框种显示结果 Loop Close #1 ‘关闭文件 End sub 7.2 顺序文件 7-2
7.2 顺序文件 • 3.顺序文件的读操作 • 格式:Input(读取的字符数, #文件号) 功能:调用该函数可以读取指定数目的字符, 包括逗号、回车符、换行符、引号和前导空格等。 说明:除了用于以Input方式打开的顺序文件外,Input$函数还可用于以 Binary方式打开的二进制文件。 【例7-3】编写一个程序,用Input$ 函数从文件中一次读出一个字符并在窗体上显示出来,直到所有的数据都被读出为止。编写如下事件过程:
7.2 顺序文件 Private Sub Form_Click() Dim OneChar Open "Testdata.dat" For Input As #1 Do While Not EOF(1) OneChar = Input(1, #1) Print OneChar; Loop Close #1 End Sub 7-3
【例7-5】建立一个成绩查询窗体如图7-7所示。 要求在From_Load时打开磁盘文件test42in.txt读取数据,并将读入的学号和姓名分别添加进两个列表框中,同时将三门课程的考试成绩读入三个数组(每个数组可定义为200个元素);并将两个列表框的ListIndex属性置为0。当点击姓名中任意一项,学号的ListIndex应随之改变,同样点击学号中任意一项,姓名的ListIndex应随之改变。点击“查询”则将该学生的三项成绩显示在右边的三个文本框内,同时将平均成绩置空。点击“计算”则将该学生三项成绩的平均值显示出来。点击“退出”则结束程序。 textyy Textsx Textwl List1 List2 Textave Command3 Command1 Command2 【例7-5】程序界面 7-5
记录号n 记录号n+1 … 字段1 字段2 … 字段1 字段2 … 记录n 记录n+1 7.3 随机文件 • 随机文件是由大小相同的记录组成,每个记录中包含记录号和字段。 • 随机文件以记录作单位操作,为了完整地定义记录,需要用户自定义类型。因为所有记录长度相同,所以所有字符串字段必须使用定长字符串类型。 • 对随机文件的读写操作时,给出记录号可以访问文件中与记录号对应的记录。
随机文件的打开与关闭 • 1.随机文件的打开 • 打开随机文件仍然使用Open语句。 • 格式:Open 文件名For Random As #文件号[Len=记录长度] • 功能:以随机文件访问模式打开一个文件,可供读或写操作。 • 注意:记录的长度默认值为128个字节,可以用Len函数返回用户自定义数据类型的长度。 • 2.随机文件的关闭 • 格式:Close [#文件号][,#文件号]……. • 随机文件的关闭与顺序文件相同。
随机文件的读写操作 • 读操作 • 格式:Get #文件号,[记录号],变量 • 功能:从文件中读取指定记录,并存入相应变量中。 • 说明: • ①“文件号”是必须的; • ②“记录号”可选,其取值范围为1~231-1,记录号所指示的是需要读出的记录的编号,如果省略了记录号,则读取下一个记录,值得注意的是即使省略记录号,其后的逗号也不能省略; • ③“变量名”用来将读出的数据放入其中。
随机文件的读写操作 • 写操作 • 格式:Put # 文件号,[记录号],变量名 • 功能:将一个记录变量的内容写到指定的记录位置处。 • 忽略记录号,则表示在当前记录后的位置插入一条记录。变量要与记录类型一致。
随机文件的读写操作 建立一个随机文件TeacherInfo.dat存取学校教师信息。每个教师的记录包括姓名、年龄、学院和职称。 Private Type Teacher name As String * 10 age As Integer college As String * 16 title As String * 10 End Type ‘ 每条记录总长度为38个字节 Random
随机文件的读写操作 Private TeaRec As Teacher Private Sub Command1_Click() Open app.path+“\teaInfor.dat" For Random As #1 Len = Len(TeaRec) n = LOF(1) / Len(TeaRec) With TeaRec .name = Text1(0).Text .age = Val(Text1(1).Text) .college = Text1(2).Text .title = Text1(3).Text End With Put #1, n + 1, TeaRec Close #1 End Sub
随机文件的读写操作 Private Sub Command2_Click() Open "f:\teaInfor.dat" For Random As #1 Len = Len(TeaRec) n = LOF(1) / Len(TeaRec) For i = 1 To n Get #1, i, TeaRec With TeaRec strs = Format(.name, "@@@@@@@@") _ & Format(.age, "@@@@@") _ & Format(.college, "@@@@@@@@@@") _ & Format(.title, "@@@@@@@@@") End With List1.AddItem strs Next i Close #1 End Sub
二进制文件的操作 • 打开 • Open "文件名" For Binary As #文件号 • 写操作 • Put #文件号, [位置], 变量名 • 读操作 • Get #文件号, [位置], 变量名 二进制文件是含有编码信息的文件,编码信息需由创建此文件的应用程序解释,二进制文件只能由创建它的应用程序编辑,一般的文本编辑软件无法打开并处理。二进制存取可以获取任何一个文件的原始字节,任何类型的文件都可以用二进制访问的方式打开。 二进制文件中的内容以字节存取。二进制文件打开后,读和写操作可同时进行。因此,二进制访问能提供对文件的完全控制。 7-7
7.2 文件控件 在程序设计中,为了方便用户操作,许多应用程序需要显示关于磁盘驱动器、目录和文件的信息。为使用户能够在应用程序运行的过程中使用文件系统,VB6.0提供了两种选择: ①可以使用由CommonDialog控件提供的标准对话框(如打开,另存为等); ②三种文件系统控件:驱动器列表框、目录列表框、文件列表框。 DriverListBox DirListBox FileListBox
Sub drvDrive_Change( ) dirDirectory.Path = drvDrive.Drive End Sub Sub dirDirectory_Change( ) filFile.Path = dirDirectory.Path End Sub 例:文件系统控件的同步操作 当驱动器列表框的驱动器名被改变时,目录列表框的当前目录要随之改变; 随着目录列表框的当前目录改变, 文件列表框里所显示的文件也应同时改变。这种情况称被称为同步操作。
【例7-8】编写一个图片浏览器。使用一个驱动器列表框、一个目录列表框一个文件列表框、一个组合框和一个图像框。【例7-8】编写一个图片浏览器。使用一个驱动器列表框、一个目录列表框一个文件列表框、一个组合框和一个图像框。 Image Name:Image1 DriveListBox Name:Drive1 ComboBox Name:Combo1 DirListBox Name: Dir1 FileListBox Name: File1
【例7-8】编写一个图片浏览器。使用一个驱动器列表框、一个目录列表框一个文件列表框、一个组合框和一个图像框。【例7-8】编写一个图片浏览器。使用一个驱动器列表框、一个目录列表框一个文件列表框、一个组合框和一个图像框。 Private Sub Dir1_Change() File1.Path = Dir1.Path End Sub Private Sub Drive1_Change() Dir1.Path = Drive1.Drive End Sub Private Sub File1_Click() If Right(Dir1.Path, 1) <> "\" Then Image1.Picture = LoadPicture(File1.Path + “\” + File1.FileName)’Picture属性设置控件中要显示的图片。 ’通过LoadPicture函数设置 Else Image1.Picture = LoadPicture (File1.Path + File1.FileName) End If End Sub
Thank You ! www.themegallery.com