背景:                 
[本书目录] [图书首页] [本书讨论区]  
链接地址:http://www.17xie.com/read-3394.html    注册17xie 一起来写书 实现您的出书梦想!

按钮,然后打开D盘的Score.TXT文件,如图8-9所示。可以看出,Print语句仍然按标准格式(用逗号分隔时)与紧凑格式(用分号分隔时)输出,并且在数值前除了保留一个符号位外,还保留了一个空格。而Write语句则在各数据项之间插入了逗号,并且给字符串加了双引号。

8-9  PrintWrite输出格式对比

另外,如果将上面的Open "D:\Score.TXT" For Output As FileNum语句中的Output改成Append,则可实现向Score.TXT文件中追加学生成绩的功能。

实例83  读出DScore.TXT中的成绩

仍然设计一个如图8-7所示的窗体,然后在其代码窗口中输入如下代码:

Option Explicit

Private FileNum As Integer

Private num As String, Course1 As Integer, Course2 As Integer, Course3 As Integer, Course4 As Integer, HintStr As String

Private Sub Form_Load()

Me.Caption = "读出保存在Score.TXT中的学生成绩"

Label1.Caption = "显示学期成绩:"

Label2.Caption = "学号:"

Label3.Caption = "邓小平理论"

Label4.Caption = "中国革命史"

Label5.Caption = "数据结构":Label6.Caption = "软件工程"

Text1.Text = Space(0):Text2.Text = Space(0):Text3.Text = Space(0)

Text4.Text = Space(0):Text5.Text = Space(0)

Command1.Caption = "Input读出":Command2.Caption = "Line Input读出"

Command3.Caption = "退出"

FileNum = FreeFile()

Open "D:\Score.TXT" For Input As FileNum     '以只读方式打开

End Sub

Private Sub Command1_Click()

Input #FileNum, num, Course1, Course2, Course3, Course4, HintStr

Text1.Text = num:Text2.Text = Str(Course1):Text3.Text = Str(Course2)

Text4.Text = Str(Course3):Text5.Text = Str(Course4)

If EOF(FileNum) Then

  Command1.Enabled = False:Command2.Enabled = False:Command3.SetFocus

End If

End Sub

Private Sub Command2_Click()

Line Input #FileNum, num

Me.Caption = num

If EOF(FileNum) Then

  Command1.Enabled = False:Command2.Enabled = False:Command3.SetFocus

End If

End Sub

Private Sub Command3_Click()

Unload Me

End Sub

Private Sub Form_Unload(Cancel As Integer)

Close FileNum

End Sub

运行这个窗体,先按Line Input读出按钮,Line Input语句读出了第一行数据,通过窗体的标题栏可以看到这组数据;再按一次该按钮,第二行数据也显示在了标题栏上,这时就可以按Input读出按钮了,第三位同学的数据出现在文本框中。可以看出,InputLine Input语句读数据的方式是有区别的。

有些同学运行此窗体时,首先按下的是Input读出按钮,结果弹出了一个出错对话框,为什么会出现这种情况呢?这主要是因为前两行是用Print语句写入的,而如果要想用Input语句正确读出数据,要求必须是用Write写入的。这就是出错的原因所在!

8.3  随机文件

所谓随机文件,是指随机存取的文件,即可以在文件的任意位置写入数据或读出数据,而不必从文件头开始。

随机文件由固定长度的记录组成,一条记录包含一个或多个字段。随机文件中每个记录都有一个记录号,每个记录的末尾不加记录结束标志。在读写数据时,只要给出记录号,就可以直接对该记录进行读写。

随机文件一律以二进制形式存储在外部介质上。对同一个随机文件,同时既可以读,又可以写,这比顺序文件方便。

8.3.1  随机文件的打开与关闭

打开文件的格式:

