Имя: Пароль:
1C
 
новый СжатиеДанных(9) можно ли узнать на скока сжимает?
0 ПульсЪ
 
27.10.10
18:25
всем привет ) есть кусок кода:

ХранилищО = Новый ХранилищеЗначения(ВыбФайл,новый СжатиеДанных(9));



есть ВыбФайл, можно ли как нибудь узнать размер файла, после того как он сжат.. до сжатия размер легко выцепить, а после..? кто нибудь вкурсе, мб подскажите)
1 le_
 
27.10.10
18:40
Примерно так же, как zip, наверное, жмет.
Deflate, как пишут, в gzip, pkzip используется.

Точно вряд ли получится вычислить.
2 le_
 
27.10.10
18:48
+ (1) Если сомневаешься, в эффективности, можешь сначала 7-zip-ом, например, паковать, а потом в хранилище подсовывать.
3 ПульсЪ
 
28.10.10
11:24
(2) сомневаюсь.. хотя хз.. нуна попробывать cf грузануть и попробывать думаю ккой нить большой вордовский документ и сравнить... сначала паковать потом грузить не оч подходит, т.к. хочу довести все до полного автомата..
4 ПульсЪ
 
28.10.10
12:12
ап
5 ПульсЪ
 
28.10.10
12:52
не ап, больше никаких вариков небудет?)
6 Murzz
 
28.10.10
13:02
(3) cf не имеет к этому никакого отношения
7 forforumandspam
 
28.10.10
13:08
До = Новый ХранилищеЗначения(Новый ДвоичныеДанные(ИмяФайла), Новый СжатиеДанных(0));

После = Новый ХранилищеЗначения(Новый ДвоичныеДанные(ИмяФайла), Новый СжатиеДанных(9));


Дальше допили формулу из Книга знаний: Как рассчитать размер данных помещенных в объект ХранилищеЗначения
8 forforumandspam
 
28.10.10
13:12
+(7) не рекомендую таким способом большие объёмы проверять. ;-)
9 H A D G E H O G s
 
28.10.10
13:14
Зачем?
10 nop
 
28.10.10
13:16
ЗначениеВФайл() и проверить размер? (не путать размер на диске с размером файла)
11 forforumandspam
 
28.10.10
13:33
(10) Не прокатит.

Глобальный контекст
ЗначениеВФайл (ValueToFile)


Описание:
Сохраняет любое сериализуемое значение в файл.
12 ПульсЪ
 
28.10.10
13:37
(8) нащет больших объемов (>гб) я проблему решил)

а это ща попробую
13 forforumandspam
 
28.10.10
13:40
(12) Начни с малых объёмов.
14 aleks-id
 
28.10.10
13:45
РезультатПак = ЗначениеВСтрокуВнутр(Новый ХранилищеЗначения(Новый ДвоичныеДанные("D:\win.txt"), Новый СжатиеДанных(9)));
НачальнаяПозиция = Найти(РезультатПак, "base64:")+7;
ДлинаРП = СтрДлина(РезультатПак);
Стр64 = Сред(РезультатПак, НачальнаяПозиция, ДлинаРП-НачальнаяПозиция-2);
ДлинаФайла = Окр((СтрДлина(Стр64)-2*(СтрЧислоСтрок(Стр64)-1))/4*3);
ДлинаФайла = ДлинаФайла - ?(Прав(Стр64,1) = "=",1,0) - ?(Прав(Стр64,2) = "==",1,0);
Сообщить("Со сжатием: " + ДлинаФайла);
15 Rabbit
 
28.10.10
13:49
что-то меня эта девятка на мысли о bzip наталкивает.
16 aleks-id
 
28.10.10
13:56
Base64Значение(Стр64).Записать("D:\win.bin");

проверьте сами что за формат :)
17 forforumandspam
 
28.10.10
14:13
(14) Неправильно.
18 ПульсЪ
 
28.10.10
14:13
(14) спасибо ман, вроде работает)
19 forforumandspam
 
28.10.10
14:15
(18) Не слушай его. Он во первых забыл:
Хран = Новый ХранилищеЗначения(Новый ДвоичныеДанные("D:\win.txt"), Новый СжатиеДанных(9));
РезультатПак = ЗначениеВСтрокуВнутр(Хран.Получить());
20 ПульсЪ
 
