VB下如何调用文本文档?
2个回答
展开全部
方法一
使用文件
通过使用新的面向对象的 FSO 对象,诸如 Copy、 Delete、 Move 以及 OpenAsTextStream,或者使用传统的函数,诸如 Open、 Close、 FileCopy、 GetAttr 等等,您可以使用 Visual Basic 中的文件。请注意,不用考虑其文件类型就可以移动、复制或删除文件。
关于传统函数的用法的详细信息,请参阅本章的“用传统的文件 I/O 语句和函数处理文件”部分。本节的余下部分将描述如何使用新的 FSO 对象、方法和属性来使用文件。
文件操作主要有两类:
创建、添加、或删除数据,以及阅读文件
移动、复制、和删除文件
用 File System Objects 创建文件并添加数据
有三种不同方法来创建一个顺序文本文件(有时被称为“文本流”)。一种方法就是使用 CreateTextFile 方法。要创建一个空文本文件,可以:
Dim fso As New FileSystemObject, fil As File
Set fil = fso.CreateTextFile("c:\testfile.txt", True)
注意 FSO 对象模型尚不支持创建随机文件或二进制文件。要创建随机文件和二进制文件,请使用带 Random 或 Binary 标志的 Open 命令。关于如何操作随机文件和二进制文件的详细信息,请参阅本章的“使用随机文件访问”和“使用二进制文件访问”部分。
另一种方法是使用 FileSystemObject 对象的 OpenTextFile 方法,该对象的 ForWriting 标志设置为:
Dim fso As New FileSystemObject, ts As New TextStream
Set ts = fso.OpenTextFile("c:\test.txt", ForWriting)
或者使用带 ForWriting 标志设置的 OpenAsTextStream 方法:
Dim fso As New FileSystemObject, fil As File, ts As TextStream
Set fso = CreateObject("Scripting.FileSystemObject")
fso.CreateTextFile ("test1.txt")
Set fil = fso.GetFile("test1.txt")
Set ts = fil.OpenAsTextStream(ForWriting)
添加数据到文件
文本文件一经创建,就可以分三步向其中加入数据:
打开文本文件以备写入数据。
写入数据。
关闭文件。
要打开文件,可以使用下面两种方法中的任一种: File 对象的 OpenAsTextStream 方法,或 FileSystemObject 对象的 OpenTextFile 方法。
要向打开的文本文件中写入数据,可以使用 TextStream 对象的 Write 或 WriteLine 方法。它们之间的唯一差别是 WriteLine 在指定的字符串末尾添加换行符。
如果想要向文本文件中添加一个空行,请使用 WriteBlankLines 方法。
要关闭一个已打开的文件,请使用 TextStream 对象的 Close 方法。
下面这个例子示范了如何打开一个文件,使用上述三种写入方法向该文件中添加数据,然后关闭文件:
Sub Create_File()
Dim fso, txtfile
Set fso = CreateObject("Scripting.FileSystemObject")
Set txtfile = fso.CreateTextFile("c:\testfile.txt", True)
txtfile.Write ("这是一个测试例子。") ' 写入一行。
' 写入一行带有换行符的文本。
txtfile.WriteLine("Testing 1, 2, 3.")
' 向文件中写入三个换行符。
txtfile.WriteBlankLines(3)
txtfile.Close
End Sub
使用 File System Objects 读取文件
要从一个文本文件中读取数据,请使用 TextStream 对象的 Read、 ReadLine 或 ReadAll 方法:
任务 方法
从一个文件中读取指定数量的字符 Read
读取一整行(紧跟,但不包括,换行符) ReadLine
读取一个文本文件的所有内容 ReadAll
如果使用 Read 或 ReadLine 方法并且想要跳过数据的某些部分,可以使用 Skip 或 SkipLine 方法。
这些读取方法产生的文本被存储在一个字符串中,而这个字符串可以在一个控件中显示,也可以被字符串操作符分解(诸如 Left、 Right 和 Mid)、合并等等。
注意 vbNewLine 常数包含一个或多个字符(取决于操作系统)使得光标移至下一行的开头(回车/换行)。请注意,有的字符串末尾可能有这样的非打印字符。
示例
Sub Read_Files()
Dim fso As New FileSystemObject, txtfile, _
fil1 As File, ts As TextStream
Set txtfile = fso.CreateTextFile("c:\testfile.txt", True)
MsgBox "正在写入文件"
' 写入一行。
Set fil1 = fso.GetFile("c:\testfile.txt")
Set ts = fil1.OpenAsTextStream(ForWriting)
ts.Write "Hello World"
ts.Close
' 读取文件的内容。
Set ts = fil1.OpenAsTextStream(ForReading)
s = ts.ReadLine
MsgBox s
ts.Close
End Sub
移动、复制和删除文件
对文件的移动、复制和删除,FSO 对象模型都提供了两种方法:
任务 方法
移动一个文件 File.Move 或
FileSystemObject.MoveFile
复制一个文件 File.Copy 或
FileSystemObject.CopyFile
删除一个文件 File.Delete 或
FileSystemObject.DeleteFile
示例
本例先在C盘的根目录下创建了一个文本文件,并向其中写入一些信息,然后将该文件移至一个名叫 \tmp 的目录,并复制到一个叫 \temp 的目录下,最后删掉该文件在这两个子目录下的拷贝。
要运行本例,请先确认在C盘的根目录下已经存在名叫 \tmp 和 \temp 的目录。
Sub Manip_Files()
Dim fso as New FileSystemObject, txtfile, fil1, fil2
Set txtfile = fso.CreateTextFile("c:\testfile.txt", True)
MsgBox "写入文件"
' 写入一行。
txtfile.Write ("这是一个测试例子。")
' 关闭要写入的文件。
txtfile.Close
MsgBox "移动文件到 c:\tmp"
' 获得C盘根目录下的一个文件句柄。
Set fil1 = fso.GetFile("c:\testfile.txt")
' 将该文件移至 \tmp 目录下。
fil1.Move ("c:\tmp\testfile.txt")
MsgBox "复制文件到 c:\temp"
' 将该文件复制到 \temp 目录下。
fil1.Copy ("c:\temp\testfile.txt")
MsgBox "删除文件"
' 获得这些文件当前位置的句柄。
Set fil1 = fso.GetFile("c:\tmp\testfile.txt")
Set fil2 = fso.GetFile("c:\temp\testfile.txt")
' 删除这些文件。
fil1.Delete
fil2.Delete
MsgBox "全部完成!"
方法二
使用随机文件访问
File System Object 模式不提供随机文件创建或访问方法。如果需要创建或读取随机文件,此信息将能帮助您。
随机型访问文件中的字节构成相同的一些记录,每个记录包含一个或多个字段。具有一个字段的记录对应于任一标准类型,比如整数或者定长字符串。具有多个字段的记录对应于用户定义类型。例如,下边所定义的 Worker Type 创建由三个字段组成的 19 个字节的记录。
Type Worker
LastNameAs String * 10
TitleAs String * 7
RankAs String * 2
End Type
声明变量
在应用程序打开以随机型访问的文件以前,应先声明所有用来处理该文件数据所需的变量。这包括用户定义类型的变量,它对应该文件中的记录,和标准类型的其它变量,这些变量保存为随机型访问而打开的文件与处理相关的数据
定义记录类型
在打开一个文件进行随机访问之前,应定义一个类型,该类型对应于该文件包含或将包含的记录。例如,一个雇员记录文件可定义一个称为 Person 的用户定义的数据类型,如下所述:
Type Person
ID As Integer
MonthlySalary As Currency
LastReviewDate As Long
FirstName As String * 15
LastName As String * 15
Title As String * 15
ReviewComments As String * 150
End Type
在类型定义中声明字段变量
因为随机访问文件中的所有记录都必须有相同的长度,所以固定的长度对用户定义类型中的各字符串元素通常很有用,就象以上的 Person 类型说明中所示的一样,在此作为例子,FirstName 与 LastName 都具有 15 个字符的固定长度。
如果实际字符串包含的字符数比它写入的字符串元素的固定长度少,则 Visual Basic 会用空白(字符代码 32)来填充记录中后面的空间。还有,如果字符串比字段的尺寸长,则它就会被截断。如果使用 长度可变的字符串,则任何用 Put 存储的或用 Get 检索的记录总长度都不能超过在 Open 语句的 Len 分句中所指定的记录长度。
声明其它变量
在定义与典型记录对应的类型以后,应接着声明程序需要的任何其它变量,用来处理作为随机访问而打开的文件。例如:
'记录变量。
Public Employee As Person
'跟踪当前记录。
Public Position As Long
'文件中最后那条记录的编号。
Public LastRecord As Long
打开随机访问的文件
要打开随机访问的文件,Open 语句使用以下语法:
Open pathname [For Random] As filenumber Len = reclength
因为 Random 是缺省的访问类型,所以 For Random 关键字是可选项。
表达式 Len = reclength 指定了每个记录的尺寸in bytes. Note that every string variable in Visual Basic stores a Unicode string and that you must specify the byte length of that Unicode string。如果 reclength 比写文件记录的实际长度短,则会产生一个错误。如果 reclength 比记录的实际长度长,则记录可写入,只是会浪费些磁盘空间。
可用以下代码打开文件:
Dim FileNum As Integer, RecLength As Long, Employee As Person
'计算每条记录的长度。
RecLength = LenB(Employee)
'取出下一个可用文件编号。
FileNum = FreeFile
'用 Open 语句打开新文件。
Open "MYFILE.FIL" For Random As FileNum Len = RecLength
编辑随机型访问打开的文件
如要编辑随机型访问的文件,请先把记录从文件读到程序变量,然后改变各变量的值,最后,把变量写回该文件。后面各节讨论如何编辑随机型访问打开的文件。
把记录读入变量
使用 Get 语句把记录复制到变量。例如,要把一个记录从雇员记录文件拷贝到 Employee 变量,可使用以下代码:
Get FileNum, Position, Employee
在这行代码中,FileNum 包含用于打开文件的 Open 语句的编号;Position 包含要拷贝的记录数;而 Employee 声明为用户定义类型 Person,它用来接收记录的内容。
把变量写入记录
使用 Put 语句把记录添加或者替换到随机型访问打开的文件。
替换记录
要替换记录,请使用 Put 语句,指定想要替换的记录位置,例如:
Put #FileNum, Position, Employee
这个代码将用 Employee 变量中的数据来替换由 Position 所指定的编号的记录。
添加记录
要向随机访问打开的文件的尾端添加新记录,应使用前述代码段中所示的 Put 语句。把 Position 变量的值设置为比文件中的记录数多 1。例如,要在一个包含五个记录的文件中添加一个记录,把 Position 设置为 6。
下述语句把一个记录添加到文件的末尾:
LastRecord = LastRecord + 1
Put #FileNum, LastRecord, Employee
删除记录
通过清除其字段可以删除一个记录,但是该记录仍在文件中存在。通常文件中不能有空记录,因为它们会浪费空间且会干扰顺序操作。最好把余下的记录拷贝到一个新文件,然后删除老文件。
要清除随机访问文件中删除的记录,请按照以下步骤执行:
创建一个新文件。
把有用的所有记录从原文件复制到新文件。
关闭原文件并用 Kill 语句删除它。
使用 Name 语句把新文件以原文件的名字重新命名。
方法三
使用顺序文件访问
推荐您使用 File System Objects 来创建文本文件,但该信息只在需要使用旧文本文件创建方法时才提供。
当要处理只包含文本的文件时,比如由典型文本编辑器所创 建的文件-也就是说,其中的数据没有分成记录的文件,使用顺序型访问最好。顺序型访问不太适于存储很多数字,因为每个数字都要按字符串存储。一个四位数将需要 4 个字节的存储空间,而不是作为一个整数来存储时只需的 2 个字节。
打开顺序访问文件
当以顺序型访问打开一个文件时,可执行以下操作:
从文件输入字符 (Input)
向文件输出字符 (Output)
把字符加到文件 (Append)
要顺序型访问打开一个文件,Open 语句使用以下语法:
Open pathname For [Input | Output | Append] As filenumber [Len = buffersize]
当打开顺序文件作为 Input 时,该文件必须已经存在,否则,会产生一个错误。然而,当打开一个不存在的文件作为 Output 或 Append 时,Open 语句首先创建该文件,然后再打开它。
当在文件与程序之间拷贝数据时,选项 Len 参数指定缓冲区的字符数。
在打开一个文件 Input、Output 或 Append 以后,在为其它类型的操作重新打开它之前必须先使用 Close 语句关闭它。
编辑为顺序访问打开的文件
如果要编辑一个文件,先把它的内容读入到程序变量,然后改变这些变量,最后再把这些变量写回到该文件。以下各节讨论如何编辑以顺序型访问打开的各记录。
从文件中读取字符串
要检索文本文件的内容,应以顺序 Input 方式打开该文件。然后使用 Line Input#,Input( ),或者 Input# 语句将文件拷贝到程序变量中。
Visual Basic 提供了一次读写顺序文件一个字符或一行的语句和功能。
例如,以下代码段逐行读取一个文件:
Dim LinesFromFile, NextLine As String
Do Until EOF(FileNum)
Line Input #FileNum, NextLine
LinesFromFile = LinesFromFile + NextLine + Chr(13) + Chr(10)
Loop
尽管 Line Input # 到达回车换行时它会识别行尾,但是,当它把该行读入变量时,不包括回车换行。如果要保留该回车换行,代码必须添加。
也可以使用 Input # 语句,它读取文件中所写的一列的数字和/或字符串表达式。例如,要从一个邮件列表文件中读取一行,可使用以下语句:
Input #FileNum, name, street, city, state, zip
可以使用 Input 函数来从文件向变量拷贝任意数量的字符,所给的变量大小应足够大。例如,以下的代码使用 Input 把指定数目的字符复制到变量。
LinesFromFile = Input(n, FileNum)
要将整个文件复制到变量,请使用 InputB 函数将字节从文件复制到变量。因为InputB 函数返回一个 ANSI 字符串,您必须使用 StrConv 函数将 ANSI 字符串转换为一个如下的 UNICODE 字符串:
LinesFromFile = StrConv(InputB(LOF(FileNum), FileNum), vbUnicode)
把字符串写入文件
要在顺序文件中存储变量的内容,应以顺序 Output 或 Append 打开它,然后使用 Print # 语句。例如,文本编辑器可以使用以下代码行来把一个文本框的内容拷贝到文件。
Print #FileNum, TheBox.Text
Visual Basic 也支持 Write # 语句,它把一列数字和/或字符串表达式写入文件。它自动地用逗号分开每个表达式,并且在字符串表达式端放置引号。
Dim AnyString As String, AnyNumber As Integer
AnyString = "AnyCharacters"
AnyNumber = 23445
Write #FileNum AnyString, AnyNumber
这个代码段把两个表达式写入由 FileNum 指定的文件。第一个表达式包含一个字符串而第二个包含数字 23445。因而,Visual Basic 把以下的字符(包括所有标点符号)写入到文件中:
"AnyCharacters",23445
注意 如果正在用顺序型访问的 Write # 与 Input # 语句,可考虑换用随机型 或二进制型访问,因为它们更适合面向于记录的数据。
方法四
使用二进制文件访问
File System Object 模式不提供二进制文件创建或访问方法。如果需要创建或读取二进制文件,此信息将会帮助您做到。
二进制访问能提供对文件的完全控制,因为文件中的字节可以代表任何东西。例如,通过创建长度可变的记录可保存磁盘空间。当要保持文件的尺寸尽量小时,应使用二进制型访问。
注意 当把二进制数据写入文件中时,使用变量是 Byte 数据类型的数组的,而不是 String 变量。 String 被认为包含的是字符,而二进制型数据可能无法正确地存在 String 变量中。
打开二进制型访问的文件
要为二进制型访问打开文件,应使用以下 Open 语句的语法:
Open pathname For Binary As filenumber
可以看到,二进制访问中的 Open 与随机存取的 Open 不同,它没有指定 Len = reclength。如果在二进制型访问的 Open 语句中包括了记录长度,则被忽略。
在长度可变的字段中保存信息
为了更好地了解二进制型访问,考虑有一个雇员记录文件。这个文件用长度固定的记录和字段来储雇员的信息。
Type Person
ID As Integer
MonthlySalary As Currency
LastReviewDate As Long
FirstName As String * 15
LastName As String * 15
Title As String * 15
ReviewComments As String * 150
End Type
不管字段的实际内容如何,该文件每条记录都占用 209 个字节。
通过使用二进制型访问可使磁盘空间的使用降到最小。因为这不需要固定长度的字段,类型声明语句可以省略字符串长度参数。
Type Person
ID As Integer
MonthlySalary As Currency
LastReviewDate As Long
FirstName As String
LastName As String
Title As String
ReviewComments As String
End Type
Public Empl As Person '定义记录。
因为各字段长度是可变的,所以在雇员记录文件中每个雇员记录只存储在精确所需的字节中。用长度可变字段来进行二进制输入/输出的缺点,是不能随机地访问记录-必须顺序地访问记录以了解每一个记录的长度。可以直接查看文件中指定字节的位置,但是,如果记录的长度可变,则无法直接知道哪条记录在哪个字节处。
使用文件
通过使用新的面向对象的 FSO 对象,诸如 Copy、 Delete、 Move 以及 OpenAsTextStream,或者使用传统的函数,诸如 Open、 Close、 FileCopy、 GetAttr 等等,您可以使用 Visual Basic 中的文件。请注意,不用考虑其文件类型就可以移动、复制或删除文件。
关于传统函数的用法的详细信息,请参阅本章的“用传统的文件 I/O 语句和函数处理文件”部分。本节的余下部分将描述如何使用新的 FSO 对象、方法和属性来使用文件。
文件操作主要有两类:
创建、添加、或删除数据,以及阅读文件
移动、复制、和删除文件
用 File System Objects 创建文件并添加数据
有三种不同方法来创建一个顺序文本文件(有时被称为“文本流”)。一种方法就是使用 CreateTextFile 方法。要创建一个空文本文件,可以:
Dim fso As New FileSystemObject, fil As File
Set fil = fso.CreateTextFile("c:\testfile.txt", True)
注意 FSO 对象模型尚不支持创建随机文件或二进制文件。要创建随机文件和二进制文件,请使用带 Random 或 Binary 标志的 Open 命令。关于如何操作随机文件和二进制文件的详细信息,请参阅本章的“使用随机文件访问”和“使用二进制文件访问”部分。
另一种方法是使用 FileSystemObject 对象的 OpenTextFile 方法,该对象的 ForWriting 标志设置为:
Dim fso As New FileSystemObject, ts As New TextStream
Set ts = fso.OpenTextFile("c:\test.txt", ForWriting)
或者使用带 ForWriting 标志设置的 OpenAsTextStream 方法:
Dim fso As New FileSystemObject, fil As File, ts As TextStream
Set fso = CreateObject("Scripting.FileSystemObject")
fso.CreateTextFile ("test1.txt")
Set fil = fso.GetFile("test1.txt")
Set ts = fil.OpenAsTextStream(ForWriting)
添加数据到文件
文本文件一经创建,就可以分三步向其中加入数据:
打开文本文件以备写入数据。
写入数据。
关闭文件。
要打开文件,可以使用下面两种方法中的任一种: File 对象的 OpenAsTextStream 方法,或 FileSystemObject 对象的 OpenTextFile 方法。
要向打开的文本文件中写入数据,可以使用 TextStream 对象的 Write 或 WriteLine 方法。它们之间的唯一差别是 WriteLine 在指定的字符串末尾添加换行符。
如果想要向文本文件中添加一个空行,请使用 WriteBlankLines 方法。
要关闭一个已打开的文件,请使用 TextStream 对象的 Close 方法。
下面这个例子示范了如何打开一个文件,使用上述三种写入方法向该文件中添加数据,然后关闭文件:
Sub Create_File()
Dim fso, txtfile
Set fso = CreateObject("Scripting.FileSystemObject")
Set txtfile = fso.CreateTextFile("c:\testfile.txt", True)
txtfile.Write ("这是一个测试例子。") ' 写入一行。
' 写入一行带有换行符的文本。
txtfile.WriteLine("Testing 1, 2, 3.")
' 向文件中写入三个换行符。
txtfile.WriteBlankLines(3)
txtfile.Close
End Sub
使用 File System Objects 读取文件
要从一个文本文件中读取数据,请使用 TextStream 对象的 Read、 ReadLine 或 ReadAll 方法:
任务 方法
从一个文件中读取指定数量的字符 Read
读取一整行(紧跟,但不包括,换行符) ReadLine
读取一个文本文件的所有内容 ReadAll
如果使用 Read 或 ReadLine 方法并且想要跳过数据的某些部分,可以使用 Skip 或 SkipLine 方法。
这些读取方法产生的文本被存储在一个字符串中,而这个字符串可以在一个控件中显示,也可以被字符串操作符分解(诸如 Left、 Right 和 Mid)、合并等等。
注意 vbNewLine 常数包含一个或多个字符(取决于操作系统)使得光标移至下一行的开头(回车/换行)。请注意,有的字符串末尾可能有这样的非打印字符。
示例
Sub Read_Files()
Dim fso As New FileSystemObject, txtfile, _
fil1 As File, ts As TextStream
Set txtfile = fso.CreateTextFile("c:\testfile.txt", True)
MsgBox "正在写入文件"
' 写入一行。
Set fil1 = fso.GetFile("c:\testfile.txt")
Set ts = fil1.OpenAsTextStream(ForWriting)
ts.Write "Hello World"
ts.Close
' 读取文件的内容。
Set ts = fil1.OpenAsTextStream(ForReading)
s = ts.ReadLine
MsgBox s
ts.Close
End Sub
移动、复制和删除文件
对文件的移动、复制和删除,FSO 对象模型都提供了两种方法:
任务 方法
移动一个文件 File.Move 或
FileSystemObject.MoveFile
复制一个文件 File.Copy 或
FileSystemObject.CopyFile
删除一个文件 File.Delete 或
FileSystemObject.DeleteFile
示例
本例先在C盘的根目录下创建了一个文本文件,并向其中写入一些信息,然后将该文件移至一个名叫 \tmp 的目录,并复制到一个叫 \temp 的目录下,最后删掉该文件在这两个子目录下的拷贝。
要运行本例,请先确认在C盘的根目录下已经存在名叫 \tmp 和 \temp 的目录。
Sub Manip_Files()
Dim fso as New FileSystemObject, txtfile, fil1, fil2
Set txtfile = fso.CreateTextFile("c:\testfile.txt", True)
MsgBox "写入文件"
' 写入一行。
txtfile.Write ("这是一个测试例子。")
' 关闭要写入的文件。
txtfile.Close
MsgBox "移动文件到 c:\tmp"
' 获得C盘根目录下的一个文件句柄。
Set fil1 = fso.GetFile("c:\testfile.txt")
' 将该文件移至 \tmp 目录下。
fil1.Move ("c:\tmp\testfile.txt")
MsgBox "复制文件到 c:\temp"
' 将该文件复制到 \temp 目录下。
fil1.Copy ("c:\temp\testfile.txt")
MsgBox "删除文件"
' 获得这些文件当前位置的句柄。
Set fil1 = fso.GetFile("c:\tmp\testfile.txt")
Set fil2 = fso.GetFile("c:\temp\testfile.txt")
' 删除这些文件。
fil1.Delete
fil2.Delete
MsgBox "全部完成!"
方法二
使用随机文件访问
File System Object 模式不提供随机文件创建或访问方法。如果需要创建或读取随机文件,此信息将能帮助您。
随机型访问文件中的字节构成相同的一些记录,每个记录包含一个或多个字段。具有一个字段的记录对应于任一标准类型,比如整数或者定长字符串。具有多个字段的记录对应于用户定义类型。例如,下边所定义的 Worker Type 创建由三个字段组成的 19 个字节的记录。
Type Worker
LastNameAs String * 10
TitleAs String * 7
RankAs String * 2
End Type
声明变量
在应用程序打开以随机型访问的文件以前,应先声明所有用来处理该文件数据所需的变量。这包括用户定义类型的变量,它对应该文件中的记录,和标准类型的其它变量,这些变量保存为随机型访问而打开的文件与处理相关的数据
定义记录类型
在打开一个文件进行随机访问之前,应定义一个类型,该类型对应于该文件包含或将包含的记录。例如,一个雇员记录文件可定义一个称为 Person 的用户定义的数据类型,如下所述:
Type Person
ID As Integer
MonthlySalary As Currency
LastReviewDate As Long
FirstName As String * 15
LastName As String * 15
Title As String * 15
ReviewComments As String * 150
End Type
在类型定义中声明字段变量
因为随机访问文件中的所有记录都必须有相同的长度,所以固定的长度对用户定义类型中的各字符串元素通常很有用,就象以上的 Person 类型说明中所示的一样,在此作为例子,FirstName 与 LastName 都具有 15 个字符的固定长度。
如果实际字符串包含的字符数比它写入的字符串元素的固定长度少,则 Visual Basic 会用空白(字符代码 32)来填充记录中后面的空间。还有,如果字符串比字段的尺寸长,则它就会被截断。如果使用 长度可变的字符串,则任何用 Put 存储的或用 Get 检索的记录总长度都不能超过在 Open 语句的 Len 分句中所指定的记录长度。
声明其它变量
在定义与典型记录对应的类型以后,应接着声明程序需要的任何其它变量,用来处理作为随机访问而打开的文件。例如:
'记录变量。
Public Employee As Person
'跟踪当前记录。
Public Position As Long
'文件中最后那条记录的编号。
Public LastRecord As Long
打开随机访问的文件
要打开随机访问的文件,Open 语句使用以下语法:
Open pathname [For Random] As filenumber Len = reclength
因为 Random 是缺省的访问类型,所以 For Random 关键字是可选项。
表达式 Len = reclength 指定了每个记录的尺寸in bytes. Note that every string variable in Visual Basic stores a Unicode string and that you must specify the byte length of that Unicode string。如果 reclength 比写文件记录的实际长度短,则会产生一个错误。如果 reclength 比记录的实际长度长,则记录可写入,只是会浪费些磁盘空间。
可用以下代码打开文件:
Dim FileNum As Integer, RecLength As Long, Employee As Person
'计算每条记录的长度。
RecLength = LenB(Employee)
'取出下一个可用文件编号。
FileNum = FreeFile
'用 Open 语句打开新文件。
Open "MYFILE.FIL" For Random As FileNum Len = RecLength
编辑随机型访问打开的文件
如要编辑随机型访问的文件,请先把记录从文件读到程序变量,然后改变各变量的值,最后,把变量写回该文件。后面各节讨论如何编辑随机型访问打开的文件。
把记录读入变量
使用 Get 语句把记录复制到变量。例如,要把一个记录从雇员记录文件拷贝到 Employee 变量,可使用以下代码:
Get FileNum, Position, Employee
在这行代码中,FileNum 包含用于打开文件的 Open 语句的编号;Position 包含要拷贝的记录数;而 Employee 声明为用户定义类型 Person,它用来接收记录的内容。
把变量写入记录
使用 Put 语句把记录添加或者替换到随机型访问打开的文件。
替换记录
要替换记录,请使用 Put 语句,指定想要替换的记录位置,例如:
Put #FileNum, Position, Employee
这个代码将用 Employee 变量中的数据来替换由 Position 所指定的编号的记录。
添加记录
要向随机访问打开的文件的尾端添加新记录,应使用前述代码段中所示的 Put 语句。把 Position 变量的值设置为比文件中的记录数多 1。例如,要在一个包含五个记录的文件中添加一个记录,把 Position 设置为 6。
下述语句把一个记录添加到文件的末尾:
LastRecord = LastRecord + 1
Put #FileNum, LastRecord, Employee
删除记录
通过清除其字段可以删除一个记录,但是该记录仍在文件中存在。通常文件中不能有空记录,因为它们会浪费空间且会干扰顺序操作。最好把余下的记录拷贝到一个新文件,然后删除老文件。
要清除随机访问文件中删除的记录,请按照以下步骤执行:
创建一个新文件。
把有用的所有记录从原文件复制到新文件。
关闭原文件并用 Kill 语句删除它。
使用 Name 语句把新文件以原文件的名字重新命名。
方法三
使用顺序文件访问
推荐您使用 File System Objects 来创建文本文件,但该信息只在需要使用旧文本文件创建方法时才提供。
当要处理只包含文本的文件时,比如由典型文本编辑器所创 建的文件-也就是说,其中的数据没有分成记录的文件,使用顺序型访问最好。顺序型访问不太适于存储很多数字,因为每个数字都要按字符串存储。一个四位数将需要 4 个字节的存储空间,而不是作为一个整数来存储时只需的 2 个字节。
打开顺序访问文件
当以顺序型访问打开一个文件时,可执行以下操作:
从文件输入字符 (Input)
向文件输出字符 (Output)
把字符加到文件 (Append)
要顺序型访问打开一个文件,Open 语句使用以下语法:
Open pathname For [Input | Output | Append] As filenumber [Len = buffersize]
当打开顺序文件作为 Input 时,该文件必须已经存在,否则,会产生一个错误。然而,当打开一个不存在的文件作为 Output 或 Append 时,Open 语句首先创建该文件,然后再打开它。
当在文件与程序之间拷贝数据时,选项 Len 参数指定缓冲区的字符数。
在打开一个文件 Input、Output 或 Append 以后,在为其它类型的操作重新打开它之前必须先使用 Close 语句关闭它。
编辑为顺序访问打开的文件
如果要编辑一个文件,先把它的内容读入到程序变量,然后改变这些变量,最后再把这些变量写回到该文件。以下各节讨论如何编辑以顺序型访问打开的各记录。
从文件中读取字符串
要检索文本文件的内容,应以顺序 Input 方式打开该文件。然后使用 Line Input#,Input( ),或者 Input# 语句将文件拷贝到程序变量中。
Visual Basic 提供了一次读写顺序文件一个字符或一行的语句和功能。
例如,以下代码段逐行读取一个文件:
Dim LinesFromFile, NextLine As String
Do Until EOF(FileNum)
Line Input #FileNum, NextLine
LinesFromFile = LinesFromFile + NextLine + Chr(13) + Chr(10)
Loop
尽管 Line Input # 到达回车换行时它会识别行尾,但是,当它把该行读入变量时,不包括回车换行。如果要保留该回车换行,代码必须添加。
也可以使用 Input # 语句,它读取文件中所写的一列的数字和/或字符串表达式。例如,要从一个邮件列表文件中读取一行,可使用以下语句:
Input #FileNum, name, street, city, state, zip
可以使用 Input 函数来从文件向变量拷贝任意数量的字符,所给的变量大小应足够大。例如,以下的代码使用 Input 把指定数目的字符复制到变量。
LinesFromFile = Input(n, FileNum)
要将整个文件复制到变量,请使用 InputB 函数将字节从文件复制到变量。因为InputB 函数返回一个 ANSI 字符串,您必须使用 StrConv 函数将 ANSI 字符串转换为一个如下的 UNICODE 字符串:
LinesFromFile = StrConv(InputB(LOF(FileNum), FileNum), vbUnicode)
把字符串写入文件
要在顺序文件中存储变量的内容,应以顺序 Output 或 Append 打开它,然后使用 Print # 语句。例如,文本编辑器可以使用以下代码行来把一个文本框的内容拷贝到文件。
Print #FileNum, TheBox.Text
Visual Basic 也支持 Write # 语句,它把一列数字和/或字符串表达式写入文件。它自动地用逗号分开每个表达式,并且在字符串表达式端放置引号。
Dim AnyString As String, AnyNumber As Integer
AnyString = "AnyCharacters"
AnyNumber = 23445
Write #FileNum AnyString, AnyNumber
这个代码段把两个表达式写入由 FileNum 指定的文件。第一个表达式包含一个字符串而第二个包含数字 23445。因而,Visual Basic 把以下的字符(包括所有标点符号)写入到文件中:
"AnyCharacters",23445
注意 如果正在用顺序型访问的 Write # 与 Input # 语句,可考虑换用随机型 或二进制型访问,因为它们更适合面向于记录的数据。
方法四
使用二进制文件访问
File System Object 模式不提供二进制文件创建或访问方法。如果需要创建或读取二进制文件,此信息将会帮助您做到。
二进制访问能提供对文件的完全控制,因为文件中的字节可以代表任何东西。例如,通过创建长度可变的记录可保存磁盘空间。当要保持文件的尺寸尽量小时,应使用二进制型访问。
注意 当把二进制数据写入文件中时,使用变量是 Byte 数据类型的数组的,而不是 String 变量。 String 被认为包含的是字符,而二进制型数据可能无法正确地存在 String 变量中。
打开二进制型访问的文件
要为二进制型访问打开文件,应使用以下 Open 语句的语法:
Open pathname For Binary As filenumber
可以看到,二进制访问中的 Open 与随机存取的 Open 不同,它没有指定 Len = reclength。如果在二进制型访问的 Open 语句中包括了记录长度,则被忽略。
在长度可变的字段中保存信息
为了更好地了解二进制型访问,考虑有一个雇员记录文件。这个文件用长度固定的记录和字段来储雇员的信息。
Type Person
ID As Integer
MonthlySalary As Currency
LastReviewDate As Long
FirstName As String * 15
LastName As String * 15
Title As String * 15
ReviewComments As String * 150
End Type
不管字段的实际内容如何,该文件每条记录都占用 209 个字节。
通过使用二进制型访问可使磁盘空间的使用降到最小。因为这不需要固定长度的字段,类型声明语句可以省略字符串长度参数。
Type Person
ID As Integer
MonthlySalary As Currency
LastReviewDate As Long
FirstName As String
LastName As String
Title As String
ReviewComments As String
End Type
Public Empl As Person '定义记录。
因为各字段长度是可变的,所以在雇员记录文件中每个雇员记录只存储在精确所需的字节中。用长度可变字段来进行二进制输入/输出的缺点,是不能随机地访问记录-必须顺序地访问记录以了解每一个记录的长度。可以直接查看文件中指定字节的位置,但是,如果记录的长度可变,则无法直接知道哪条记录在哪个字节处。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |