Книга знаний

1С:Предприятие / v8 / Приемы программирования / Встроенный язык

v8: Как рассчитать размер данных помещенных в объект ХранилищеЗначения

В статье приводится пример расчета размера данных помещенных в объект ХранилищеЗначенияАвтор статьи:
Последняя редакция №1 от 18.10.06
URL: http://kb.mista.ru/article.php?id=386

Ключевые слова: размер данных, ХранилищеЗначения, Base64


Любые данные в 1С можно получить в виде строкового представления с помощью функции ЗначениеВСтрокуВнутр.
Выполним данную функцию с объектом ХранилищеЗначения:
ХранилищеЗначения = Новый ХранилищеЗначения(Новый ДвоичныеДанные(ИмяФайла));
ХранилищеЗначенияСтрока = ЗначениеВСтрокуВнутр(ХранилищеЗначения);

Функция возвращает строку вида:
{"#",e199ca70-93cf-46ce-a54b-6edc88c3a296,{#base64:AQE9AAAAAAAAAOЇ}}

Т.е. по указанию "base64" можно предположить, что двоичные данные кодированы в формате Base64, который используется для преобразования двоичного формата в текстовый. Более подробно про Base64 можно прочитать перейдя по этой ссылке: http://www.delphikingdom.com/asp/viewitem.asp?catalogid=691

Если коротко, то кодирование сводится к тому что 3 байта двоичных данных можно представить 4 символами в кодировке ASCII. Но если приходится кодировать на 3 байта, а 2 или 1 то в конце 4х символьного стринга добавляются символы "=" и "==".

Следующий шаг, получаем двоичные данные:
Поз = Найти(ХранилищеЗначенияСтрока,"#base64:");

ДанныеBase64 = Сред(ХранилищеЗначенияСтрока,Поз+8,СтрДлина(ХранилищеЗначенияСтрока)-Поз-10);

Обладая данными можем расчитать кол-во байтов помещенных в эти данные:
ДлинаФайла = СтрДлина(ДанныеBase64) - ?(Прав(ДанныеBase64,1) = "=",1,0) - ?(Прав(ДанныеBase64,2) = "==",1,0);
ДлинаФайла = Цел(ДлинаФайла/4*3)-83;

Первая строчка рассчитывает кол-во реальных символов, которые кодирует данные. Во второй строчке выполняем ДлинаФайла/4*3 и целый результат, поскольку тот остаток, который образуется это есть то случай, когда на завершение остаются один или два байта. Опытным путем было вычисленно, что сам объект ХранилищеЗначения занимает 83 байта, т.е. на "полезные данные" остается все остальное пространство.

Следующий пример реализации обработки, которая считает размер файлов в байтах:
http://proba1c.narod.ru/downloads/razmer.rar

PS: эксперимент не проводился со сжатым хранилищем значения, но скорее всего в результате будет получен размер сжатых данных
Закладка

Описание | Рубрикатор | Поиск | ТелепатБот | Захваченные статьи | Установки | Форум
© Станислав Митичкин (Волшебник), 2005-2021 | Mista.ru

Яндекс.Метрика