Оператор Put

Записывает данные из переменной в файл на диске.

Синтаксис

Put [ # ] filenumber, [ recnumber ], varname

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

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

Замечания

Данные, записанные с помощью Put , обычно считываются из файла с помощью Get.

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

Put #4,,FileBuffer 

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

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

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

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

    Примечание.

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

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

  • Если записываемая переменная является динамическим массивом, put записывает дескриптор, длина которого равна 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).

  • Если записываемая переменная является массивом фиксированного размера, оператор Put записывает только данные. Дескриптор не записывается на диск.

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

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

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

  • Предложение Len оператора Open не оказывает какого-либо влияния. Оператор Put записывает все переменные на диск последовательно; это означает, что не применяется заполнение между записями.

  • Для любого другого массива, отличного массива, имеющего тип, определяемый пользователем, оператор Put записывает только данные. Дескриптор при этом не записывается.

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

      VarString$ = String$(10," ") 
      Put #1,,VarString$ 
    
    

Пример

В этом примере используется оператор Put для записи данных в файл. В файл записываются пять записей определяемого пользователем типа.

Type Record ' Define user-defined type. 
 ID As Integer 
 Name As String * 20 
End Type 
 
Dim MyRecord As Record, RecordNumber ' Declare variables. 
' Open file for random access. 
Open "TESTFILE" For Random As #1 Len = Len(MyRecord) 
For RecordNumber = 1 To 5 ' Loop 5 times. 
 MyRecord.ID = RecordNumber ' Define ID. 
 MyRecord.Name = "My Name" & RecordNumber ' Create a string. 
 Put #1, RecordNumber, MyRecord ' Write record to file. 
Next RecordNumber 
Close #1 ' Close file. 

См. также

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.