使用 Get 读取的数据通常使用 Put 写入文件。 文件中的第一个记录或字节位于位置 1,第二个记录或字节位于位置 2,依此类推。 如果省略 recnumber ,则会读取最后一个 Get Put 语句 (或最后 一个 Seek 函数) 指向的下一条记录或字节。 必须包括分隔逗号,例如:

Get #4,,FileBuffer 

对于在 Random 模式中打开的文件,以下规则将适用:

  • 如果正在读取的数据长度小于 Open 语句的 Len 子句中指定的长度,则 Get 将读取记录长度边界上的后续记录。 一个记录的结尾与下一个记录的开头之间的空白将用文件缓冲区的现有内容进行填充。 由于无法确定填充数据的具体数量,因此,通常最好是使记录长度匹配要读取的数据的长度。

  • 如果要读入的变量是可变长度字符串,则 Get 读取一个包含字符串长度的 2 字节描述符,然后读取转入变量中的数据。 因此, Open 语句中的 Len 子句所指定的记录长度必须至少比字符串的实际长度多 2 个字节。

  • 如果要读入的变量是数值类型Variant,则 Get 读取标识 VariantVarType 的 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 支持和反馈,获取有关如何接收支持和提供反馈的指南。

  •