1 / 43

第七章 文件

第七章 文件. 第七章 文件. 7.1 文件的基本概念 7.2 顺序文件 7.3 随机文件 7.4 二进制文件 7.5 文件操作语句和函数 7.6 文件控件. 记录. 字段. 字段. 字段. 字段. 字段. 字段. 7.1 文件的基本概念. VB 的文件结构 字符 ( Character ) —— 构成文件的最基本单位。 字段 ( Field ) —— 由若干字符组成的一项数据。 记录 ( Record ) —— 由若干个相互关联的字段 ( 数据项 ) 组成。.

altessa
Download Presentation

第七章 文件

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第七章 文件

  2. 第七章 文件 7.1 文件的基本概念 7.2 顺序文件 7.3 随机文件 7.4 二进制文件 7.5 文件操作语句和函数 7.6 文件控件

  3. 记录 字段 字段 字段 字段 字段 字段 7.1 文件的基本概念 • VB的文件结构 字符(Character)——构成文件的最基本单位。 字段(Field)——由若干字符组成的一项数据。 记录(Record)——由若干个相互关联的字段(数据项)组成。 文件指存储在外部介质上数据的集合。为了有效地存取数据,数据必须以某种特定的方式存储,这种特定的方式称为文件结构。 例如:由学生的学习成绩信息组成的记录: 文件(File)——若干个记录的集合。

  4. 7.1 文件的基本概念 • VB文件种类 • 根据文件存储数据的性质分类:程序文件和数据文件 • 程序文件:可由计算机执行 • 数据文件:存储普通数据,通过程序来存取和管理

  5. 7.1 文件的基本概念 • VB文件种类 • 根据文件的存取方式和结构分类:顺序文件 和 随机文件 • 顺序文件: • 一行一条记录,记录可长可短 ; • 顺序文件中的记录按顺序一个接一个存储 • 对顺序文件进行读写操作时,总是从文件头开始,顺序读写。

  6. 7.1 文件的基本概念 • 随机文件(直接存取文件) 随机文件是由大小相同的记录组成,每个记录中包含记录号和字段。 对随机文件的读写操作时,给出记录号可以访问文件中与记录号对应的记录。 记录号n 记录号n+1 记录n 记录n+1

  7. 7.1 文件的基本概念 • VB文件种类 • 根据文件中数据的编码方式分类:ASCII文件和二进制文件 • ASCII文件:又称文本文件,它是以ASCII码的方式进行存储的,这种文件可以用字处理软件建立或修改。 • 二进制文件:二进制文件中的数据均以二进制方式存储,其存取单位是字节,二进制文件不能用一般的字处理软件进行编辑。

  8. 7.1 文件的基本概念 • 文件的基本操作 打开 或创建 关闭 读/写 文件的读操作是指把文件中的数据传送到内存的操作; 文件写操作是指把内存中的数据存入磁盘文件的操作; 文件打开后都有相应的文件号与之相关,可以看作文件的代表。 将数据写入文件,并释放相关资源。

  9. 1M

  10. 格式:Open 文件名 For 打开方式 As [#] 文件号 为文件的输入、输出分配缓冲区,并将文件号与一个文件名连接起来。 7.2 顺序文件 1. 顺序文件的打开 • 文件名可以是字符串常量,也可以是字符串变量 字符串常量 "c:\VB\Test.txt" 字符串变量 str ="c:\VB\Test.txt" • 文件号是介于1~511之间的整数

  11. 7.2 顺序文件 • 打开方式 • Output:对文件进行写操作 • Append:在文件末尾追加记录 • Input:对文件进行读操作 除Input外,其余打开模式都可对不存在的文件先新建再打开 Open "Test.txt" For Input As #1 Open App.Path + "\Test.txt" For Input As #1 注:App.path:用来返回当前路径

  12. 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

  13. 分区格式输出 紧凑输出 省略#会怎么样呢? 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格式

  14. 顺序文件 例:随机产生一个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矩阵

  15. 7.2 顺序文件 顺序文件的追加操作 • 这种操作适合把写入的数据附加到文件末尾的情况 Open 文件名 For Append As [#] 文件号 例 续前例,再随机生成一个二维数组, 把该数组各元素的值追加到test.txt的后面。 Open “d:\test.txt" For Append As #1

  16. 7.2 顺序文件 Write #1, "One", "Two", 123 Print #1, "One", "Two", 123 3.顺序文件的写操作——Write # 语句 格式:Wirte #文件号, [输出列表] 输出列表:一般指用"," 或" ;"分隔的数值或字符串表达式 Wirte 均以紧凑格式写入信息,并自动添加"," Print语句和Write语句的区别在于: Write语句以紧凑的格式存放数据,系统自动在各数据项之间加入“,”,字符串加上双引号。而使用Print语句写入数据时,系统不会自动添加分隔符。

  17. 用文件操作语句和函数 1. LOF函数 函数调用格式:LOF(文件号) LOF函数返回被打开文件的大小。 2. LOC函数 函数调用格式:LOC(文件号) LOC函数返回被打开文件的当前读写位置 3. EOF函数 函数调用格式:EOF(文件号) EOF 函数返回被打开文件是否到了文件末尾。返回值为True,表示到达文件末尾;否则返回值为False。

  18. 用文件操作语句和函数 4. FreeFile 函数 FreeFile函数的返回值是一个在程序中没有使用的文件号 5. FileAttr 函数 函数调用格式:FileAttr(文件号,属性) FileAttr函数的返回值是所打开文件的相关属性。 当属性取值为1,返回文件存取方式的相关代码。 如input方式打开,返回值为1。 6. Lock 函数与Unlock 函数 函数调用格式: Lock[#]文件号[,记录|[开始] To 结束] ...... Unlock[#]文件号[,记录|[开始] To 结束] Lock函数与Unlock函数用于对文件的锁定和解锁。

  19. 真题(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

  20. 真题(2005年4月) 答案:D 程序运行后,单击命令按钮,文件outf.txt中的内容是__ (A)MVBP (B)mvbp (C)M (D)m V v B b P p

  21. 7.2 顺序文件 【例7-1】用Windows自带的“记事本”程序创建一个顺序文件data.dat。该文件内包含若干整型数据,各数据间用空格分开。编写一个程序,找出该文件中的最大值、最小值和平均值,并写入该文件。 • 3.顺序文件的读操作 • 格式:Input #文件号, 变量列表 • 功能:从一个顺序文件中读取出一个或多个数据项,并将读出的数据分别赋给指定的变量。

  22. 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

  23. 7.2 顺序文件 3.顺序文件的读操作 • 格式:Line Input #文件号, 字符串变量 功能:从文件中读出一行数据,并将读出的数据赋给指定的字符串变量 说明: ①“文件号”同前,“字符串变量”用来保存读出的字符串。 ② Line Input # 语句一次只能从文件中读出一个字符串,直到遇到回车符(Chr(13))或回车换行符(Chr(13) + Chr(10))为止。回车或回车换行符将被忽略,不会被加到字符串后。 ③Line Input #语句读出的数据通常用Print #语句写入文件。 ④用Line Input #语句对文本文件进行操作比较方便。

  24. 7.2 顺序文件 【例7-2】在窗体上分别创建一个文本框对象Text1和一个命令按钮对象Command1,单击命令按钮时,将【例7-1】中的文本文件“d:\7-1\data.dat”的内容一行一行地读入文本框。

  25. 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

  26. 7.2 顺序文件 • 3.顺序文件的读操作 • 格式:Input(读取的字符数, #文件号) 功能:调用该函数可以读取指定数目的字符, 包括逗号、回车符、换行符、引号和前导空格等。 说明:除了用于以Input方式打开的顺序文件外,Input$函数还可用于以 Binary方式打开的二进制文件。 【例7-3】编写一个程序,用Input$ 函数从文件中一次读出一个字符并在窗体上显示出来,直到所有的数据都被读出为止。编写如下事件过程:

  27. 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

  28. 【例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

  29. 记录号n 记录号n+1 … 字段1 字段2 … 字段1 字段2 … 记录n 记录n+1 7.3 随机文件 • 随机文件是由大小相同的记录组成,每个记录中包含记录号和字段。 • 随机文件以记录作单位操作,为了完整地定义记录,需要用户自定义类型。因为所有记录长度相同,所以所有字符串字段必须使用定长字符串类型。 • 对随机文件的读写操作时,给出记录号可以访问文件中与记录号对应的记录。

  30. 随机文件的打开与关闭 • 1.随机文件的打开 • 打开随机文件仍然使用Open语句。 • 格式:Open 文件名For Random As #文件号[Len=记录长度] • 功能:以随机文件访问模式打开一个文件,可供读或写操作。 • 注意:记录的长度默认值为128个字节,可以用Len函数返回用户自定义数据类型的长度。 • 2.随机文件的关闭 • 格式:Close [#文件号][,#文件号]……. • 随机文件的关闭与顺序文件相同。

  31. 随机文件的读写操作 • 读操作 • 格式:Get #文件号,[记录号],变量 • 功能:从文件中读取指定记录,并存入相应变量中。 • 说明: • ①“文件号”是必须的; • ②“记录号”可选,其取值范围为1~231-1,记录号所指示的是需要读出的记录的编号,如果省略了记录号,则读取下一个记录,值得注意的是即使省略记录号,其后的逗号也不能省略; • ③“变量名”用来将读出的数据放入其中。

  32. 随机文件的读写操作 • 写操作 • 格式:Put # 文件号,[记录号],变量名 • 功能:将一个记录变量的内容写到指定的记录位置处。 • 忽略记录号,则表示在当前记录后的位置插入一条记录。变量要与记录类型一致。

  33. 随机文件的读写操作 建立一个随机文件TeacherInfo.dat存取学校教师信息。每个教师的记录包括姓名、年龄、学院和职称。 Private Type Teacher name As String * 10 age As Integer college As String * 16 title As String * 10 End Type ‘ 每条记录总长度为38个字节 Random

  34. 随机文件的读写操作 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

  35. 随机文件的读写操作 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

  36. 二进制文件的操作 • 打开 • Open "文件名" For Binary As #文件号 • 写操作 • Put #文件号, [位置], 变量名 • 读操作 • Get #文件号, [位置], 变量名 二进制文件是含有编码信息的文件,编码信息需由创建此文件的应用程序解释,二进制文件只能由创建它的应用程序编辑,一般的文本编辑软件无法打开并处理。二进制存取可以获取任何一个文件的原始字节,任何类型的文件都可以用二进制访问的方式打开。 二进制文件中的内容以字节存取。二进制文件打开后,读和写操作可同时进行。因此,二进制访问能提供对文件的完全控制。 7-7

  37. 7.2 文件控件 在程序设计中,为了方便用户操作,许多应用程序需要显示关于磁盘驱动器、目录和文件的信息。为使用户能够在应用程序运行的过程中使用文件系统,VB6.0提供了两种选择: ①可以使用由CommonDialog控件提供的标准对话框(如打开,另存为等); ②三种文件系统控件:驱动器列表框、目录列表框、文件列表框。 DriverListBox DirListBox FileListBox

  38. 常见属性

  39. 常见事件

  40. Sub drvDrive_Change( ) dirDirectory.Path = drvDrive.Drive End Sub Sub dirDirectory_Change( ) filFile.Path = dirDirectory.Path End Sub 例:文件系统控件的同步操作 当驱动器列表框的驱动器名被改变时,目录列表框的当前目录要随之改变; 随着目录列表框的当前目录改变, 文件列表框里所显示的文件也应同时改变。这种情况称被称为同步操作。

  41. 【例7-8】编写一个图片浏览器。使用一个驱动器列表框、一个目录列表框一个文件列表框、一个组合框和一个图像框。【例7-8】编写一个图片浏览器。使用一个驱动器列表框、一个目录列表框一个文件列表框、一个组合框和一个图像框。 Image Name:Image1 DriveListBox Name:Drive1 ComboBox Name:Combo1 DirListBox Name: Dir1 FileListBox Name: File1

  42. 【例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

  43. Thank You ! www.themegallery.com

More Related