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