BinaryFormat.Group
Zwraca format binarny odczytujący grupę elementów.
Syntax
BinaryFormat.Group(
binaryFormat as function,
group as list,
optional extra as function,
optional lastKey as any
) as function
Remarks
Używane są następujące parametry:
- Parametr
binaryFormat
określa format binarny wartości klucza. - Parametr
group
udostępnia informacje dotyczące grupy znanych elementów. - Za pomocą opcjonalnego parametru
extra
można określić funkcję, która będzie zwracać wartość formatu binarnego dla wartości występujących po nieoczekiwanych kluczach. Jeśli parametrextra
nie zostanie określony, w sytuacji wystąpienia nieoczekiwanych wartości klucza zostanie zgłoszony błąd.
group
określa listę definicji elementów. Każda definicja elementu to lista zawierająca od 3 do 5 wartości, tak jak pokazano poniżej:- Wartość klucza. Wartość klucza odpowiadającego elementowi. Musi ona być unikatowa w obrębie zestawu elementów.
- Format elementu. Format binarny odpowiadający wartości elementu. Dzięki tej wartości każdy element może mieć inny format.
- Wystąpienie elementu. Wartość
BinaryOccurrence.Type
określa, ile razy element powinien wystąpić w grupie. Wymagane elementy, których nie ma, powodują błąd. Wymagane lub opcjonalne zduplikowane elementy są obsługiwane tak jak nieoczekiwane wartości klucza. - Domyślna wartość elementu (opcjonalna). Jeśli domyślna wartość elementu jest widoczna na liście definicji elementów i jest inna niż null, będzie używana zamiast ustawienia domyślnego. Ustawienie domyślne dla powtarzających się lub opcjonalnych elementów to wartość null, a ustawienie domyślne dla powtarzających się wartości to pusta lista { }.
- Przekształcenie wartości elementu (opcjonalne). Jeśli funkcja przekształcenia wartości elementu jest określona na liście definicji elementów i ma wartość inną niż null, zostanie wywołana w celu przekształcenia wartości elementu przed jej zwróceniem. Funkcję przekształcenia można wywołać tylko wtedy, gdy element znajduje się w danych wejściowych (nigdy nie jest wywoływana z użyciem wartości domyślnej).
Examples
Example #1
Poniżej przyjęto założenie, że wartość klucza to pojedynczy bajt, a w grupie oczekiwane są 4 elementy, z których każdy zawiera bajt danych występujący po kluczu. Element jest widoczny w danych wejściowych w następujący sposób:<ul><li>Klucz 1 jest wymagany i występuje z wartością 11.</li><li>Klucz 2 powtarza się i występuje dwa razy z wartością 22, a więc w wyniku powstaje wartość { 22, 22 }.</li><li>Klucz 3 jest opcjonalny i nie występuje, a więc w wyniku powstaje wartość null.</li><li>Klucz 4 powtarza się, ale nie występuje, a więc w wyniku powstaje wartość { }.</li><li>Klucz 5 nie jest częścią grupy, ale występuje raz z wartością 55. Dodatkowa funkcja (extra) jest wywoływana z użyciem wartości klucza 5 i zwraca format odpowiadający tej wartości (BinaryFormat.Byte). Wartość 55 jest odczytywana i odrzucana.</li></ul>
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
W poniższym przykładzie pokazano przekształcenie wartości elementu oraz domyślną wartość elementu. Powtarzający się element z kluczem 1 sumuje listę odczytanych wartości za pomocą funkcji List.Sum. Opcjonalny element z kluczem 2 ma wartość domyślną równą 123, a nie wartość 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