第11章 Visual Basic的数据文件.docx

上传人:b****4 文档编号:24445338 上传时间:2023-05-27 格式:DOCX 页数:18 大小:25.82KB
下载 相关 举报
第11章 Visual Basic的数据文件.docx_第1页
第1页 / 共18页
第11章 Visual Basic的数据文件.docx_第2页
第2页 / 共18页
第11章 Visual Basic的数据文件.docx_第3页
第3页 / 共18页
第11章 Visual Basic的数据文件.docx_第4页
第4页 / 共18页
第11章 Visual Basic的数据文件.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

第11章 Visual Basic的数据文件.docx

《第11章 Visual Basic的数据文件.docx》由会员分享,可在线阅读,更多相关《第11章 Visual Basic的数据文件.docx(18页珍藏版)》请在冰豆网上搜索。

第11章 Visual Basic的数据文件.docx

第11章VisualBasic的数据文件

第11章VisualBasic的数据文件

11.1文件概述

文件:

存储在外部介质上的数据的集合。

输入/输出设备也可看作是文件。

每个文件都用唯一的文件全名进行区别。

11.1.1文件结构及用户自定义数据类型

1.文件结构

(1)字符(Character):

是构成文件的最基本单位。

(2)字段(Field):

也称域,由若干个字符组成,用来表示一项数据。

(3)记录(Record):

由一组相关的字段组成。

(4)文件(File):

文件由记录构成,一个文件含有一个以上的记录。

2.用户自定义数据类型

Type语句定义的类型称为记录类型

在标准模块或窗体模块的声明部分中定义,窗体模块中定义的记录类型只能是私有的

格式:

[Public|Private]Type数据类型名

数据元素名As类型名

数据元素名As类型名

……

EndType

例如:

TypeStudent

NumAsInteger

NameAsString

AgeAsInteger

SexAsString*1

ScoreAsSingle

EndType

定义了记录类型后,可以定义属于这种类型的变量,如:

DimStuAsStudent

用“变量名.元素名”引用成员,如:

Stu.Num=20

Stu.Name="zhangqiang"

11.1.2文件种类

(1)根据数据性质:

程序文件、数据文件

(2)根据数据的存取方式和结构:

顺序文件、随机文件

①顺序文件

记录一个接一个地存放。

只能从文件头开始,一个记录一个记录地顺序读取。

②随机存取文件

又称直接存取文件(简称随机文件或直接文件)。

可访问文件中的任一个记录。

每个记录的长度是固定的,记录中的每个字段的长度也是固定的。

每个记录都有一个记录号,按记录号读写。

(3)根据数据的编码方式:

ASCII文件、二进制文件

①ASCII文件

又称文本文件,每个字节放一个ASCII代码。

②二进制文件

以二进制方式保存的文件。

11.2文件的打开与关闭

数据文件的操作步骤:

(1)打开(或建立)文件

(2)进行读、写操作

(3)关闭文件

11.2.1文件的打开

用Open语句打开或建立一个文件

【格式】