28.10.10
14:18
(19) да не, вродерабит, проверил сжал кодом сначала, потом 7z этот же файл, погрешность разница около 2000 байт, думаю это из за того что разбивка по разным алгоритмам..
21 forforumandspam
 
28.10.10
14:22
(20) Ты попробуй коэффициент сжатия "0" поставить и получить первоначальный размер файла. Если будешь использовать код из (14), то не получишь равенства.
22 ПульсЪ
 
28.10.10
14:22
(21) ща
23 ПульсЪ
 
28.10.10
14:24
разница

файл объем кодом 4 506 389

сам файл         4 505 600


впринципе почти норм, видимо просто алгоритм формулы неточность выдает
24 forforumandspam
 
28.10.10
14:27
(23) Нет, смотри код (19). Не забудь "Хран.Получить()"
25 ПульсЪ
 
28.10.10
14:31
(24) ща поправлю, попробуем)
26 forforumandspam
 
28.10.10
14:32
А ещё лишние 2 оператора. Вот эти строчки нафиг не нужны:

ДлинаРП = СтрДлина(РезультатПак);
Стр64 = Сред(РезультатПак, НачальнаяПозиция, ДлинаРП-НачальнаяПозиция-2);

если заменить
  РезультатПак = ЗначениеВСтрокуВнутр(
на
  РезультатПак = Base64Строка(
27 ПульсЪ
 
28.10.10
14:58
видимо да, ща попробую, т.к. код перестал вооще рабить и стал показывать один и тот же размер))
28 forforumandspam
 
28.10.10
15:03
(27) Сам проверил, Хран.Получить(), получается аналог "разархивировать". Значит его всё-таки надо убрать. И получается, что при коэффициенте "0" размер не совпадает из-за особенности типа "ХранилищеЗначения". Но (26) всё-же прими к сведению.
29 ПульсЪ
 
28.10.10
15:05
(28) да да, вот я о том же и говорил, что алгоритмы сжатия видим различаются, 7z чуть получше )
30 ПульсЪ
 
28.10.10
15:06
(29) хотя мб и от Хранилища... хз, но меня лично результат вполне устраивает
31 aleks-id
 
28.10.10
16:26
с точностью до байта:


//Создаем хранилище и сохранаем в него данные
Хран = Новый ХранилищеЗначения(Новый ДвоичныеДанные("D:\win.txt"), Новый СжатиеДанных(9));

//Получаем строку, содержащую служебный заголовок и двоичные данные в формате base64
РезультатПак = ЗначениеВСтрокуВнутр(Хран);

//Отсекаем заголовок и выцепаем строку base64 в чистом виде
Стр64 = Сред(РезультатПак, Найти(РезультатПак, "base64:")+7, СтрДлина(РезультатПак)-Найти(РезультатПак, "base64:")-9);
//Стр64 = Сред(РезультатПак, НачальнаяПозиция, ДлинаРП-НачальнаяПозиция-2);

//Записываем сжатые двоичные данные в файл
Base64Значение(Стр64).Записать("D:\win.bin");

Файл = Новый Файл("D:\win.bin");
//Получаем размер файла
Сообщить(Файл.Размер());
32 ПульсЪ
 
09.11.10
18:27
(31) работает) спасибо)

для сравнения выяснил что 1C архиватор хуже чем 7z архиватор, ворд, эксель, текстовые сжимает не очень, зато трек .mp3 сжал чуток получше чем .7z

интересный момент)
33 H A D G E H O G s
 
09.11.10
21:51
(31)

С точностью до байта без записи в файл:

Хран = Новый ХранилищеЗначения(Новый ДвоичныеДанные("D:\win.txt"), Новый СжатиеДанных(9));
//Получаем строку, содержащую служебный заголовок и двоичные данные в формате base64
РезультатПак = ЗначениеВСтрокуВнутр(Хран);

//Отсекаем заголовок и выцепаем строку base64 в чистом виде
Стр64 = Сред(РезультатПак, Найти(РезультатПак, "base64:")+7, СтрДлина(РезультатПак)-Найти(РезультатПак, "base64:")-9);
Сообщить(СтрДлина(Стр64)*0.75);
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.