第13章数据文件本章内容及要求1.docx

上传人:b****6 文档编号:5154192 上传时间:2022-12-13 格式:DOCX 页数:27 大小:184.81KB
下载 相关 举报
第13章数据文件本章内容及要求1.docx_第1页
第1页 / 共27页
第13章数据文件本章内容及要求1.docx_第2页
第2页 / 共27页
第13章数据文件本章内容及要求1.docx_第3页
第3页 / 共27页
第13章数据文件本章内容及要求1.docx_第4页
第4页 / 共27页
第13章数据文件本章内容及要求1.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

第13章数据文件本章内容及要求1.docx

《第13章数据文件本章内容及要求1.docx》由会员分享,可在线阅读,更多相关《第13章数据文件本章内容及要求1.docx(27页珍藏版)》请在冰豆网上搜索。

第13章数据文件本章内容及要求1.docx

第13章数据文件本章内容及要求1

第13章数据文件

本章内容及要求:

1.掌握VB中文件的概念、种类及其结构;

2.掌握顺序文件的操作:

打开、读/写、关闭;

3.掌握随机文件的操作:

打开、读/写、关闭;

4.了解二进制文件的操作。

5.了解与文件操作有关的一些语句

本章重点:

顺序文件的操作:

打开、读/写、关闭;

随机文件的操作:

打开、读/写、关闭;

本章难点:

随机文件、二进制文件的操作

文件是存储在外部介质(如磁盘)上的以文件名标识的数据的集合。

通常由一组存放在磁盘上的相关字节组成。

当应用程序要访问文件时,必须自己决定文件中字节的意义(比如,表示字符、数据记录、整数、字符串等等)。

存储在磁盘上的文件称为磁盘文件,与计算机相连的设备称为设备文件。

这些文件都不在计算机内,统称为外部文件。

13.1文件概述

13.1.1文件及其结构

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

信息一旦存入外部介质,就会形成磁盘文件.因此,文件必须有一个区别天其它文件的文件名(包括盘符、路径、文件名等)。

VB中的一个磁盘文件是由数据记录组成。

记录是计算机处理数据的基本单位,它由一组具有共同属性相互关联的数据项(字段)组成。

而每个字段又由若干字符组成。

 

 

13.1.2文件分类

根据文件中的数据性质可以分为数据文件和程序文件两类。

根据访问文件的方式将文件分成3类:

顺序文件

随机文件

二进制文件。

1.顺序文件

顺序文件(SequentialFile)是普通的文本文件。

顺序文件中的记录按顺序一个接一个地排列。

读写文件存取记录时,都必须按记录顺序逐个进行。

一行一条记录(一项数据),记录可长可短,以“换行”字符为分隔符号。

2.随机文件

随机文件(RandomAccessFile)是可以按任意次序读写的文件,其中每个记录的长度必须相同。

在这种文件结构中,每个记录都有其唯一的一个记录号,所以在读取数据时,只要知道记录号,便可以直接读取记录。

3.二进制文件

二进制文件(Binaryfile)是字节的集合、它直接把二进制码存放在文件中。

除了没有数据类型或者记录长度的含义以外,它与随机访问很相似。

二进制访问模式是以字节数来定位数据,在程序中可以按任何方式组织和访问数据,对文件中各字节数据直接进行存取。

13.1.3

文件的基本操作

虽然这3种文件访问的数据类型不同,但应用程序访问它们的步骤却相似:

①使用Open语句打开文件,并为文件指定一个文件号。

对文件进行任何I/O操作之前,都必须经过这步操作。

②从文件中读取部分或全部数据到内存变量中。

③对变量中的数据进行处理。

④将处理后的数据保存回文件中。

⑤使用Close语句关闭文件。

如果没有关闭文件,则会导致文件中部分或全部信息丢失。

13.2顺序文件的基本操作

在程序中对文件的操作,通常按3个步骤进行:

 

一、顺序文件的打开与关闭

13.2.1打开文件

打开文件用语句open,其格式为:

