buchOfficePack – fxUnzip – часть 2 обвес

#АнатомияФункций - buchOfficePack



Всем привет!

Продолжаем пилить библиотеку. Видос уже на Ютубе



Добавили всё по красоте – параметры, справку и залили на гитхаб.

Итоговый код ниже, все мои комментарии в видосе.



fxUnzip=[func=(ZIP, optional options)=>

[

encod = [a=options[Encoding]?,b=if a = null then 866 else a][b],

compr = (x)=> if x =0 then Compression.None else Compression.Deflate,



u16 =BinaryFormat.ByteOrder(BinaryFormat.UnsignedInteger16,ByteOrder.LittleEndian),

u32 =BinaryFormat.ByteOrder(BinaryFormat.UnsignedInteger32,ByteOrder.LittleEndian),



get=(x)=>BinaryFormat.Record(

if Binary.Range(x,0,4)=#binary({0x50,0x4b,0x03,0x04})

then [ Name=BinaryFormat.Text(u16(Binary.Range(x,26,2)),encod),

Extr=BinaryFormat.Binary(u16(Binary.Range(x,28,2))),

Value=BinaryFormat.Transform(BinaryFormat.Binary(u32(Binary.Range(x,18,4))),(y)=>Binary.Decompress(y,compr(u16(Binary.Range(x,8,2)))))]

else []

),



lst = BinaryFormat.List(BinaryFormat.Choice(BinaryFormat.Binary(30),get),(x)=>x<>[])(ZIP),

to = Table.FromRecords(List.RemoveLastN(lst,1),type table [Name=text,Value=binary])][to],



typ =type function (ZIP as (type binary meta [Documentation.FieldCaption="ZIP - бинароное содержимое (zip, xlsx, docx, pptx и т.д.)"]), optional options as record) as table meta

[Documentation.Name = "fxUnzip (@buchlotnik)",

Documentation.LongDescription ="функция считывает содержимое архива и возвращает таблицу с полями:<p> <b>Name</b> - имя файла (с путём к файлу) <p><b>Value</b> - бинарное содержимое файла. <p>Необязательный аргумент <b>options</b> на текущий момент поддерживает следующие поля: <p>1) <b>Encoding</b> - требуется для корректного чтения не латинских имён файлов (по умолчанию <b>866 - кириллица</b>)"],



result = Value.ReplaceType(func,typ)][result]




Также напоминаю, что, если это начинание кажется полезным просьба не забывать подписываться на ютуб, ставить лайки и оставлять комментарии. От этого зависит будут ли в принципе появляться новые видео



Надеюсь, было полезно.

Всех благ!

@buchlotnik