第 7 章 文 件

52
江江江江江江江江江江 Visual Basic 程程程程 江 7 江

Upload: zlhna

Post on 08-Jan-2016

67 views

Category:

Documents


7 download

DESCRIPTION

第 7 章 文 件. 教学要求. 掌握文件管理控件的主要属性、事件和方法 ★ 掌握文件的基本概念 掌握文件的常用函数、语句 掌握 顺序文件的读、写操作 ★ 了解随机(记录)文件 了解二进制文件. 教学内容. 7.1 文件管理控件 7.2 文件处理 7.3 顺序文件 7.4 随机文件处理. 7.1 文件管理控件 VB 提供了驱动器列表框、目录列表框和文件列表框三个特殊的控件,将他们组合起来使用,可以创建与文件操作有关的界面。. 驱动器列表框 DriveListBox. 目录列表框 DirListBox. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第  7  章  文  件

江苏省计算机等级考试

Visual Basic 程序设计

第 7 章 文 件第 7 章 文 件

Page 2: 第  7  章  文  件

2 江苏计算机等级考试

Visual Basic 程序设计

掌握文件管理控件的主要属性、事件和方法★ 掌握文件的基本概念 掌握文件的常用函数、语句

掌握 顺序文件的读、写操作★ 了解随机(记录)文件 了解二进制文件

教学要求

Page 3: 第  7  章  文  件

3 江苏计算机等级考试

Visual Basic 程序设计

7.1 文件管理控件 7.2 文件处理 7.3 顺序文件 7.4 随机文件处理

教学内容

Page 4: 第  7  章  文  件

4 江苏计算机等级考试

Visual Basic 程序设计7.1 文件管理控件

VB 提供了驱动器列表框、目录列表框和文件列表框三个特殊的控件,将他们组合起来使用,可以创建与文件操作有关的界面。

驱动器列表框DriveListBox

目录列表框DirListBox

文件列表框FileListBox

Page 5: 第  7  章  文  件

5 江苏计算机等级考试

Visual Basic 程序设计7.1.1 驱动器列表框( DriveListBox )

[ 功能 ]: 一个下拉式列表框,显示当前系统的所有驱动器列表,顶端显示的是当前选定的驱动器。

[常用属性 ]: Name: 名称属性,缺省时该属性值为 Drive1; Drive: 当前驱动器属性,该属性为运行态属性;可以用于返回在驱动器列表框中当前选取的驱动器号,也可用于指定在驱动器列表框顶端显示的驱动器;[常用事件 ]: Change: 当用户在驱动器列表框中选择一个驱动器,或在列表框顶端输入一个驱动器标识,或通过赋值语句修改了驱动器列表框的Drive 属性都会激活该事件。 一般在此事件中,用 drive 属性更新目录列表框的 path 属性,保持驱动器列表框和目录列表框的同步变化。

Page 6: 第  7  章  文  件

6 江苏计算机等级考试

Visual Basic 程序设计[ 常用语句 ]:

格式: ChDrive Drive 功能:改变当前工作驱动器—— 对文件进行存取操作时的缺省驱动器。

说明: Drive 参数是字符型,必须为系统有效的驱动器名。

[ 例如 ] : ChDrive “D:”

注意:该语句的执行与驱动器列表框无关,既不会改变列表框的drive 属性,列表框顶端的显示,也不会引发驱动器列表框的 Change 事件。

同样,在驱动器列表框中选定某驱动器,并不能直接将其变更为当前工作驱动器,必须使用如下语句:

ChDrive drive1.drive

Page 7: 第  7  章  文  件

7 江苏计算机等级考试

Visual Basic 程序设计7.1.2 目录列表框 ( DirListBox )

[ 功能 ]:显示系统当前驱动器的目录结构,并突出显示当前目录。显示从根目录开始,到当前目录这条路径上的所有目录,以及当前目录的下属所有第一级子目录。

[目录索引 ]:

当前突出显示的目录,索引值为 -1,紧邻其上的目录为 -2,再上一层为 -3,依次类推;而当前工作目录的第一个子目录的索引值为 0,其他子目录的索引值顺次递增。

-4

-3

-2

-1

0

1

Page 8: 第  7  章  文  件

8 江苏计算机等级考试

Visual Basic 程序设计[ 常用属性 ]:

Name: 名称属性,缺省时为 Dir1;

