Оператор 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 байта больше фактического количества байт, необходимых для хранения переменной.
Если переменная, в которую считываются данные, имеет тип 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 и обратная связь.