Оператор Get

Считывает данные из открытого файла на диске в переменную.

Синтаксис

Get [ # ] filenumber, [ recnumber ], varname

Синтаксис оператора Get состоит из следующих частей:

Part Описание
filenumber Обязательно указывать. Любой допустимый номер файла.
recnumber Необязательный параметр. Variant (Long). Номер записи (для файлов в случайном режиме) или байтовое число (для файлов в двоичном режиме), с которого начинается считывание.
варнаме Обязательно. Допустимое имя переменной, в которую считываются данные.

Замечания

Данные, считыванные с помощью Get , обычно записываются в файл с помощью Put. Первая запись или байт в файле находятся на позиции 1, вторая запись или байт — на позиции 2 и т. д. Если вы опустите прямоугольник, считывается следующая запись или байт после последней инструкцииGet или Put (или на которую указывает последняя функция Seek). Необходимо добавить разделяющие запятые, например:

Get #4,,FileBuffer 

Для файлов, открытых в случайном режиме, применяются следующие правила:

  • Если длина считываемых данных меньше длины, указанной в предложении Len инструкции Open , get считывает последующие записи по границам длины записей. Промежуток между окончанием одной записи и началом следующей заполняется содержимым файлового буфера. Так как количество заполняющих данных невозможно определить точно, рекомендуется использовать длину записи, совпадающую с длиной считываемых данных.

  • Если считываемая переменная является строкой переменной длины, оператор Get считывает 2-байтовый дескриптор, содержащий длину строки, а затем считывает данные, попадающие в переменную. Таким образом, длина записи, указанная инструкцией Len оператора Open, должна быть как минимум на 2 байта больше фактической длины строки.

  • Если переменная, в которую считываются данные, является Variant (вариантом) числового типа, оператор Get считывает 2 байта, определяющие VarType типа Variant, а затем данные, попадающие в переменную. Например, при считывании данных типа Variant, принадлежащих к VarType 3, оператор Get считывает 6 байт: 2 байта, определяющие тип Variant как VarType 3 (Long), и 4 байта, содержащие данные типа Long. Длина записи, указанная инструкцией Len оператора Open, должна быть как минимум на 2 байта больше фактического количества байт, необходимых для хранения переменной.

    Примечание.

    Используйте инструкцию Get для чтения массиваVariant с диска, но вы не можете использовать get для чтения скалярного типа Variant, содержащего массив. Оператор Get также можно использовать для чтения объектов с диска.

  • Если переменная, в которую считываются данные, имеет тип Variant, принадлежащий к VarType 8 (String), оператор Get считывает 2 байта, определяющие VarType, 2 байта, содержащие длину строки, а затем считывает данные строки. Длина записи, указанная предложением Len оператора Open, должна быть как минимум на 4 байта больше фактической длины строки.

  • Если данные считываются в динамический массив, оператор Get считывает дескриптор, длина которого равна 2 плюс 8-кратное число измерений, то есть 2 + 8 * NumberOfDimensions. Длина записи, указанная предложением Len оператора Open, должна быть больше или равна сумме всех байтов, необходимых для чтения данных и дескриптора массива. Например, для записи представленного ниже массива на диск необходимо 118 байт.

      Dim MyArray(1 To 5,1 To 10) As Integer 
    

    118 байт распределяются следующим образом: 18 байт для дескриптора (2 + 8 * 2) и 100 байт для данных (5 * 10 * 2).

  • Если данные считываются в массив фиксированной длины, оператор Get считывает только данные. Дескриптор не считывается.

  • Если данные считываются в переменную любого другого типа (кроме строк переменной длины и типа Variant), оператор Get считывает только данные из переменной. Длина записи, указанная инструкцией Len оператора Open, должна быть больше или равна длине считываемых данных.

  • Оператор Get считывает элементы типов, определенных пользователем, так же как и при их отдельном считывании, но без заполняющих данных между элементами. На диске динамический массив в пользовательском типе (записанном с помощью оператора Put) предваряется дескриптором, длина которого составляет 2 плюс 8-кратное число измерений, то есть 2 + 8 * NumberOfDimensions. Длина записи, указанная с помощью инструкции Len оператора Open, должна быть больше или равна сумме всех байтов, необходимых для считывания отдельных элементов, включая массивы и их дескрипторы.

Для файлов, открытых в двоичном режиме, применяются все правила случайного режима, кроме следующих случаев:

  • Предложение Len оператора Open не влияет на считывание. Оператор Get считывает все переменные с диска непрерывно, то есть без заполняющих данных между элементами.

  • Для всех типов массивов, кроме массивов в пользовательском типе, оператор Get считывает только данные. Дескриптор не считывается.

  • Оператор Get считывает строки переменной длины, которые не являются элементами пользовательских типов, не учитывая 2-байтовый дескриптор. Число считываемых байтов равно числу символов, уже находящихся в строке. Например, приведенный ниже оператор считывает 10 байтов из файла с номером 1:

      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 и обратная связь.