Имя: Пароль:
1C
1С v8
Работа с запакованными данными zlib, bzip2, gzip
0 kirillkr
 
19.02.16
17:36
При работе со сторонними веб-сервисами понадобилось работать с запакованными данными. В справке по 8ке не нашел ни одной функции по работе с запакованными данными zlib, gzip и bzip. Это так или я плохо искал? Причем запакованные данные не файлы, а какой-нибудь текст.
1 ДенисЧ
 
19.02.16
17:40
В платформе есть только zip
2 xaozai
 
19.02.16
17:41
3 kirillkr
 
19.02.16
17:52
Код oleg_km из Распаковка gzip строки для распаковки gzip.

Процедура GZIPУпаковать(вхФайл, исхФайл) Экспорт
    УдалитьФайлы(исхФайл);
    
    Типы = ПолучитьТипыДляФайлов();
    
    обФайлИсходный     = СоздатьОбъект(Типы.Файл, вхФайл, Типы.Режим.Open, Типы.Доступ.Read, Типы.Разделение.ReadWrite);
    обФайлАрхив        = СоздатьОбъект(Типы.Файл, исхФайл, Типы.Режим.CreateNew, Типы.Доступ.Write);
    обПотокКомпр     = СоздатьОбъект(ПолучитьТип("System.IO.Compression.GZipStream", "System"),
                        обФайлАрхив, ПолучитьТип("System.IO.Compression.CompressionMode", "System").Compress);
                        
    обФайлИсходный.CopyTo(обПотокКомпр);
    
    обПотокКомпр.Close();
    обФайлАрхив.Close();
    обФайлИсходный.Close();
КонецПроцедуры

Процедура GZIPРаспаковать(вхФайл, исхФайл) Экспорт
    УдалитьФайлы(исхФайл);
    
    Типы = ПолучитьТипыДляФайлов();
    
    обФайлАрхив     = СоздатьОбъект(Типы.Файл, вхФайл, Типы.Режим.Open, Типы.Доступ.Read, Типы.Разделение.ReadWrite);
    обФайлНовый        = СоздатьОбъект(Типы.Файл, исхФайл, Типы.Режим.CreateNew, Типы.Доступ.Write);
    обПотокКомпр     = СоздатьОбъект(ПолучитьТип("System.IO.Compression.GZipStream", "System"),
                        обФайлАрхив, ПолучитьТип("System.IO.Compression.CompressionMode", "System").Decompress);
                        
    обПотокКомпр.CopyTo(обФайлНовый);
    
    обПотокКомпр.Close();
    обФайлАрхив.Close();
    обФайлНовый.Close();
КонецПроцедуры
4 kirillkr
 
19.02.16
17:54
А для остальных нет внешней Native компоненты?
5 sash-ml
 
19.02.16
18:31
Можно попробовать некоторые танцы с бубном но не факт что получится
Например вот так
Попробовать запаковать строку и посмотреть что вышло

строка1 = ЗначениеВСтрокуВнутр(Новый ХранилищеЗначения("12345",Новый СжатиеДанных(6)))
    
и распаковать

строка2 = ЗначениеИзСтрокиВнутр("{""#"",e199ca70-93cf-46ce-a54b-6edc88c3a296,{#base64:AgFTS2/0iI3BTqDV67a9oKcNE2CAgPe791crBSvpKBkaGZuYKtUCAA==}}").Получить()
6 Serginio1
 
19.02.16
19:31
7 oleg_km
 
19.02.16
19:34
(4) Сергей предложил УНИВЕРСАЛЬНУЮ компоненту, внедряющую практически весь .NET в 1С. Если в .NET есть средства по работе с вашими форматами, то пожалуйста. Там сейчас ситуация, похожая на Дельфи в свое время: куча сайтов с кучей сборок на все случаи жизни. только успевай подбирать нужное.
8 oleg_km
 
19.02.16
19:35
(6) А, даже уже встроенные в .NET есть
9 oleg_km
 
19.02.16
19:36
+(8) Правда я еще с 4.0 работаю, у меня хрюши есть
10 Serginio1
 
19.02.16
19:46
(9) Тоже приходится. Но 4.6 значительно мощнее и удобнее.
(4) Попроси H A D G E H O G s
думаю не откажет.
11 kirillkr
 
20.02.16
12:44
(6)(7)
Спасибо за идею использовать .NET, но хотелось бы более универсального способа, в том числе и для клиентов на linux'е. Хотя как вариант слать запросы на сервер.
12 Serginio1
 
20.02.16
13:03
(11) Посмотри Распаковка gzip строки

Или использовать через сервисы. Кстати
http://catalog.mista.ru/public/363505/

Можно используя Scripting API можно динамически компилить методы и выполнять их
Динамическая компиляция для использования .Net событий в 1С
13 kirillkr
 
11.03.16
15:50
Для распаковки данных упакованных zlib написал ВК на FreePascal. Работает как для win, так и для linux. Для остальных видимо сделаю тоже самое.
14 trdm
 
11.03.16
15:52
(13) Залей на GitHub :)
15 trdm
 
11.03.16
15:53
+(14) Нравится мне этот способ решения. Уж коли 1С-ко стала кросплатформенной, то и ВК такие же должны бытью
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс