BinaryFormat.Group
BinaryFormat.Group(binaryFormat as function, group as list, optional extra as nullable function, optional lastKey as any) as function
Parametry jsou následující:
- Parametr
binaryFormat
určuje binární formát hodnoty klíče. - Parametr
group
poskytuje informace o skupině známých položek. extra
Volitelný parametr lze použít k určení funkce, která vrátí hodnotu binárního formátu pro hodnotu za libovolným neočekávaným klíčem.extra
Pokud parametr není zadaný, zobrazí se chyba, pokud existují neočekávané hodnoty klíče.
Parametr group
určuje seznam definic položek. Každá definice položky je seznam obsahující hodnoty 3–5 následujícím způsobem:
- Hodnota klíče. Hodnota klíče, která odpovídá položce. Musí to být jedinečné v rámci sady položek.
- Formát položky Binární formát odpovídající hodnotě položky. To umožňuje, aby každá položka měla jiný formát.
- Výskyt položky Hodnota BinaryOccurrence.Type pro kolikrát se očekává, že se položka zobrazí ve skupině. Požadované položky, které nejsou přítomné, způsobují chybu. Požadované nebo volitelné duplicitní položky se zpracovávají jako neočekávané hodnoty klíče.
- Výchozí hodnota položky (volitelné) Pokud se výchozí hodnota položky zobrazí v seznamu definic položek a není null, použije se místo výchozí hodnoty. Výchozí hodnota pro opakování nebo volitelné položky je null a výchozí hodnota pro opakující se hodnoty je prázdný seznam { }.
- Transformace hodnot položky (volitelné) Pokud je funkce transformace hodnoty položky v seznamu definic položek a není null, bude volána k transformaci hodnoty položky před jejím vrácením. Transformační funkce je volána pouze v případě, že se položka zobrazí ve vstupu (nikdy nebude volána s výchozí hodnotou).
Následující příklad předpokládá hodnotu klíče, která je jedním bajtem, se 4 očekávanými položkami ve skupině, z nichž všechny mají bajt dat za klíčem. Položky se ve vstupu zobrazí takto:
- Klíč 1 je povinný a zobrazuje se s hodnotou 11.
- Klíč 2 se opakuje a zobrazí se dvakrát s hodnotou 22 a výsledkem je hodnota { 22, 22 }.
- Klíč 3 je volitelný a nezobrazuje se a výsledkem je hodnota null.
- Klíč 4 se opakuje, ale nezobrazuje se a výsledkem je hodnota { }.
- Klíč 5 není součástí skupiny, ale zobrazí se jednou s hodnotou 55. Další funkce se volá s hodnotou klíče 5 a vrátí formát odpovídající této hodnotě (BinaryFormat.Byte). Hodnota 55 se přečte a zahodí.
Využití
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)
Výstup
{11, {22, 22}, null, {}}
Následující příklad znázorňuje transformaci hodnoty položky a výchozí hodnotu položky. Opakující se položka s klíčem 1 sečte seznam hodnot přečtených pomocí List.Sum. Volitelná položka s klíčem 2 má výchozí hodnotu 123 místo hodnoty null.
Využití
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)
Výstup
{203, 123}