实验 文件的基本操作
一、实验目的
(1)掌握顺序文件、随机文件、二进制文件的特点及使用方法。
(2)熟练掌握文件的打开、关闭和读写命令。
(3)学会利用文件建立简单的应用程序。
二、相关知识
1.文件的基本概念及文件类型
“文件”是存放在外部介质(磁盘、磁带等)上的相关数据的集合,每一个文件都有文件名。根据文件中数据的存放形式,将数据文件分为3种类型,即顺序文件、随机文件和二进制文件。对此,VB提供了3种文件访问的类型:顺序访问、随机访问和二进制访问。
2.顺序文件
要处理的文件只包含文本信息,其中的数据没有分成记录,就可以使用顺序型访问。进行顺序访问要用到以下3种打开文件的模式:
● 读文件:Open[路径:]文件名[.扩展名] ForInput As #文件号。
● 写文件:Open[路径:]文件名[.扩展名] For Output As #文件号。
● 追加写入:Open[路径:]文件名[.扩展名] For Append As #文件号。
3.随机文件
随机文件是由一组相同长度的记录组成,每个记录包含一个或多个字段。具有一个字段的记录对应于任一标准类型,具有多个字段的记录对应于用户定义类型。随机文件对读写顺序没有限制,可以以记录为单位,读写任何—条记录。进行随机访问要用到以下打开文件的模式:Open[路径:]文件名[.扩展名] For Random As #文件号 [Len = 记录长度]
4.二进制文件
二进制访问是以字节为单位对文件进行的访问操作,它允许用户读写文件的任何字节。通过使用二进制访问可使磁盘空间的使用降到最小,当要保持文件的尺寸尽量小时,应使用二进制型访问。要打开二进制访问的文件,Open语句打开文件的方式如下:
Open[路径:]文件名[.扩展名] For Binary As #文件号
三、实验举例
(实例1)已知某班学生成绩文件为“grade.Dat”,该文件共有6个宇段:姓名、语文成绩、数学成绩、英语成绩、计算机成绩、总分:姓名字段为8个字符的字符型,其余宇段都是数值型。设该文件已经按照总分降序排序,输入一个总分,请用折半查找的方法查找该班是否存在某分数的人,若找到,输出该学生的情况,否则输出没有找到。
根据上述描述,进行如下操作:
(1)首先在模块中建立如下结构:
Type stdinfo
name AS String * 8
yuwen AS Integer
math AS Integer
english AS Integer
xgrade AS Integer
sum AS Integer
End Type
(2)将学生信息(包括:姓名、4门课成绩)放入到abc.txt文件中。
”张三”,98,97,96,94
”李四”,94,96,95,95
“王五”,92,90,98,93
“赵六”,90,96,92,88
“孙七”,88,92,86,84
“马八”,93,86,88,80
“武九”,90,84,80,82
“刘一”,86,80,85,83
“曹二”,78,90,82,80
然后用如下代码将上面数据的文件变成为随机文件“grade.dat”。
Private Sub Command2 Click()
Dim filenol AS integer, fileno2 AS integer
Dim std AS Stdinfo
Dim C AS integer
Filenol=FreeFile
Open App.Path & ”\abc.Txt” For input AS #fileno1
fileno2 = FreeFile
Open App.Path & ”\grade.dat”For Random as #fileno2 len = Len(std)
C = 1
Do While Not EOF(filenol)
input #fileno1, Std.name,Std.yuwen, Std.math,_
std.english, std.xgrade
std.sum = Std.yuwen +Std.Math + std.English + std.xgrade
Put #fileno2, C, std
C = C + 1
Loop
Close #fileno2
Close #fileno1
End Sub
(3) 进行折半查找。
Private Sub Form_load()
Forml.Caption = “学生成绩折半查找”
End Sub
Private Sub Commandl_click()
Dim fileno AS integer
Dim low AS integer
Dim mid AS integer
Dim high AS integer
Dim Std AS Stdinfo
Dim c AS integer
fileno = FreeFile
Open App.Path & ”\grade.dat” For Random as #fileno len = Len(std)
high = LOF(fileno) \ Len(Std)
c = inputbox( “输入一个总分”)
do While low <= high
mid = (low + high) \ 2
Get #fileno, mid, Std
if Std.sum > C Then
low = mid+ l
Elseif Std.sum < C Then
High = mid - l
ElSe
Exit do
End if
Loop
if low <= high Then
Print Std.name,Std.yuwen,Std.math,Std.engliSh,Std.xgrade,Std.sum
Else
Print“成绩”;c; ”没有找到”
End if
Close #fileno
End Sub
程序运行时输入334,结果为________。
一、实验目的
(1)掌握顺序文件、随机文件、二进制文件的特点及使用方法。
(2)熟练掌握文件的打开、关闭和读写命令。
(3)学会利用文件建立简单的应用程序。
二、相关知识
1.文件的基本概念及文件类型
“文件”是存放在外部介质(磁盘、磁带等)上的相关数据的集合,每一个文件都有文件名。根据文件中数据的存放形式,将数据文件分为3种类型,即顺序文件、随机文件和二进制文件。对此,VB提供了3种文件访问的类型:顺序访问、随机访问和二进制访问。
2.顺序文件
要处理的文件只包含文本信息,其中的数据没有分成记录,就可以使用顺序型访问。进行顺序访问要用到以下3种打开文件的模式:
● 读文件:Open[路径:]文件名[.扩展名] ForInput As #文件号。
● 写文件:Open[路径:]文件名[.扩展名] For Output As #文件号。
● 追加写入:Open[路径:]文件名[.扩展名] For Append As #文件号。
3.随机文件
随机文件是由一组相同长度的记录组成,每个记录包含一个或多个字段。具有一个字段的记录对应于任一标准类型,具有多个字段的记录对应于用户定义类型。随机文件对读写顺序没有限制,可以以记录为单位,读写任何—条记录。进行随机访问要用到以下打开文件的模式:Open[路径:]文件名[.扩展名] For Random As #文件号 [Len = 记录长度]
4.二进制文件
二进制访问是以字节为单位对文件进行的访问操作,它允许用户读写文件的任何字节。通过使用二进制访问可使磁盘空间的使用降到最小,当要保持文件的尺寸尽量小时,应使用二进制型访问。要打开二进制访问的文件,Open语句打开文件的方式如下:
Open[路径:]文件名[.扩展名] For Binary As #文件号
三、实验举例
(实例1)已知某班学生成绩文件为“grade.Dat”,该文件共有6个宇段:姓名、语文成绩、数学成绩、英语成绩、计算机成绩、总分:姓名字段为8个字符的字符型,其余宇段都是数值型。设该文件已经按照总分降序排序,输入一个总分,请用折半查找的方法查找该班是否存在某分数的人,若找到,输出该学生的情况,否则输出没有找到。
根据上述描述,进行如下操作:
(1)首先在模块中建立如下结构:
Type stdinfo
name AS String * 8
yuwen AS Integer
math AS Integer
english AS Integer
xgrade AS Integer
sum AS Integer
End Type
(2)将学生信息(包括:姓名、4门课成绩)放入到abc.txt文件中。
”张三”,98,97,96,94
”李四”,94,96,95,95
“王五”,92,90,98,93
“赵六”,90,96,92,88
“孙七”,88,92,86,84
“马八”,93,86,88,80
“武九”,90,84,80,82
“刘一”,86,80,85,83
“曹二”,78,90,82,80
然后用如下代码将上面数据的文件变成为随机文件“grade.dat”。
Private Sub Command2 Click()
Dim filenol AS integer, fileno2 AS integer
Dim std AS Stdinfo
Dim C AS integer
Filenol=FreeFile
Open App.Path & ”\abc.Txt” For input AS #fileno1
fileno2 = FreeFile
Open App.Path & ”\grade.dat”For Random as #fileno2 len = Len(std)
C = 1
Do While Not EOF(filenol)
input #fileno1, Std.name,Std.yuwen, Std.math,_
std.english, std.xgrade
std.sum = Std.yuwen +Std.Math + std.English + std.xgrade
Put #fileno2, C, std
C = C + 1
Loop
Close #fileno2
Close #fileno1
End Sub
(3) 进行折半查找。
Private Sub Form_load()
Forml.Caption = “学生成绩折半查找”
End Sub
Private Sub Commandl_click()
Dim fileno AS integer
Dim low AS integer
Dim mid AS integer
Dim high AS integer
Dim Std AS Stdinfo
Dim c AS integer
fileno = FreeFile
Open App.Path & ”\grade.dat” For Random as #fileno len = Len(std)
high = LOF(fileno) \ Len(Std)
c = inputbox( “输入一个总分”)
do While low <= high
mid = (low + high) \ 2
Get #fileno, mid, Std
if Std.sum > C Then
low = mid+ l
Elseif Std.sum < C Then
High = mid - l
ElSe
Exit do
End if
Loop
if low <= high Then
Print Std.name,Std.yuwen,Std.math,Std.engliSh,Std.xgrade,Std.sum
Else
Print“成绩”;c; ”没有找到”
End if
Close #fileno
End Sub
程序运行时输入334,结果为________。
评论
查看更多