Open  文件名  [for  Random]  As  [#]文件号  Len=记录长度

说明:

若省略for Random,则默认为Random类型。

记录长度是一条记录所占的字节数,可以用Len函数获得。

随机文件的关闭与顺序文件相同。

8.3.2  随机文件的读写

1.写数据语句

格式:

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

说明:

省略记录号时,数据将输出到文件指针当前所指的记录处,否则,输出到由记录号指定的记录处。Put语句的输出变量只能有一个。

2.读数据语句

格式:

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

说明:

省略记录号时,数据将从文件指针当前所指的记录处读出记录,否则,读出记录号指定的记录。在Put语句中只能写一个输入变量名。

8.4  二进制文件

二进制文件是字节的集合,对二进制文件的处理,可以以字节为单位对数据进行读写。

事实上,二进制文件并不是一种文件类型,它只是对文件的一种处理方式。可以将二进制文件看作记录长度为1的随机文件。可见,两种文件可以用相同的方式进行处理。例如,读写随机文件的PutGet语句也可以用于读写二进制文件。

8.4.1  二进制文件的打开与关闭

打开文件的格式:

Open  文件名  for  Binary  As [#]文件号

二进制文件的关闭与随机文件相同。

8.4.2  二进制文件的读写

1.写数据语句

格式:

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

2.读数据语句

格式:

Get  #文件号,[位置],变量

实例84  一个简单的加解密程序

新建一个窗体,在上面画两个标签,一个文本框,三个命令按钮,一个图像控件,设置图像控件的Stretch属性为True,给图像控件设置一张图片。其界面如图8-10所示。

8-10  加解密窗体的设计界面

在其代码窗口中输入如下代码:

Option Explicit

Dim CurrentByte As Integer

Dim FileName As String

Dim CurrentPosition As Long

Dim TotalByteNum As Long

Private Sub FileNameAndLength()   '自定义过程,取出文件名,求文件的大小

If InStrRev(Text1.Text, "\") Then    '如果文件名包含路径

   FileName = Mid(Text1.Text, InStrRev(Text1.Text, "\") + 1)

Else

   FileName = Text1.Text

End If

 'FileLen(文件名)函数返回一个未打开文件的大小,单位是字节

TotalByteNum = FileLen(Text1.Text)

End Sub

Private Sub Form_Load()

Me.Caption = "一个简单的加解密程序。注意:输入文件名时要包含路径"

Label1.Caption = "请输入要加|解密的文件名:":Label2.Visible = False

Command1.Caption = "加密"

Command2.Caption = "解密"

Command3.Caption = "退出"

Text1.Text = "C:\WINDOWS\PBRUSH.EXE"

End Sub

Private Sub Command1_Click()

Label2.Visible = True:Label2.Caption = "正在加密,请稍候..."

Call FileNameAndLength

FileName = "D:\" + FileName

Open Text1.Text For Binary As #1    '源文件

Open FileName For Binary As #2     '加密后的文件

CurrentPosition = 0

Do While CurrentPosition < TotalByteNum

   CurrentPosition = CurrentPosition + 1

   Get #1, CurrentPosition, CurrentByte

   Put #2, CurrentPosition, CurrentByte + 1   '加密算法为:当前字节值加1

Loop

Close #1:Close #2

Label2.Caption = "加密完毕,加密后的文件保存在" + FileName

Command1.Enabled = False

Command2.Enabled = True

End Sub

Private Sub Command2_Click()

Label2.Caption = "正在解密,请稍候..."

Label2.Visible = True

Call FileNameAndLength

FileName = "E:\" + FileName

Open Text1.Text For Binary As #1    '源文件

Open FileName For Binary As #2     '解密后的文件

CurrentPosition = 0

Do While CurrentPosition < TotalByteNum

   CurrentPosition = CurrentPosition + 1

   Get #1, CurrentPosition, CurrentByte

   Put #2, CurrentPosition, CurrentByte - 1   '解密算法为:当前字节值减1

Loop

Close #1

Close #2

Label2.Caption = "解密完毕,解密后的文件保存在" + FileName

Command1.Enabled = True:Command2.Enabled = False

End Sub


字数:5163    最后更新:1年以前 [09-06 03:45]我爱钱 修改
本页编辑者:我爱钱  
[前一页]:Print   [后一页]:第八章
[在本页中加入书签] [收藏本书] [推荐本书]
  17xie论坛 > 本书讨论区 > 本页评论   (共0条)
发表评论

用户名称 匿名发表
评论内容
验证码

关于我们 | 版权声明 | 免责声明 | 诚聘英才 | 联系我们 | 合作伙伴 | 友情链接 | 广告合作 | 提交意见
Copyright © 2007 17xie.com 互联网协同写书平台 京ICP备08002671号