Udostępnij za pośrednictwem


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 parametru extra, 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}