Оператор Get

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

Синтаксис

Get [# ] filenumber, [ recnumber ], varname

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

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

Комментарии

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

Get #4,,FileBuffer 

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

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

  • Если считываемая переменная является строкой переменной длины, оператор 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 для чтения scalar 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 bytes распределены следующим образом: 18 bytes для дескриптора (2 + 8 * 2), и 100 bytes для данных (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 и обратная связь.