Path: 设置和返回目录列表框中的当前目录,为运行态属性;可以通过如下两种方式设置:一是赋值语句;二是双击目录列表框中某项。

注意:一般目录列表框中显示当前驱动器上的目录,即目录列表框与驱动器列表框必须同步,必须使用如下语句:

< 目录列表框 >.path=< 驱动器列表框 >.drive

此语句通常在驱动器列表框的 Change 事件中执行。

例如:Private Sub Drive1_change()

Dir1.path=Drive1.drive

End Sub

Page 9: 第  7  章  文  件

9 江苏计算机等级考试

Visual Basic 程序设计[ 常用事件 ]

Change: 当用户双击目录列表框中的目录项,或通过赋值语句改变了目录列表框的 Path 属性,都会引发该事件。 一般在此事件中,用 path 属性更新文件列表框的 path 属性,保持文件列表框和目录列表框的同步变化。[常用语句 ]:格式: ChDir Path功能:改变系统当前工作目录。说明:( 1) ChDir 语句改变的是当前驱动器(或指定驱动器)的工作目录,而不能改变工作驱动器;( 2)该语句与目录列表框无关,即不会改变目录列表框的当前目录,也不会触发 Change 事件。 同样,在目录列表框中选定某目录,并不能将其变更为当前工作目录,必须使用如下语句: ChDir dir1.Path

Page 10: 第  7  章  文  件

10 江苏计算机等级考试

Visual Basic 程序设计7.1.3 文件列表框 ( FileListBox )

[ 功能 ]:显示系统当前目录下的文件列表。[常用属性 ] :

•Name :名称属性,缺省时为 File1 ;• Path :设置和返回文件列表中所显示文件的路径,为运行态属性注意:一般文件列表框中显示当前目录之中的文件,即文件列表框与目录列表框必须同步,必须使用如下语句: < 文件列表框 >.path=< 目录列表框 >.path 此语句通常在目录列表框的 Change 事件中执行。例如: Private Sub

dir1_change()

file11.path=dir1.path

End Sub

Page 11: 第  7  章  文  件

11 江苏计算机等级考试

Visual Basic 程序设计

Pattern: 文件种类,设置文件列表框显示文件的种类 , 缺省为 *.*

例: File1.Pattern=“*.txt ; *.frm”

• FileName: 设置和返回文件列表框中将显示的文件名称,为运行态属性; 例: File1.fileName=“d:\*.frm”

•ListCount: 返回文件 ( 组合框、驱动器、目录 ) 列表框中的所列项目的总数,为运行态属性;• ListIndex: 设置或返回当前控件上所选择项目的“索引值”,为运行态属性,列表框中的第一项为 0 ,第二项为 1 ,依次类推,若文件列表框中一项也没有选定,则返回 -1 ; dir1.listindex = -2

drive1.listindex = 2

Page 12: 第  7  章  文  件

12 江苏计算机等级考试

Visual Basic 程序设计[ 常用事件 ]

PathChange: Path 属性改变时引发该事件;

注意:在程序中,给文件列表框的 Filename 属性赋值,也会自动改变它的 Path 属性,触发本事件。

    file1.filename=“c:\config.sys”

PatternChange: Pattern 属性改变时引发该事件; Click:单击事件。

Page 13: 第  7  章  文  件

13 江苏计算机等级考试

Visual Basic 程序设计[ 文件属性 ] :——指定在文件列表框中显示某类属性的文件

ReadOnly:只读属性,缺省值 True ; Hidden:隐含属性,缺省值 False ; System: 系统属性,缺省值 False;

Archive: 存档属性,缺省值 True ; Normal: 通常属性,缺省值 True;

说明:当 Normal 属性为 True 时, System 、 Hidden 文件不显示;当 Normal 属性为 False 时 , 文件类型置为 True 的可显示。

file1.normal=false

file1.system=true

Page 14: 第  7  章  文  件

14 江苏计算机等级考试

Visual Basic 程序设计7.1.4 组合使用文件管理控件

  为使文件管理控件协调工作,关键点是使驱动器、目录、文件列表框同步,通过下述两个事件过程实现:

——保证目录列表框与驱动器列表框同步更新。

——保证文件列表框与目录列表框同步更新。

来看个例子吧[例7- 2]。

Private Sub drive1_change()