Open“文件名”[For模式]As[#]文件号[Len=记录长度]

(1)模式

OUTPUT:

写操作

INPUT:

读操作

APPEND:

追加到文件未尾

例如:

"C:

\VB\SCORE.txt"FOROUTPUTAS#1

(2)文件号

1~511,可以用FreeFile函数获得下一个可利用的文件号。

(3)记录长度

小于或等于32767的整数,它指定数据缓冲区的大小。

例如,打开C:

\VB\SCORE,供写入数据,指定文件号为#1。

OPEN“C:

\VB\score”FORoutputAS#1

OPEN“C:

\TEMP\A.TXT”FORInputAS#1

OPEN“C:

\TEMP\B.TXT”FOROutputAS#2

OPEN“C:

\TEMP\C.TXT”FORAppendAS#1

13.2.2顺序文件的读写操作

1.写操作

向文件写入内容使用Print#语句或Write#语句,在程序中是数据输出。

(1)Print语句

语法格式:

PRINT#<文件号>,[<输出列表>]

说明:

文件号为以写方式打开文件的文件号;

输出列表为用分号或逗号分隔的变量、常量、空格和定位函数序列。

(2)Write命令

语法格式:

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

Write语句采用紧凑格式。

数据项之间插入“,”,并给字符数据加上双引号。

例子3-1Print与Write语句输出数据结果比较。

PrivateSubForm_Click()

DimStrAsString,AnumAsInteger

Open"D:

\Myfile.dat"ForoutputAs1

Str="ABCDEFG"

Anum=12345

Print#1,Str,Anum

Write#1,Str,Anum

Close#1

EndSub

例13-2编程把一个文本框中的内容,以文件形式存入磁盘。

假定文本框的名称为Mytxt,文件名为Myfile.dat。

方法1:

把整个文本框的内容一次性地写入文件。

PrivateSubCommand1_Click()

Open"c:

\Myfile.dat"ForOutputAs#1

Print#1,mytxt.Text

Close#1

EndSub

方法2:

把整个文本框的内容一个字符一个字符地写入文件。

PrivateSubCommand1_Click()

Open"c:

\Myfile.dat"ForOutputAs#1

Print#1,mytxt.Text

Close#1

EndSub

PrivateSubCommand2_Click()

Open"Myfile.dat"ForOutputAs#1

Fori=1ToLen(mytxt.Text)

Print#1,Mid(mytxt.Text,i,1);

Nexti

Close#1

EndSub

2.顺序文件读操作

从现存文件中向内存读入数据,应以Input方式打开该文件。

然后使用Input#语句、LineInput#语句和Input()函数读入到程序变量中。

使用格式如下:

INPUT#文件号,变量列表

把读出的每个数据项分别存放到所对应的变量。

LINEINPUT#文件号,字符串变量

读一行到变量中,主要用来读取文本文件。

INPUT$(读取字符数,#文件号)

读取指定的数量的字符,作为函数的返回值。

例13-3把datain.txt的文本文件中的数据按5行5列的格式显示在窗体上。

OptionBase1

PrivateSubForm_Click()

ConstN=5

ConstM=5

Dimmat(M,N)

Dimi,j

Open"d:

\datain.dat"ForInputAs#1

Fori=1ToN

Forj=1ToN

Input#1,mat(i,j)

Nextj

Nexti

Close#1

Print

Print"初始矩阵为:

"

Print

Fori=1ToN

Forj=1ToN

PrintTab(5*j);mat(i,j);

Nextj

Print

Nexti

Print

Print"左上——右下对角线上元素为:

"

Fori=1ToN

PrintTab(5*i);mat(i,i);

Nexti

EndSub

例13-4读取文本文件到文本框。

DiminputdataAsString*1

PrivateSubCommand1_Click()

Text1.Text=""

Open"d:

\myfile1.txt"ForInputAs#1

DoWhileNotEOF

(1)

LineInput#1,inputdata

Text1.Text=Text1.Text+inputdata+vbCrLf

Loop

Close#1

EndSub

DimfilelengthAsLong

PrivateSubCommand2_Click()

Open"d:

\myfile2.txt"ForInputAs#1

Text1.Text=Input(140,#1)

Close#1

EndSub

 

PrivateSubCommand3_Click()

Text1.Text=""

Open"d:

\myfile3.txt"ForInputAs#1

DoWhileNotEOF

(1)

inputdata=Input(1,#1)

Text1.Text=Text1.Text+inputdata

Loop

Close#1

EndSub

13.2.3关闭文件——Close语句

使用格式如下:

Close[文件号列表]

其中:

文件号列表为可选项,如:

#1,#2,#3,如果省略,则将关闭Open语句打开的所有活动文件。

例如:

Close#1,#2,#3

Close

13.2.4与读文件操作有关的几个函数

(1)Lof函数

LOF函数将返回某文件的字节数。

例如,LOF

(1)返回#1文件的长度,如果返回0值,则表示该文件是一个空文件。

(2)Loc函数

Loc函数将返回在一个打开文件中读写的记录号;对于二进制文件,它将返回最近读写的一个字节的位置。

(3)Eof函数

Eof函数将返回一个表示文件指针是否到达文件末尾的标志。

如果到了文件末尾,Eof函数返回TRUE(-1),否则返回FALSE(0)。

语法结构:

DoWhileNotEof(文件号)

语句

Loop

(4)FileLen函数

此函数返回指定文件的文件长度。

调用格式为:

FileLen(文件名)

(5)FreeFile[(范围)]

此函数获得尚未被战用的文件号中的第一个,参数可以是0或1。

例13-5某商店商品数据。

PrivateSubCommand1_Click()

Open"d:

\goods.txt"ForAppendAs#1

Print#1,Text1.Text,Text2.Text,Text3.Text,Text4.Text,Text5.Text

Close#1

msg=MsgBox("保存完毕,继续输入商品信息吗?

",vbYesNo+vbQuestion)

Ifmsg=6Then

Text1.Text=""

Text2.Text=""

Text3.Text=""

Text4.Text=""

Text5.Text=""

EndIf

EndSub

PrivateSubCommand2_Click()

Text7.Text=""

Open"d:

\goods.txt"ForInputAs#1

DoWhileNotEOF

(1)

LineInput#1,x

Text7.Text=Text7.Text+x+Chr(13)+Chr(10)

Loop

Close

EndSub

13.3随机文件的操作

在文件中以顺序文件方式进行存取数据很方便也很常用,但是当需要大量查找或修改文件中的数据时会很困难,而这时采用随机文件方式存取数据就显得比较方便。

随机文件的每一个数据项都有相同的长度,它的数据项通常称做记录。

随机文件是以记录为单位的,每条记录都被赋予了记录号以便查找。

应用程序可以根据记录号直接读取随机文件中的任意记录,而无须由前至后逐个读取记录。

对随机文件的存取是以记录为单位进行的,每个记录包括一个或多个字段。

具有一个字段的记录对应于任一标准类型,比如整数或定长字符串。

具有多个字段的记录对应于用户自定义类型。

13.3.1打开(建立)文件

1、声明记录类型变量

在打开一个文件进行随机访问之前,应定义一个类型,该类型对应于该文件包含或将包含的记录。

语法格式为:

[Private|Public]Type自定义类型名

元素名Astype

[元素名Astype]

EndType

例如,声明一个学生自定义类型。

TypeStudent

NumberAsString2(学号,宽度为2字节)

NameAsString8(姓名,宽度为8字节)

ScoreAsInteger(成绩,宽度为2字节)

EndType

在定义与记录对应的类型以后,应接着声明程序需要的任何其他变量,用来处理作为随机访问而打开的文件。

如:

Publicstudent1,student2Asstudent(定义记录变量)

PublicstnumeAsInteger(定义存放当前记录号的变量)

PublicLastRecordAsLong(存放最后一条记录的编号)

13.3.2随机文件的读写操作

1.打开文件

格式:

Open"文件名"ForRandomAs#文件号[Len=记录长度]

2.读操作

格式:

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

功能:

将一个已打开的磁盘文件的一条记录的内容读入一个变量之中。

忽略记录号,则读出当前记录后的那一条记录。

13.3.3随机文件的增、删、改(写操作)

写操作的格式为:

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

功能是将一个变量的数据写入磁盘文件中,将一个记录变量的内容写到指定的记录位置处。

忽略记录号,则表示在当前记录后的位置插入一条记录。

1.添加记录

在随机文件里添回记录,实际上是在文件尾增加一条记录。

用下面的方法可以找到随机文件的记录数:

记录数LOF(文件号)/len(记录型变量)

如果一个文件的记录数是num,则用下面的语句可以增加一条记录:

num=num+1

put#2,num,x

2.删除记录

要删除一个记录的所有字段可以通过删除记录实现,但该记录仍然在文件中存在,所以一般是把剩余记录复制,之后删除文件。

例13-5a创建一个随机文件,然后读出其中内容,显示在文本框中:

在窗体中创建一个文本框text1,两个命令按钮command1和command2,点击command1(写入文件)时创建文件,点击command2(读出文件)时把文件中的数据读出来,显示在文本框中。

下面是程序代码:

自定义数据类型(记录类型,在窗体的通用代码段中声明)

PrivateTypeRecord

IDAsInteger

NameAsString*20

EndType

创建文件的代码,Command1的单击事件

PrivateSubCommand1_Click()

DimMyRecordAsRecord

Open"TESTFILE"ForRandomAs#1Len=Len(MyRecord)

Forrecordnumber=1To5

MyRecord.ID=recordnumber

MyRecord.Name="MyName"&recordnumber

Put#1,recordnumber,MyRecord

Nextrecordnumber

Close#1

EndSub

读出文件的代码(Command2的单击事件)

PrivateSubCommand2_Click()

DimMyRecordAsRecord

Open"TESTFILE"ForRandomAs#1Len=Len(MyRecord)

WhileNotEOF

(1)

Get#1,,MyRecord

Text1.Text=Text1.Text&Chr(10)&Chr(13)&Chr(10)&Chr(13)&MyRecord.ID&""&MyRecord.Name

Wend

Close#1

EndSub

 

例13-6设计一个简单教师信息管理程序,使用随机文件存储教师信息。

PrivateTypeteacher

teachNoAsString*2

teachnameAsString*8

teachsexAsString*2

teachageAsString*2

teachzhcAsString*8

teachxlAsString*10

EndType

DimteachinfoAsteacher

DimlastrecAsInteger

 

PrivateSubCommand1_Click()

Open"d:

\info.txt"ForRandomAs#1Len=Len(teachinfo)

lastrec=LOF

(1)/Len(teachinfo)

Withteachinfo

.teachNo=Text1.Text

.teachname=Text2.Text

.teachsex=Text3.Text

.teachage=Text4.Text

.teachzhc=Text5.Text

.teachxl=Text6.Text

EndWith

Put#1,lastrec+1,teachinfo

Close#1

EndSub

PrivateSubCommand2_Click()

Open"d:

\info.txt"ForRandomAs#1Len=Len(teachinfo)

i=InputBox("请输入查询的记录号")

lastrec=LOF

(1)/Len(teachinfo)

Ifi<0Ori>lastrecThen

MsgBox"请输入1到"&lastrec&"之间的数",vbOKOnly+vbInformation

Else

Get#1,i,teachinfo

Text1.Text=teachinfo.teachNo

Text2.Text=teachinfo.teachname

Text3.Text=teachinfo.teachsex

Text4.Text=teachinfo.teachage

Text6.Text=teachinfo.teachzhc

Text6.Text=teachinfo.teachxl

EndIf

Close#1

EndSub

PrivateSubCommand3_Click()

End

EndSub

二进制文件是一个字节流,文件系统并不解释各字节的意义,解释工作由具体的应用程序完成。

以二进制方式访问文件有下述特点:

可以直接访问文件中的所有数据。

由应用程序根据需要解释数据的意义。

访问文件的语句不更改原始数据的所有内容。

二进制文件每一次读写是以字节为单位对数据进行访问操作的,它允许用户读写或修改文件中的任何字节信息。

当把二进制数据写入文件中时,使用Byte数据类型的数组,而不是String变量。

String被认为包含的是字符,而二进制型数据可能无法正确地存储在String变量中。

当要保持文件的尺寸尽量小时,应使用二进制文件。

13.4二进制文件

13.4.1二进制文件的打开

Open"文件名"ForBinaryAs#文件号

13.4.2二进制文件的读写操作

1.写操作

Put[#]文件号,[位置],变量名

写入长度等于变量长度的数据。

2.二进制文件的读操作

GET[#]文件号,[位置],变量名

从指定位置开始读出长度等于变量长度的数据存入变量中,数据读出后移动变量长度位置,如果忽略位置,则表示从文件指针所指的位置开始读出数据,数据读出后移动变量长度位置。

例13-7从位置800起写一个字符串“5678”,从位置1200起写一个字符串“VisualBasic程序设计方法”。

PrivateSubCommand1_Click()

FileNumber=FreeFile

Open"d:

\rest.dat"ForBinaryAsFileNumber

const1="5678"

const2="VisualBasic程序设计方法"

Put#FileNumber,800,const1

Put#FileNumber,1200,const2

Close#FileNumber

EndSub

例13-7a文件复制

PrivateSubCommand1_Click()

DimcharAsByte

DimFileNum1,FileNum2AsInteger

FileNum1=FreeFile

Open"d:

\rest.DAT"ForBinaryAs#FileNum1

'打开源文件

FileNum2=FreeFile

Open"d:

\rest.BAK"ForBinaryAs#FileNum2

'打开目标文件

DoWhileNotEOF(FileNum1)

Get#1,,char'从源文件读出一个字节

Put#2,,char'将一个字节写入目标文件

Loop

Close#FileNum1

Close#FileNum2

EndSub

13.4.3Seek函数与Seek语句

1.函数

Seek(filenumber)

必要的filenumber参数是一个包含有效文件号的Integer。

说明

Seek函数返回介于1和2,147,483,647(相当于2^31 – 1)之间的值。

2.语句

seek(文件号,recnumber).

13.5文件操作语句

1.ChDir语句

格式:

ChDirpath

功能:

改变当前目录。

例如:

ChDir"D:

\TMP

2.ChDrive语句

格式:

ChDrivedrive

功能:

改变当前驱动器

说明:

如果drive为“”,则当前驱动器将不会改变;如果drive中有多个字符,则ChDrive只会使用首字母。

3.MkDir语句

格式:

MkDirpath

功能:

创建一个新的目录。

4.RmDir语句

格式:

RmDirpath

功能:

删除一个存在的目录

说明:

只能删除空目录。

5.FileCopy语句

格式:

FileCopysource,destination

功能:

复制一个文件。

说明:

FileCopy语句不能

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

当前位置:首页 > 高等教育 > 艺术

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

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