Перейти до основного вмісту

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 очікуваними елементуми у групі, у всіх із яких після ключа є байт даних. Елементи з'являються у вхідних параметрах у наведений нижче спосіб.

  • Ключ 1 – обов'язковий, і він не з'являється зі значенням 11.
  • Ключ 2 повторюється й з'являться двічі зі значенням 22 та призводить до значення { 22, 22 }.
  • Ключ 3 – необов'язковий, не з'являться та призводить до Null-значення.
  • Ключ 4 повторюється, але не з'являться, і призводить до значення { }.
  • Ключ 5 не є частиною групи, але з'являється один раз зі значенням 55. Викликається додаткова функція зі значенням ключа 5, яка повертає формат, що відповідає такому значенню (BinaryFormat.Byte). Значення 55 читається та скасовується.
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