dir1.path=drive1.drive

End SubPrivate Sub dir1_change()

file11.path=dir1. path

End Sub

Page 15: 第  7  章  文  件

例:文件控件的组合使用。Private Sub Drive1_Change() Dir1.Path = Drive1.DriveEnd Sub Private Sub Dir1_Change()

File1.Path = Dir1.Path File1.Pattern = "*.wmf"

End SubPrivate Sub File1_Click() Dim name As String

If Right(File1.Path, 1) <> "\" Then name = File1.Path & "\" & File1.FileName Else name = File1.Path & File1.FileName End If Picture1.Picture = LoadPicture( name )

End Sub

P134

Page 16: 第  7  章  文  件

16 江苏计算机等级考试

Visual Basic 程序设计7 .2 文件处理

文件: 所谓文件,是一组相关信息的集合,是存放在磁盘上一系列相关的字节 .

文件访问类型: 顺序访问:从文件头开始,依次访问其中数据,适用于

文本文件; 随机访问:适用于以记录形式保存的二进制文件,可以

存取任意指定位置的记录; 二进制访问:适用于任意二进制文件 , 以字节为单位

存取数据。

Page 17: 第  7  章  文  件

17 江苏计算机等级考试

Visual Basic 程序设计

文件操作的一般步骤:首先将文件“打开”,即将相关信息加载进内存,建立文件与内存中某个文件缓冲区的关联;文件“存/取”操作;最后“关闭”文件,即释放文件所占用的文件缓冲区。

Page 18: 第  7  章  文  件

18 江苏计算机等级考试

Visual Basic 程序设计7.2.2 文件访问的语句和函数 P136 表 7-2

语句和函数 顺序型 随机型 二进制型Cl ose

Get

I nPut()

I nPut #

Li ne I nput #

Open

Pri nt #

Put

Type……End Type

Wri te

Page 19: 第  7  章  文  件

19 江苏计算机等级考试

Visual Basic 程序设计1.打开文件 —— Open 语句

对文件进行操作之前,必须用 Open 语句打开或建立一个文件[功能 ]: 为文件的输入输出分配缓冲区,指定文件的存取类型 (模式 )

和存取方式,定义与文件相关联的文件号。[格式 ]: Open 文件名 [FOR 模式 ] [Access 存取类型 ] [ 锁定 ] AS [#] 文

件号 [Len= 记录长度 ][ 说明 ]:

1) 格式中的 Open 、 FOR 、 Access 、 AS 、 Len 为关键字2) 文件名 (Filename) : 文件的名字,可用字符串或字符型变量表示。

可以包括盘符和路径。3 ) 模式 (mode) :

Page 20: 第  7  章  文  件

20 江苏计算机等级考试

Visual Basic 程序设计说明访问文件的方式:

OutPut 设定为顺序输出模式InPut 设定为顺序输入模式Append 设定为添加模式,与 OutPut 方式不同,

以 Append 方式打开顺序文件时,文件指针定位在文件末尾,写入的数据添加到原来文件的后面。

Random 设定为随机访问的模式Binary 设定为二进制访问模式

如果缺省 FOR子句,将以随机访问模式 Random 打开文件。

Page 21: 第  7  章  文  件

21 江苏计算机等级考试

Visual Basic 程序设计

程序

磁盘文件输入

数据

磁盘文件输出

数据

读文件方式 :Input

写文件方式 :OutputAppend

Page 22: 第  7  章  文  件

22 江苏计算机等级考试

Visual Basic 程序设计

4) 存取类型 (Access) 用来指定访问文件的类型。可以是:

Read 对打开的文件只能进行读操作Write 对打开的文件只能进行写操作Read Write对打开的文件可读可写

5) 文件号 (Fileno) 取值范围在 1~ 511范围之内。执行 Open 语句时,文件与分配给定的文件号相关联。

6) 记录长度 (Reclength)是一个整型表达式,其值≤ 32767 。对顺序文件,用该参数设定缓冲区的大小。不指定,缓冲区的缺省值为 512 个字节。

Page 23: 第  7  章  文  件

23 江苏计算机等级考试

Visual Basic 程序设计注意:

