Skip to main content

BinaryFormat.Group

Returnează un format binar care citeşte un grup de elemente.

Syntax

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

Remarks

Parametrii sunt următorii:

  • Parametrul binaryFormat specifică formatul binar al valorii cheii.
  • Parametrul group furnizează informații despre grupul de elemente cunoscute.
  • Parametrul extra opțional poate fi utilizat pentru a specifica o funcție ce va returna o valoare în format binar a valorii care urmează orice cheie ce nu era așteptată. Dacă nu se specifică parametrul extra, atunci va apărea o eroare dacă există valori neașteptate pentru chei.

Parametrul group specifică o listă de definiții ale elementelor. Fiecare definiție de element este o listă ce conține între 3 și 5 valori, după cum urmează:

  • Valoarea cheii. Valoarea cheii care corespunde elementului. Aceasta trebuie să fie unică în cadrul setului de elemente.
  • Formatul elementului. Formatul binar care corespunde valorii elementului. Acesta permite ca fiecare element să aibă un format diferit.
  • Ocurență element. Valoarea BinaryOccurrence.Type indică de câte ori se așteaptă ca elementul să apară într-un grup. Elementele obligatorii care nu sunt prezente cauzează o eroare. Elementele dublate obligatorii sau opționale sunt tratate ca valori de chei neașteptate.
  • Valoare implicită element (opțional). Dacă valoarea implicită a elementului apare în lista de definiții ale elementului și nu este nulă, atunci aceasta va fi utilizată în loc de valoarea implicită. Valoarea implicită pentru elementele repetate sau opționale este nulă și valoarea implicită pentru valorile repetate este o listă necompletată { }.
  • Transformare valoare element (opțional). Dacă funcția de transformare a valorii elementului apare în lista de definiții ale elementului și nu este nulă, atunci aceasta va fi apelată pentru a transforma valoarea elementului înainte ca acesta să fie returnat. Funcția de transformare este apelată numai dacă elementul apare în datele de intrare (nu va fi apelată niciodată cu valoarea implicită).

Examples

Example #1

Următorul element presupune o valoare pentru chei care este un singur octet, cu 4 elemente aşteptate în grup, toate care au un octet de date ce urmează cheii. Elementul apare în datele introduse după cum urmează:

  • Cheia 1 este obligatorie şi apare cu valoarea 11.
  • Cheia 2 se repetă şi apare de două ori cu valoarea 22 şi duce la o valoare de { 22, 22 }.
  • Cheia 3 este opţională şi nu apare, rezultând la o valoare null.
  • Cheia 4 se repetă, dar nu apare şi duce la o valoare de { }.
  • Cheia 5 nu face parte din grup, dar apare o dată cu valoarea 55. Funcţia suplimentară este apelată cu valoarea cheii 5 şi returnează formatul care corespunde valorii respective (BinaryFormat.Byte). Valoarea 55 este citită şi eliminată.
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

Exemplul următor ilustrează transformarea valorii elementului şi valoarea implicită a elementului. Elementul de repetare cu cheia 1 însumează lista de valori citite utilizând List.Sum. Elementul opţional cu cheia 2 are o valoare implicită de 123 în loc de 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