18c0693f

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


До сих пор мы усиленно подчеркивали, что при работе с файлом произвольного доступа размер записи фиксирован и это предполагает хранение в таких файлов данных, размер которых фиксирован в момент их объявления. На самом деле, это не так и в таких файлах можно хранить и строки переменной длины и данные типа Variant. В этих случаях просто следует быть более осторожным, поскольку из-за сложности правил хранения таких данных повышается возможность ошибки. Вот некоторые правила, согласно которым оператор Put размещает данные в файле, а оператор Get их читает:



Приведем пример работы с файлом произвольного доступа, записи которого содержат данные не фиксированного размера:

Пример 14.6.

(html, txt)

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

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

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



Заканчивая тему работы с файлами произвольного доступа, хотим еще раз обратить внимание на некоторые опасные моменты, возникающие в процессе работы с ними и не контролируемые VBA:

  1. Явно задавайте при открытии файла, как при чтении, так и при записи параметр Len ѕ максимальный размер записи. Если этого не сделать, то программа будет работать, но, к сожалению, результаты могут быть не предсказуемыми.
  2. Будьте особенно внимательными при работе с данными переменной длины, помните, что к данным автоматически присоединяются описатели.
  3. Размер файла определяется записью с максимальным номером. Чтобы избежать большого числа "дырок" в файле стройте разумные функции ключа так, чтобы ключи записей занимали достаточно плотный начальный интервал от 1 до N.




Описатель позволяет оператору Get корректно прочитать эту строку.
  • Запись второй строки начинается с 21-го байта, границы первой записи, общий размер файла становится равным 35 с учетом размера второй строки и ее описателя.
  • Третья запись не изменяет размера файла, поскольку происходит изменение значения первой записи, так что файл по-прежнему содержит только две записи.
  • Далее начинается запись данных типа Variant. Теперь при записи строки используются два описателя, занимающие 4 байта.
  • Две последние записи содержат числовые данные Double (8 байтов) и Integer (2 байта) с их описателями.


  • Заканчивая тему работы с файлами произвольного доступа, хотим еще раз обратить внимание на некоторые опасные моменты, возникающие в процессе работы с ними и не контролируемые VBA:

    1. Явно задавайте при открытии файла, как при чтении, так и при записи параметр Len ѕ максимальный размер записи. Если этого не сделать, то программа будет работать, но, к сожалению, результаты могут быть не предсказуемыми.
    2. Будьте особенно внимательными при работе с данными переменной длины, помните, что к данным автоматически присоединяются описатели.
    3. Размер файла определяется записью с максимальным номером. Чтобы избежать большого числа "дырок" в файле стройте разумные функции ключа так, чтобы ключи записей занимали достаточно плотный начальный интервал от 1 до N.