Основы офисного программирования и язык VBA


Работа с данными переменной длины - часть 2


Без всякой дополнительной информации записываются и значения остальных типов переменных с фиксированными размерами.
  • Для бинарных файлов параметр Len при записи роли не играет. Put записывает значения переменных подряд без пропусков и не помещает длины динамических строк и дескрипторы массивов.
  • Для переменных с нефиксированными размерами Get выполняет преобразования, обратные тем, что при записи выполнял оператор Put. Например, при чтении в строку переменной длины Get определяет по 2-байтовому описателю длину строки, а затем читает ее содержимое в переменную. Аналогичная расшифровка происходит и при чтении в переменные типа Variant и в динамические массивы.
  • Для бинарных файлов Get читает данные подряд. В переменные фиксированного размера считывается соответствующее их размеру число байтов. При чтении в строку переменной длины в нее считывается число символов, равное длине ее текущего значения.
  • Приведем пример работы с файлом произвольного доступа, записи которого содержат данные не фиксированного размера:

    Public Sub Test2() 'Эта процедура работает с файлом, записи которого 'содержат строки переменной длины, не превосхоящей максимума, 'а также данные типа Variant

    Dim Fam As String Dim Other As Variant 'Открытие файла произвольного доступа для чтения и записи Open Path & "Strings.var" For Random Access Read Write As #5 Len = 20

    Fam = "Степанов" Put 5, 1, Fam Get 5, 1, Fam Debug.Print Fam, LOF(5) Fam = "Архангельский" Put 5, 2, Fam Get 5, 2, Fam Debug.Print Fam, LOF(5) Fam = "Куц" Put 5, 1, Fam Get 5, 1, Fam Debug.Print Fam, LOF(5)

    'Запись типа Variant Other = "Петров" Put 5, 3, Other Get 5, 3, Other Debug.Print Other, LOF(5) Other = 125.25 Put 5, 4, Other Get 5, 4, Other Debug.Print Other, LOF(5) Other = 125 Put 5, 5, Other Get 5, 5, Other Debug.Print Other, LOF(5)

    Close #5 End Sub

    Пример 14.6.

    Вот результаты ее работы:

    Степанов 10 Архангельский 35 Куц 35 Петров 50 125,25 70 125 84

    Приведем комментарии:

    • Операторы Put и Get позволяют записать и корректно прочитать данные переменного размера, не превосходящего максимальный размер, заданный при открытии файла.
    • При записи первой строки переменной длины размер файла стал равным 10 байтам, из которых 8 байтов занимает сама строка, а два байта, предшествующий ей описатель.


      Начало  Назад  Вперед



      Книжный магазин