BinaryFormat.Group
Składnia
BinaryFormat.Group(binaryFormat as function, group as list, optional extra as nullable function, optional lastKey as any) as function
Informacje
Parametry są następujące:
- Parametr
binaryFormat
określa format binarny wartości klucza. - Parametr
group
zawiera informacje o grupie znanych elementów. - Opcjonalny parametr
extra
może służyć do określenia funkcji, która zwróci wartość formatu binarnego dla wartości następującej po nieoczekiwanym kluczu. Jeśli nie określono parametruextra
, zostanie zgłoszony błąd, jeśli istnieją nieoczekiwane wartości klucza.
Parametr group
określa listę definicji elementów. Każda definicja elementu jest listą zawierającą wartości od 3 do 5 w następujący sposób:
- Wartość klucza. Wartość klucza odpowiadającego elementowi. Musi to być unikatowe w obrębie zestawu elementów.
- Format elementu. Format binarny odpowiadający wartości elementu. Dzięki temu każdy element ma inny format.
- Wystąpienie elementu. Wartość BinaryOccurrence.Type, ile razy element ma pojawić się w grupie. Wymagane elementy, które nie są obecne, powodują błąd. Wymagane lub opcjonalne zduplikowane elementy są traktowane jak nieoczekiwane wartości klucza.
- Wartość elementu domyślnego (opcjonalnie). Jeśli domyślna wartość elementu pojawi się na liście definicji elementu i nie ma wartości null, zostanie użyta zamiast wartości domyślnej. Wartość domyślna dla powtarzających się lub opcjonalnych elementów ma wartość null, a wartość domyślna dla powtarzających się wartości to pusta lista { }.
- Przekształcenie wartości elementu (opcjonalnie). Jeśli funkcja przekształcania wartości elementu znajduje się na liście definicji elementu i nie ma wartości null, zostanie wywołana w celu przekształcenia wartości elementu przed jej zwróceniem. Funkcja transform jest wywoływana tylko wtedy, gdy element pojawi się w danych wejściowych (nigdy nie będzie wywoływany z wartością domyślną).
Przykład 1
Założono, że wartość klucza jest pojedynczym bajtem, przy czym oczekuje się 4 elementów w grupie, a każdy z nich ma bajt danych po kluczu. Elementy są wyświetlane w danych wejściowych w następujący sposób:
- Klucz 1 jest wymagany i jest wyświetlany z wartością 11.
- Klucz 2 powtarza się i pojawia się dwa razy z wartością 22, a wynikiem jest wartość { 22, 22 }.
- Klucz 3 jest opcjonalny i nie jest wyświetlany, a wynikiem jest wartość null.
- Klucz 4 powtarza się, ale nie pojawia się i powoduje wyświetlenie wartości { }.
- Klucz 5 nie jest częścią grupy, ale pojawia się raz z wartością 55. Dodatkowa funkcja jest wywoływana z wartością klucza 5 i zwraca format odpowiadający tej wartości (BinaryFormat.Byte). Wartość 55 jest odczytywana i odrzucana.
Użycie
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)
Wyjście
{11, {22, 22}, null, {}}
Przykład 2
Poniższy przykład ilustruje przekształcenie wartości elementu i wartość domyślną elementu. Powtarzający się element z kluczem 1 sumuje listę wartości odczytywanych przy użyciu List.Sum. Opcjonalny element z kluczem 2 ma wartość domyślną 123 zamiast wartości null.
Zastosowanie
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)
Wyjście
{203, 123}