под каждую версию (??):
(ZIP, optional cp)=>
[ u=(x)=>BinaryFormat.ByteOrder(x, ByteOrder.LittleEndian),
ui16=u(BinaryFormat.UnsignedInteger16),
ui32=u(BinaryFormat.UnsignedInteger32),
b=(x)=>BinaryFormat.Binary(x),
f=(x)=>BinaryFormat.Transform(b(x),(x)=>Binary.Decompress(x,Compression.Deflate)),
getfile = BinaryFormat.Choice(b(30),
(x)=>if Binary.Range(x,0,4) = #binary({0x50,0x4b,0x03,0x04})
then BinaryFormat.Record([ FileName = BinaryFormat.Text(ui16(Binary.Range(x,26,2)),cp??866),
Extras = b(ui16(Binary.Range(x,28,2))),
Content = f(ui32(Binary.Range(x,18,4))),
flag = true])
else BinaryFormat.Record([flag = false])),
filelist=BinaryFormat.List(getfile, each [flag] = true)(ZIP),
remove=List.RemoveLastN(filelist,1),
to = Table.FromRecords(remove, type table [FileName = text, Content = binary])][to]
не тестил, но да, как оно с Binary.Range(x,4) могло работать
не могло, не ту сборку цапнул, не сразу увидел - у меня их тут было... )))
Вот блин) как писал Клаузевиц "Военное дело просто и вполне доступно здравому уму человека. Но воевать сложно." То же и со многими другими сферами деятельности, включая наши) С наступающим отпуском меня. Я спать)
Обсуждают сегодня