1) 如果以 Output 、 Append 、 Random和 Binary 模式打开一个不存在的文件, Visual Basic会创建一个相应的文件。 2) 在 Input 、 Random和 Binary 模式下,可用不同的文件号打开同一个文件。但以 Output 和 Append模式打开的文件在关闭之前不能用不同的文件号重复地打开它。 3) 所有当前使用的文件号必须是唯一的。即当前使用的文件号不能再分配给其他文件。 4) 如果以 Output模式打开一个已存在的顺序文件,则该文件中原来数据将被覆盖。

Page 24: 第  7  章  文  件

24 江苏计算机等级考试

Visual Basic 程序设计

1) Open "Exam" FOR Output AS #5

如果文件“ Exam”不存在,则建立一个新文件,可以将数据写入到文件中去。如果文件“ Exam”已存在,则该语句打开已存在的文件,新写入的数据将覆盖原来的数据。

2) Open "Exam" FOR Append AS #5

如果文件“ Exam”不存在,则建立一个新文件,否则打开已存在的名为“ Exam”的文件,新写入的数据添加到文件的后面,原来的数据仍然存在。3) Open "Exam" FOR Input AS #5

打开已存在的名为 Exam的文件,可从中读出数据。如果文件“Exam”不存在将产生“ File Not Found”错误。

P138举 例

Page 25: 第  7  章  文  件

25 江苏计算机等级考试

Visual Basic 程序设计2 、关闭文件

