Книга знаний

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

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

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

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


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

Функция возвращает строку вида:
AQE9AAAAAAAAAOЇ=

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

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

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


Т.к. формат base64 имеет ограничение - общая длина строки, состоящая из 4-х символьных стрингов составляет 72 символа (за исключением самой последней строки - там уже сколько получится), то нужно из общего числа символов отнять число символов перевода строки (Символ(13)+Символ(10)). Это действие выполняет выражение 2*(СтрЧислоСтрок(ДанныеBase64)-1). Во второй строчке учитываем случай, когда на завершение остаются один или два байта.

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

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

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

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