Open文件全名[For打开方式][Access存取类型][锁定]As[#]文件号[Len=记录长度]

【功能】分配缓冲区,确定存取方式。

【说明】

①打开方式:

Output顺序输出

Input顺序输入

Append顺序追加

Random随机存取(默认)

Binary二进制

②存取类型:

Read只读

Write只写

ReadWrite读写(随机、二进制、用Append方式打开的文件)

③锁定:

在多用户或多进程环境中使用,用来限制其他用户或进程对文件进行读写操作。

④文件号:

整型表达式。

1~511。

⑤记录长度:

整型表达式。

随机文件的记录长度(默认128字节)。

顺序文件的缓冲字符数(默认512字节)。

顺序文件各个记录的长度可以不相同。

二进制文件忽略Len子句。

【举例】

Open"student.dat"ForOutputAs#1

Open"student.dat"ForAppEndAs#1

Open"student.dat"ForInputAs#1

Open"student.dat"ForRandomAs#1

Open"student.dat"ForRandomAccessReadLockWriteAs#1

Open"c:

\ysxx\student.dat"ForRandomAs#1Len=256

11.2.2文件的关闭

Close语句格式:

Close[[#]文件号][,[#]文件号]……

说明:

(1)文件号是Open语句中使用的文件号。

省略文件号,则关闭所有打开的文件。

(2)关闭的作用:

把缓冲区中的数据写到文件;释放文件号。

(3)除了用Close语句外,程序结束时也将自动关闭所有打开的数据文件。

11.3文件操作语句和函数

11.3.1文件指针

文件指针用来表示文件的读写位置。

用Append方式打开文件时,文件指针指向文件的末尾

用其他方式(Input、Output、Random、Binary等)打开文件时,文件指针指向文件的开始。

每一次读写,指针都自动移动到下一个位置。

随机文件,最小移动单位是一个记录的长度。

顺序文件,移动的长度与读写的字符串的长度相同。

Seek语句:

Seek#文件号,位置

功能:

指针定位

说明:

(1)顺序文件,“位置”是从文件开头开始的字节数。

随机文件,“位置”是下一次读写的记录号。

(2)Get、Put语句中的记录号优先于Seek语句。

Seek函数:

Seek(文件号)

功能:

返回文件指针的当前位置。

例:

Open"d:

\test"ForOutputAs#1'新建test顺序文件,文件指针指向第1字节位置

sName="wangqiang"'变量sName设为字符串

Print#1,sName'sName输出到文件中,文件内容:

wangqiang

modi="l"

Seek#1,6'文件指针指向第6字节位置,即"q"所在位置

Print#1,modi;'modi输出到文件中,文件内容:

wangliang

Currentfilepoint=Seek

(1)'变量Currentfilepoint值为7

Close#1

11.3.2其他语句和函数

1.FreeFile函数

格式:

FreeFile()

功能:

得到一个在程序中没有使用的文件号。

举例:

Filenum=FreeFile()

Open“test”ForOutputAsFilenum

2.Loc函数

格式:

Loc(文件号)

功能:

返回指定文件的当前读写位置。

随机文件,返回最后读写的记录号,即当前读写位置的上一个记录。

顺序文件,返回文件指针当前位置除以128的值。

二进制文件,返回最后一次读写的字节位置。

3.LOF函数

格式:

LOF(文件号)

功能:

返回文件长度。

单位是字节,但要是128的倍数。

因为文件的基本单位是记录,每个记录的默认长度是128字节。

例如:

某个文件的实际长度是257(=128*2+1)个字节,则用LOF函数返回的是384(=128*3)个字节。

4.EOF函数

格式:

EOF(文件号)

功能:

测试是否到达文件末尾。

返回True或False。

11.4顺序文件

11.4.1顺序文件的写操作

1.Print#语句

格式:

Print#文件号,[[Spc(n)|Tab(n)][表达式表][;|,]]

功能:

把数据写入文件。

Print方法所“写”的对象是窗体、打印机或控件。

Print#语句所“写”的对象是文件。

在满足下列条件之一时才写入磁盘:

①关闭文件(Close)

②缓冲区已满

③缓冲区未满,但执行下一个Print#语句

2.Write#语句

格式:

Write#文件号,表达式表

说明:

(1)“表达式表”中的各项以逗号分开。

(2)以紧凑格式存放。

自动在数据项之间插入逗号、给字符串加上双引号、最后项末尾插换行符。

(3)正数的前面没有空格。

【例11.1】编写程序,利用Write#语句向文件中写入数据,建立学生档案文件,程序可以依次输入多个同学的信息,当输入的姓名为“-1”时,结束输入。

步骤:

①新建一个“标准EXE工程”,自动在工程中添加一个名称为Form1的窗体。

②在窗体模块的声明段中定义自定义数据类型student。

PrivateTypestudent

sNameAsString

snoAsString

ageAsInteger

sdormAsString

sphoneAsString

EndType

编写窗体的Click事件过程。

PrivateSubForm_Click()

DimstuAsstudent

Open"d:

\student.dat"ForAppendAs#1

i=1

DoWhilestu.sName<>"-1"

stitle="第"+Str$(i)+"名学生数据输入"

stu.sName=InputBox("请输入姓名:

",stitle)

stu.sno=InputBox("请输入学号:

",stitle)

stu.age=Val(InputBox("请输入年龄:

",stitle))

stu.sdorm=InputBox("请输入宿舍:

",stitle)

stu.sphone=InputBox("请输入电话:

",stitle)

Ifstu.sName<>"-1"Then

Write#1,stu.sName,stu.sno,stu.age,stu.sdorm,stu.sphone

EndIf

i=i+1

Loop

Close#1

EndSub

运行程序

利用记事本打开d:

\student.dat文件

11.4.2顺序文件的读操作

1.Input#语句

格式:

Input#文件号,变量表

说明:

(1)“变量表”由一个或多个变量组成,从数据文件中读出的数据赋给这些变量。

(2)读出的数据,忽略前导空格、回车或换行符。

【例11.2】把前面建立的学生数据文件读到内存,并在屏幕(窗体)中显示出来。

自定义类型同前例

窗体单击事件过程:

PrivateSubForm_Click()

Dimstu()Asstudent

n=Val(InputBox("输入读取人数:

"))

ReDimstu(n)Asstudent

Open"d:

\student.dat"ForInputAs#1

Print"姓名";Tab(10);"学号";Tab(20);"年龄";Tab(30);"宿舍";Tab(40);"电话"

Fori=1Ton

Input#1,stu(i).sName,stu(i).sno,stu(i).age,stu(i).sdorm,stu(i).sphone

Printstu(i).sName;Tab(10);stu(i).sno;Tab(20);stu(i).age;Tab(30);stu(i).sdorm;Tab(40);stu(i).sphone

Nexti

Close#1

EndSub

2.LineInput#语句

格式:

LineInput#文件号,字符串变量

功能:

从顺序文件中读取一行,赋给字符串变量。

【例11.3】把一个磁盘文本文件的内容读到内存并在文本框中显示出来,然后再把该文本框中的内容存入另一个磁盘文件。

步骤:

①新建一个“标准EXE”工程,自动在工程中添加一个名为Form1的窗体。

②在窗体上建立一个文本框,设置MultiLine属性设为True。

③编写如下事件过程:

PrivateSubForm_Click()

Open"d:

\student.dat"ForInputAs#1

DoWhileNotEOF

(1)

LineInput#1,saline$'saline不包括回车换行符

swhole$=swhole$+saline$+Chr$(13)+Chr$(10)'在每行末添上回车换行符

Loop

Text1.Text=swhole$

Close#1

Open"d:

\student2.dat"ForOutputAs#1

Print#1,Text1.Text

Close#1

EndSub

3.Input$函数

格式:

Input$(n,#文件号)

功能:

返回从指定文件中读出的n个字符(二进制输入)。

例:

x$=Input$(100,#1)

从文件号为1的文件中读取100个字符,并把它赋给变量x$。

11.5随机文件

特点:

(1)定长记录,通过记录号确定位置。

(2)每个记录分若干个字段,每个字段的长度等于相应的变量的长度。

(3)各变量(数据项)要按一定的格式置入相应的字段。

(4)打开随机文件后,既可以读也可以写。

11.5.1随机文件的打开与读写操作

1.随机文件的写操作

(1)定义数据类型

(2)打开随机文件

(3)将内存中的数据写入磁盘

Put语句,格式:

Put#文件号,[记录号],变量

说明:

省略“记录号”,写到下一个记录位置,逗号不能省。

②记录长度与数据的长度应匹配。

(4)关闭文件

2.随机文件的读操作

Get语句,格式:

Get#文件号,[记录号],变量

【例11.4】建立并读取一个学生信息随机文件。

步骤:

(1)新建一个“标准EXE”工程,自动在工程中添加一个名为Form1的窗体。

(2)执行“工程”菜单中的“添加模块”命令,建立标准模块,在该模块中定义如下的记录类型:

Typestudent

sNameAsString*8'姓名字段为定长字符串,长度为8

snoAsString*7'学号字段为定长字符串,长度为7

ageAsInteger'年龄字段

sdormAsString*5'宿舍字段

sphoneAsString*11'电话字段

EndType

(3)在窗体中添加3个命令按钮:

建立文件、显示全部记录、显示指定记录。

(4)分别编写3个命令按钮的Click事件过程代码。

PrivateSubCommand1_Click()'建立学生信息数据文件

DimstuAsstudent,reclenAsInteger,recnoAsInteger

reclen=Len(stu)'计算记录的长度

Open"studentr.dat"ForRandomAs#1Len=reclen

recno=1

DoWhileTrim(stu.sName)<>"-1"

stitle="第"+Str(recno)+"名学生数据输入"

stu.sName=Trim(InputBox("请输入姓名:

",stitle))

stu.sno=Trim(InputBox("请输入学号:

",stitle))

stu.age=Val(InputBox("请输入年龄:

",stitle))

stu.sdorm=Trim(InputBox("请输入宿舍:

",stitle))

stu.sphone=Trim(InputBox("请输入电话:

",stitle))

IfTrim(stu.sName)<>"-1"Then

Put#1,recno,stu

recno=recno+1

EndIf

Loop

Close#1

EndSub

PrivateSubCommand2_Click()'显示文件中的全部记录

DimiAsInteger,numbersAsInteger,reclenAsInteger,stuAsstudent

reclen=Len(stu)'计算记录的长度

Open"studentr.dat"ForRandomAs#1Len=reclen

Cls

numbers=LOF

(1)/reclen'计算记录的数目

Print"姓名";Tab(10);"学号";Tab(20);"年龄";Tab(30);"宿舍";Tab(40);"电话"

Fori=1Tonumbers'逐条读出记录并输出

Get#1,i,stu

Printstu.sName;Tab(10);stu.sno;Tab(20);stu.age;Tab(30);stu.sdorm;Tab(40);stu.sphone

Nexti

Close#1

EndSub

PrivateSubCommand3_Click()'显示文件中指定的记录

DimiAsInteger,numbersAsInteger,reclenAsInteger,stuAsstudent

reclen=Len(stu)

Open"studentr.dat"ForRandomAs#1Len=reclen

Cls

numbers=LOF

(1)/reclen

i=Val(InputBox("请输入记录号:

","数据输入"))

Ifi<1Ori>numbersThen

MsgBox"记录号超出范围"

Else

Print"姓名";Tab(10);"学号";Tab(20);"年龄";Tab(30);"宿舍";Tab(40);"电话"

Get#1,i,stu'读取指定的记录

Printstu.sName;Tab(10);stu.sno;Tab(20);stu.age;Tab(30);stu.sdorm;Tab(40);stu.sphone

EndIf

Close#1

EndSub

11.5.2随机文件中记录的增加与删除

1.增加记录

利用随机文件长度/记录长度求出记录个数

将记录数加1,Put语句写数据

2.删除记录

把下一个记录重写到要删除的记录位置上

其后的所有记录依次前移

【实验】在例11.4的软件中增加添加记录、删除记录功能。

11.6文件系统控件

VB工具箱的三个控件:

驱动器列表框(DriveListBox)

目录列表框(DirectoryListBox)

文件列表框(FileListBox)

1.驱动器列表框

Drive属性:

返回或设置当前驱动器的名称

只能用程序设置该属性

Change事件:

从驱动器列表框中选择一个新的驱动器时,触发该事件

2.目录列表框

Path属性:

返回或设置当前路径

只能在程序代码中设置

【格式】[窗体.]目录列表框名称.Path[=“路径”]

【例如】PrintDir1.Path显示当前路径

Dir1.Path=“d:

\vb”设置路径

Change事件:

Path属性值改变时,触发该事件

3.文件列表框

Path属性:

同目录列表框

Pattern属性:

用来设置在执行时要显示的某一种类型的文件

属性窗口、程序代码均可设置

默认值为*.*(所有文件)

【代码格式】[窗体.]文件列表框名.Pattern[=属性值]

【例如】PrintFile1.Pattern显示Pattern属性值

File1.Pattern=“*.bmp”只显示扩展名为“.bmp”的文件

FileName属性:

设置或返回某一选定的文件名称

可以用它来设置Path或Pattern属性

【代码格式】[窗体.]文件列表框名.FileName[=文件名]

【例如】File1.FileName=“d:

\vbe\*.exe”

显示d:

\vbe目录下扩展名为.exe的文件

File1的Path属性值设置为“d:

\vbe”

Pattern属性值设置为“*.exe”

4.驱动器列表框、目录列表框、文件列表框的同步操作

PrivateSubDrive1_Change()

Dir1.Path=Drive1.Drive

EndSub

PrivateSubDir1_Change()

File1.Path=Dir1.Path

EndSub

【例11.5】设计一个窗体,利用文件系统控件来选择查看一个图象文件。

步骤:

①新建一个“标准EXE”工程,自动在工程中添加一个名为Form1的窗体。

②向窗体中添加1个驱动器列表框、1个目录列表框、1个文件列表框、2个标签和1个图象框。

③编写代码:

PrivateSubForm_Load()

File1.Pattern="*.jpg"

EndSub

PrivateSubDrive1_Change()

Dir1.Path=Drive1.Drive

EndSub

PrivateSubDir1_Change()

File1.Path=Dir1.Path

EndSub

PrivateSubFile1_Click()

DimFileDirAsString

IfRight(File1.Path,1)="\"Then

FileDir=File1.Path&File1.FileName

Else'文件不在驱动器根目录时

FileDir=File1.Path&"\"&File1.FileName'形成全文件名

EndIf

Label1.Caption="File1.Path="&File1.Path'显示文件所在路径

Label2.Caption="File1.FileName="&File1.FileName'显示文件名

Image1.Picture=LoadPicture(FileDir)'将选中的图片文件显示在Image1中

EndSub

11.7文件基本操作

1.删除文件(Kill语句)

格式:

Kill文件名

例如:

Kill"c:

\wd\*.bak"

2.拷贝文件(FileCopy语句)

格式:

FileCopy源文件名,目标文件名

例如:

FileCopy"student.dat","stu.dat"

FileCopy"d:

\vbe\student.dat","d:

\stu.dat"

3.文件(目录)重命名(Name语句)

格式:

Name原文件名As新文件名

例如:

Name"student.dat"As"student.txt"重命名文件

Name"c:

\dos\unzip.exe"As"c:

\windows\unzip.exe"移动文件

Name"c:

\temp"As"c:

\tempold"重命名目录

注意:

不能跨驱动器移动文件

如果文件已经打开,不能重命名

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 外语学习 > 法语学习

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1