[ 格式 ]: Close [[#]< 文件号 >][ 功能 ] :关闭指定的文件号对应的文件。 释放相应缓冲区和与该文件相联系的文件号。[说明 ]:( 1)该语句适用于任何文件;( 2)语句中可以包含多个文件号 ,文件号之间用逗号分隔( 3)若语句中缺省文件号参数,则关闭所有用 Open 语句打开的文件;( 4)当应用程序结束时,会自动关闭所有文件。

例 1: Close #1,#2例 2: Close

Page 26: 第  7  章  文  件

26 江苏计算机等级考试

Visual Basic 程序设计3 、关闭所有文件—— Reset 语句

[格式 ]:Reset

[ 功能 ]:关闭所有用 Open 语句打开的文件。

[说明 ]:适用于任何文件。

Page 27: 第  7  章  文  件

28 江苏计算机等级考试

Visual Basic 程序设计相关函数和语句

Eof(文件号) ★当文件指针到达文件结束标志时返回 True ,否则返回 False 。

FreeFile[( 文件号范围) ] ★返回 Open 语句可以使用的下一个有效文件号

LOF( 文件号) ★返回已用 Open 语句打开的文件的字节数(文件长度)

P140

Page 28: 第  7  章  文  件

29 江苏计算机等级考试

Visual Basic 程序设计7.3 顺序文件

以顺序方式存取的文件称为顺序文件,一般是文本文件;特性: 每行数据长度可以不同; 增加数据时,只能添加到原有数据的最后; 查找数据时,必须从头开始顺序查找。适用: 每行数据长度不确定时; 数据不经常做新增、修改和删除操作时; 处理数据是依次连续处理。

Page 29: 第  7  章  文  件

30 江苏计算机等级考试

Visual Basic 程序设计7.3.1 顺序文件的写操作

1 、打开文件[ 格式 ] : Open < 文件名 > For <Output/Append> As [#] < 文件号>

[ 功能 ] :用指定的文件号以顺序输出模式或添加模式打开文件。[ 说明 ] :( 1 )文件名可以是字符串,包含路径;( 2 )若指定的文件不存在,系统将创建一个相应的文件;( 3 )以 Output 方式打开文件,文件中原有的数据被覆盖;( 4 )以 Append 方式打开文件,写入的数据将添加到原文件的尾部( 5 )文件号的使用必须是唯一的,即当前已经占用的文件号不能再分配给其他文件使用;文件号的使用范围是 1-511 ;( 6 )一个文件在用 Output 和 Append 方式打开后,不能再重复打开

Page 30: 第  7  章  文  件

31 江苏计算机等级考试

Visual Basic 程序设计

例 1 : Open “D:\hb\Test.txt” For Output as #1

例 2 : Dim sFileName As String

sFileName=“D:\hb\Test.txt”

Open sFileName For Append As #100

例 3 : Open “File1” For OutPut As #9

Open “File2” For Output As #9

例 4 : Open “File1” For Append As #10

   Open “File1” For Append As #11

例 1 : Open “D:\hb\Test.txt” For Output as #1

例 2 : Dim sFileName As String

sFileName=“D:\hb\Test.txt”

Open sFileName For Append As #100

例 3 : Open “File1” For OutPut As #9

Open “File2” For Output As #9

例 4 : Open “File1” For Append As #10

   Open “File1” For Append As #11

以相同的文件号打开两个不同的文件

以相同的文件号打开两个不同的文件

在文件未关闭前又重复打开

在文件未关闭前又重复打开

错误在哪里?

Page 31: 第  7  章  文  件

32 江苏计算机等级考试

Visual Basic 程序设计2、 Print #语句

[ 格式 ] : Print <# 文件号 > , [< 输出列表 >]

[ 功能 ] :将输出列表中的语句写到顺序文件中。

[ 说明 ] :该语句和普通的 Print 语句的输出控制格式完全相同,也分紧凑和标准两种。

执行上述程序后,文件 test.dat 中的数据如下

Open “test.dat” for output as #10

print #10, 1 , 2 , 3

print #10,”We”,”study”,”VB6.0”

Close 10

例 1 :

1 2 3

We study VB6.0

Page 32: 第  7  章  文  件

33 江苏计算机等级考试

Visual Basic 程序设计

提示:

为了避免以紧凑格式输出的各字符串难以明显区分,可以人为加上逗号间隔:

例如: print #10,”We” ;” ,” ; ”study” ;” ,”; ”VB6.0”

上述语句的执行结果为: We ,study ,VB6.0

Open “test.dat” for output as #10

Print #10 , 1 ; 2 ; 3

Print #10 , ”We” ;” study” ;” VB6.0”

Close 10

1 2 3

WestudyVB6.0

例 2 :

执行上述程序后,文件test.dat 中的数据如下:

Page 33: 第  7  章  文  件

34 江苏计算机等级考试

Visual Basic 程序设计Private Sub Command1_Click()

Dim i As Integer, a(10) As Integer Open "d:\test.txt" For Output As #1 For i = 1 To 10 a(i) = Int(Rnd * 100) + 100 Print a(i); Print #1, a(i); Next i Print Print #1, Close #1End Sub

Page 34: 第  7  章  文  件

35 江苏计算机等级考试

Visual Basic 程序设计3 Write 语句

[ 格式 ] : Write <# 文件号 >,[< 输出列表 >]

[ 功能 ] :将输出列表中的语句写到顺序文件中。[ 说明 ] : Write 语句和 Print 语句的功能基本相同,它们之间的差别主要在:( 1 ) Write 语句写入的数据按照紧凑格式存放,各数据项之间自动插入逗号作为分隔符;( 2 ) Write 语句写入的字符串数据自动加上双引号作为限界符。

OPEN “TEST.DAT” for output as # 12

Write #12 ,1 ,-2 ,3 ,”ABC”

Write #12

Write #12, 5,6,7,”DEF”,

Write #12

Close #12

例:

1,-2,3,”ABC”

5,6,7,”DEF”

上述程序执行后, TEST.DAT 文件中的数据为:

Page 35: 第  7  章  文  件

36 江苏计算机等级考试

Visual Basic 程序设计Private Sub Command2_Click()

Dim i As Integer, a(10) As Integer Open "d:\test.txt" For Output As #1 For i = 1 To 10 a(i) = Int(Rnd * 100) + 100 Print a(i); Write #1, a(i), Next i Print Write #1, Close #1End Sub

Page 36: 第  7  章  文  件

37 江苏计算机等级考试

Visual Basic 程序设计7.3.2 顺序文件的读操作

当一个文件存在时,可以对它进行读操作。读操作分为两种,一种是一个数据一个数据地读,另一种是一行数据一行数据地读。

1 、打开文件[ 格式 ] : Open < 文件名 > For Input As <# 文件号 >

[ 功能 ] :用指定的文件号以顺序输入模式打开文件。[ 说明 ] :以 Input 方式打开的文件,只能进行读操作。

Page 37: 第  7  章  文  件

38 江苏计算机等级考试

Visual Basic 程序设计2 、 Input 语句

[ 格式 ] : Input <# 文件号 > [, 变量表 ]

[ 功能 ] :从一个打开的顺序文件中读取数据,并将它们赋值给相应的变量。[说明 ]:( 1)变量表可以包含简单变量和数组元素,变量之间用逗号间隔,变量类型必须与文件中的数据项的类型一致;( 2)从顺序文件中读数据时,要从头开始,依次读出,若数据类型和变量类型不一致,则赋一个初值给对应的变量;( 3)从顺序文件读数据时,忽略前导空格、回车符、换行符;( 4)读取数值型数据时,以其后的第一个空格或逗号或回车换行符作为结束;( 5)读取字符型数据时,以第一个不在双引号里的逗号或回车换行符作为结束;( 6)逻辑型和日期型数据以 #号作为起始符和结束符 ,要求大写;

Page 38: 第  7  章  文  件

39 江苏计算机等级考试

Visual Basic 程序设计

Test.txt 中数据: 34 45 78 789

Dim A As Integer,B AS Integer,C As Integer

Dim St As String

Input #2 ,A,B,C,St A=34,B=45,C=78,St=“789”

举 例

Page 39: 第  7  章  文  件

40 江苏计算机等级考试

Visual Basic 程序设计 例:文件 test.dat 中数据如下:

This is File Test.dat,-2365,4893,#True# 要求按下面的格式输出在窗体上: This is File Test.dat -2365 4893 True

Private sub form_click() Dim x as integer,y a integer,logic as boolean Dim filenumber as integer , chr as string Filenumber=freefile Open “Test.dat” for input as #filenumber Input #filenumber.chr Input #filenumber,x,y,logic Print char Print x,y,logicEnd sub

程序代码如左

Page 40: 第  7  章  文  件

41 江苏计算机等级考试

Visual Basic 程序设计3 、 Line Input 语句

[ 格式 ] : Line Input <# 文件号 > , < 变量名 >

[ 功能 ] :将顺序文件以行为单位读出并赋值给一个变量。

[ 说明 ]:

( 1)变量为字符型变量,或字符型数组元素,或变体型变量;

( 2)将数据行中除回车符和换行符以外的所有字符都赋值给相应的变量。

Page 41: 第  7  章  文  件

42 江苏计算机等级考试

Visual Basic 程序设计

Private Sub Form_Click() Dim line as String,filenumber as integer,str as string filename=freefile Open “c:\config.sys” For Input As #filenumber Do While Not EOF(filenumber) Line Input #1, line str=str+line+chr(13)+chr(10) Loop Close #filenumber text1.text=strEnd Sub

例:将 c 盘根目录下的 config.sys 文件的内容 显示在文本框中 .

Page 42: 第  7  章  文  件

43 江苏计算机等级考试

Visual Basic 程序设计4 、 Input 函数

[ 格式 ] : Input ( < 字符个数 > , <# 文件号 > )

[ 功能 ] :从指定的文件中读取指定个数的字符 (含空格 及各类符号 ) 。

例: s=Input(10,#2)

Page 43: 第  7  章  文  件

45 江苏计算机等级考试

Visual Basic 程序设计顺序文件的应用

顺序文件的应用体现在两方面 :( 1)从文件中读取原始数据并提供给程序处理 :( 2)将程序处理结果存放到文件中。

例:数据文件 Test1.Txt 有 10 个同学的成绩,格式如下: 学号,英语成绩,数学成绩,计算机成绩,化学成绩要求:统计每个学生的不及格门数,并将不及格门数超过 1门( >1) 的学生学号和不及格门数写入到文件 Test2.Txt 中。

[程序 ] : 读取原始数据: Dim a(10, 5) As Integer Open "d:test1.txt" For Input As #1 For i = 1 To 10 For j = 1 To 5 Input #1, a(i, j) Next j Next i

Page 44: 第  7  章  文  件

46 江苏计算机等级考试

Visual Basic 程序设计

统计不及格门数并写入目标文件

Open "d:\test2.txt" For Output As #2For i = 1 To 10 s = 0 For j = 2 To 5 If a(i, j) < 60 Then s = s + 1 Next j If s > 1 Then Write #2, a(i, 1), s Print a(i, 1), s End If Next IClose

Page 45: 第  7  章  文  件

47 江苏计算机等级考试

Visual Basic 程序设计7.4 随机文件处理

以随机方式存取的文件称为随机文件,也称记录文件,由一组长度相等的记录组成,一般用于数据库文件,具有以下几个特点:

( 1)记录定长;

( 2)若记录为单字段,则可对应与任何一个 VB的标准类型;若记录为多字段,则必须由用户进行自定义;

( 3)随机文件的访问,可根据记录号随机访问任何一个记录。

Page 46: 第  7  章  文  件

48 江苏计算机等级考试

Visual Basic 程序设计

[ 格式 ] :Open < 文件名 > [For Random] As [#]< 文件号 > Len=< 记录长度>

[ 功能 ] :打开一个随机文件。

[ 说明 ] :( 1 ) Random 为文件的缺省访问模式,可省略;( 2 ) Len 为指定的记录长度,不能比实际写入的数据短,否则会出错

7.4.2 随机文件的打开

Page 47: 第  7  章  文  件

49 江苏计算机等级考试

Visual Basic 程序设计7.4.1 变量声明

在处理随机文件之前,必须先声明处理文件数据的变量;1、定义记录类型 如果需要打开或创建的随机文件的记录是多字段的,必须在模块中预先自定义一个类型。[格式 ]: Type < 类型名 > < 字段名 1> As < 数据类型 > < 字段名 2> As < 数据类型 > < 字段名 n> As < 数据类型 > End Type[ 说明 ] :( 1 )数据类型为 VB 的标准数据类型;( 2)若字段为字符型,则通常定义为定长字符串 ;( 3)类型名和变量名的命名规则相同。

Page 48: 第  7  章  文  件

50 江苏计算机等级考试

Visual Basic 程序设计

例: Type Student_Score Name As String*8 Student_Id As String*7 English As Integer Math As Integer Computer As Integer End Type

2 、声明变量 在具体进行随机文件的读写操作时,还必须以定义的类型声明一些变量。

例: Dim Stu_Score1 As Student_Score

Page 49: 第  7  章  文  件

51 江苏计算机等级考试

Visual Basic 程序设计7.4.3 随机文件的写操作

[ 格式 ]: Put #< 文件号 > ,[< 记录号 >] ,变量

[ 功能 ] :将变量的值写入到随机文件中。

[ 说明 ] :

( 1 )记录号可省略,省略时将数据写入到当前文件指针处;

( 2)执行过一次 Put 操作,文件指针自动下移一个记录。

Page 50: 第  7  章  文  件

52 江苏计算机等级考试

Visual Basic 程序设计

Private Sub Command1_Click() Dim nFileNum As Integer Dim RecLen As Integer, i As Integer RecLen = Len(Person) Open "d:\t3.txt" For Random As #1 Len = RecLen For i = 1 To 3 Person.name = InputBox(" 输入姓名 ") Person.Money = InputBox(" 输入工资 ") Put #1, , Person Next i Person.name = "China" Person.Money = 1000 Seek #1, 3 Put #1, , Person Close #1End Sub

记录号

指定记录号

Type aa name As String * 8 Money As IntegerEnd Type

窗体模块 ( 通用 ) 中Dim Person As aa

Page 51: 第  7  章  文  件

53 江苏计算机等级考试

Visual Basic 程序设计7.4.4 随机文件的读操作

[ 格式 ]: Get #< 文件号 > , [ 记录号 ] ,变量[ 功能 ] :从随机文件中读取数据,并赋值给相应的变量。[ 说明 ] :( 1 )若不指定记录号,则读取当前文件指针所指的记录;( 2 )执行一次 Get 操作,文件指针自动下移一个记录。Private Sub Command2_Click() Dim nFileNum As Integer Dim RecLen As Integer, i As Integer nFileNum = FreeFile RecLen = Len(Person) Open "d:\t3.txt" For Random As #nFileNum Len = RecLen Do While Not EOF(nFileNum) Get #nFileNum, , Person Print Person. Name, Print Person. Money Loop Close # nFileNumEnd Sub

Page 52: 第  7  章  文  件

54 江苏计算机等级考试

Visual Basic 程序设计7.5 二进制文件

以二进制方式存取的文件称为二进制文件,可以是

任何类型的文件,存取方式和随机文件相同,二进制访问模式

可以定位到文件中的任意一个字节的位置,读取的字节长度取

决于语句中“变量”的长度。

1 、打开文件

[ 格式 ] : Open < 文件名 > For Binary As [#]< 文件号 >

[ 功能 ] :以二进制访问模式打开文件。

2 、读写操作

语句格式和随机文件相同,系统在实现上有所不同。