buchOfficePack – fxUnzip – часть 2 обвес
#АнатомияФункций - buchOfficePack
Всем привет!
Продолжаем пилить библиотеку. Видос уже на Ютубе
Добавили всё по красоте – параметры, справку и залили на гитхаб.
Итоговый код ниже, все мои комментарии в видосе.
Также напоминаю, что, если это начинание кажется полезным просьба не забывать подписываться на ютуб, ставить лайки и оставлять комментарии. От этого зависит будут ли в принципе появляться новые видео
Надеюсь, было полезно.
Всех благ!
@buchlotnik
#АнатомияФункций - 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