Перейти к основному содержимому

BinaryFormat.Group

Возвращает двоичный формат, который считывает группу элементов.

Syntax

BinaryFormat.Group(
binaryFormat as function,
group as list,
optional extra as function,
optional lastKey as any
) as function

Remarks

Используются следующие параметры.

  • Параметр binaryFormat указывает двоичный формат значения ключа.
  • Параметр group предоставляет сведения о группе известных элементов.
  • Необязательный параметр extra можно использовать для определения функции, возвращающей значение двоичного формата для значения, идущего после любого непредвиденного ключа. Если параметр extra не указан, при наличии непредвиденных значений ключей возникнет ошибка.
Параметр group указывает список определений элементов. Каждое определение элемента - это список, содержащий 3-5 значений:
  • Значение ключа. Значение ключа, который соответствует элементу. Это должно быть уникальное значение в наборе элементов.
  • Формат элемента. Двоичный формат, соответствующий значению элемента. Это позволяет каждому элементу использовать свой формат.
  • Вхождение элемента. Значение BinaryOccurrence.Type, которое определяет, сколько раз элемент будет указан в группе. Если обязательные элементы отсутствуют, возникает ошибка. Обязательные или необязательные повторяющиеся элементы обрабатываются как непредвиденные значения ключа.
  • Значение элемента по умолчанию (необязательно). Если значение элемента по умолчанию отображается в списке определений элемента и не равно NULL, оно будет использоваться вместо значения по умолчанию. Значение по умолчанию для повторяющихся и необязательных элементов равно NULL, а значение по умолчанию для повторяющихся значений — пустой список { }.
  • Преобразование значения элемента (необязательно). Если функция преобразования значения элемента присутствует в списке определений элемента и не равна NULL, она будет вызвана для преобразования значения элемента перед его возвращением. Функция преобразования вызывается, только если элемент присутствует в входных данных (она не вызывается со значением по умолчанию).

Examples

Example #1

Далее предполагается, что значение ключа - это один байт, в группе 4 элемента, во всех из которых после ключа идет байт данных. Элементы отображаются во входных данных следующим образом:<ul><li>Ключ 1 является обязательным и не отображается со значением 11.</li><li>Ключ 2 повторяется и отображается дважды со значением 22 и приводит к формированию значения { 22, 22 }.</li><li>Ключ 3 не является обязательным, не отображается и приводит к формированию значения NULL.</li><li>Ключ 4 повторяется, но не отображается и приводит к формированию значения { }.</li><li>Ключ 5 не является частью группы, но появляется один раз со значением 55. Дополнительная функция вызывается со значением ключа 5 и возвращает формат, соответствующий этому значению (BinaryFormat.Byte). Значение 55 считывается и удаляется.</li></ul>

let
b = #binary({
1, 11,
2, 22,
2, 22,
5, 55,
1, 11
}),
f = BinaryFormat.Group(
BinaryFormat.Byte,
{
{1, BinaryFormat.Byte, BinaryOccurrence.Required},
{2, BinaryFormat.Byte, BinaryOccurrence.Repeating},
{3, BinaryFormat.Byte, BinaryOccurrence.Optional},
{4, BinaryFormat.Byte, BinaryOccurrence.Repeating}
},
(extra) => BinaryFormat.Byte
)
in
f(b)

Result:

{11, {22, 22}, null, {}}

Example #2

В следующем примере показано преобразование значения элемента и значения элемента по умолчанию. Повторяющийся элемент с ключом 1 суммирует список значений, считанных с помощью List.Sum. Необязательный элемент с ключом 2 имеет значение по умолчанию 123, а не NULL.

let
b = #binary({
1, 101,
1, 102
}),
f = BinaryFormat.Group(
BinaryFormat.Byte,
{
{1, BinaryFormat.Byte, BinaryOccurrence.Repeating,
0, (list) => List.Sum(list)},
{2, BinaryFormat.Byte, BinaryOccurrence.Optional, 123}
}
)
in
f(b)

Result:

{203, 123}

Category

Binary Formats.Reading a group of items