Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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
binaryFormatokreśla format binarny wartości klucza. - Parametr
groupzawiera informacje o grupie znanych elementów. - Opcjonalny parametr
extramoż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.
Użycie
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}