Get 语句
将打开的磁盘文件中的数据读取到变量中。
语法
Get [ # ] filenumber, [ recnumber ], varname
Get 语句语法包含以下部分:
Part | 说明 |
---|---|
filenumber | 必填。 任何有效的文件编号。 |
recnumber | 可选。 Variant (Long)。 从其开始读取的记录编号(Random 模式文件)或字节数(Binary 模式文件)。 |
varname | 必填。 将数据读入的有效变量名称。 |
备注
使用 Get 读取的数据通常使用 Put 写入文件。 文件中的第一个记录或字节位于位置 1,第二个记录或字节位于位置 2,依此类推。 如果省略 recnumber,则会读取最后一个 Get 或 Put语句 (或最后 一个 Seek 函数) 指向的下一条记录或字节。 必须包括分隔逗号,例如:
Get #4,,FileBuffer
对于在 Random 模式中打开的文件,以下规则将适用:
如果正在读取的数据长度小于 Open 语句的 Len 子句中指定的长度,则 Get 将读取记录长度边界上的后续记录。 一个记录的结尾与下一个记录的开头之间的空白将用文件缓冲区的现有内容进行填充。 由于无法确定填充数据的具体数量,因此,通常最好是使记录长度匹配要读取的数据的长度。
如果要读入的变量是可变长度字符串,则 Get 读取一个包含字符串长度的 2 字节描述符,然后读取转入变量中的数据。 因此, Open 语句中的 Len 子句所指定的记录长度必须至少比字符串的实际长度多 2 个字节。
如果要读入的变量是数值类型的 Variant,则 Get 读取标识 Variant 的 VarType 的 2 个字节,然后读取转入变量中的数据。 例如,在读取 VarType 3 的 Variant 时,Get 读取 6 个字节:将 Variant 标识为 VarType 3 (Long) 的 2 个字节和包含 Long 数据的 4 个字节。 Open 语句中的 Len 子句指定的记录长度必须至少比存储变量所需的实际字节数长 2 个字节。
注意
使用 Get 语句从磁盘读取 Variant数组 ,但不能使用 Get 读取包含数组的标量 Variant 。 此外,无法使用 Get 读取磁盘中的对象。
如果要读入的变量是 VarType 8 (String) 的 Variant,则 Get 读取标识 VarType 的 2 个字节(即指示字符串的长度的 2 个字节),然后读取字符串数据。 Open 语句中的 Len 子句指定的记录长度必须至少比字符串的实际长度长 4 个字节。
如果要写入的变量是动态数组,则 Get 读取其长度为 2 加上 8 与维度数的乘积(即,2 + 8 * NumberOfDimensions)所得的结果的描述符。 Open 语句中的 Len 子句所指定的记录长度必须大于或等于读取数组数据和数据描述符所需的所有字节的和。 例如,在将数组写入磁盘时,下面的数组声明需要 118 个字节。
Dim MyArray(1 To 5,1 To 10) As Integer
118 个字节的分布方式如下:描述符 ()
2 + 8 * 2
18 个字节,100 个字节用于数据 (5 * 10 * 2
) 。如果要读入的变量是固定大小的数组,则 Get 仅读取数据。 不读取描述符。
如果要读入的变量是任何其他类型的变量(不是可变长度的字符串或 Variant),则 Get 仅读取变量数据。 Open 语句中的 Len 子句所指定的记录长度必须大于或等于要读取的数据的长度。
Get 读取用户定义类型的元素(就像单独读取每个元素一样,只不过各个元素之间无填充)。 在磁盘上,将为用户定义类型中的动态数组(使用 Put 编写)添加一个描述符前缀,该描述符的长度等于 2 加上 8 与维度数的乘积(即,2 + 8 * NumberOfDimensions)所得的结果。 Open 语句中的 Len 子句所指定的记录长度必须大于或等于读取各个元素(包括任何数组及其描述符)所需的所有字节的和。
对于在 Binary 模式中打开的文件,所有 Random 规则都将适用,但有以下例外:
Open 语句中的 Len 子句无效。 Get 连续读取磁盘中的所有变量;即,记录之间没有填充。
对于用户定义类型中的数组之外的任何数组, Get 仅读取数据。 不读取描述符。
Get 读取不是用户定义类型的元素的可变长度字符串,而不需要 2 字节长度描述符。 读取的字节数等于字符串中已有的字符数。 例如,下列语句从文件编号 1 读取 10 个字节:
VarString = String(10," ") Get #1,,VarString
示例
此示例使用 Get 语句将文件中的数据读入变量。 此示例假定 TESTFILE
是包含用户定义类型 Record
的五个记录的文件。
Type Record ' Define user-defined type.
ID As Integer
Name As String * 20
End Type
Dim MyRecord As Record, Position ' Declare variables.
' Open sample file for random access.
Open "TESTFILE" For Random As #1 Len = Len(MyRecord)
' Read the sample file using the Get statement.
Position = 3 ' Define record number.
Get #1, Position, MyRecord ' Read third record.
Close #1 ' Close file.
另请参阅
支持和反馈
有关于 Office VBA 或本文档的疑问或反馈? 请参阅 Office VBA 支持和反馈,获取有关如何接收支持和提供反馈的指南。