Оператор Get
Считывает данные из открытого файла на диске в переменную.
Синтаксис
Get [ # ] filenumber, [ recnumber ], varname
Синтаксис оператора Get состоит из следующих частей:
Part | Описание |
---|---|
filenumber | Обязательно указывать. Любой допустимый номер файла. |
recnumber | Необязательный параметр. Variant (Long). Номер записи (для файлов в случайном режиме) или байтовое число (для файлов в двоичном режиме), с которого начинается считывание. |
varname | Обязательно. Допустимое имя переменной, в которую считываются данные. |
Замечания
Данные, считыванные с помощью 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 и обратная связь.