BinaryFormat.Group
Sintaxe
BinaryFormat.Group(binaryFormat as function, group as list, optional extra as nullable function, optional lastKey as any) as function
Sobre
Os parâmetros são os seguintes:
- O parâmetro
binaryFormat
especifica o formato binário do valor de chave. - O parâmetro
group
fornece informações sobre o grupo de itens conhecidos. - O parâmetro opcional
extra
pode ser usado para especificar uma função que retornará um valor de formato binário para o valor após qualquer chave inesperada. Se o parâmetroextra
não for especificado, um erro será gerado se houver valores de chave inesperados.
O parâmetro group
especifica uma lista de definições de item. Cada definição de item é uma lista contendo de três a cinco valores, como segue:
- Valor da chave. O valor da chave que corresponde ao item. Deve ser exclusivo dentro do conjunto de itens.
- Formato do item. O formato binário correspondente ao valor do item. Isso permite que cada item tenha um formato diferente.
- Ocorrência do item. O valor BinaryOccurrence.Type de quantas vezes o item deve aparecer no grupo. Os itens necessários que não estão presentes causam um erro. Itens duplicados necessários ou opcionais são tratados como valores de chave inesperados.
- Valor do item padrão (opcional). Se o valor do item padrão for exibido na lista definição de item e não for nulo, ele será usado em vez do padrão. O padrão para itens repetidos ou opcionais é NULL e o padrão para valores repetitivos é uma lista vazia { }.
- Transformação de valor de item (opcional). Se a função de transformação valor do item estiver presente na lista definição de item e não for nula, ela será chamada para transformar o valor do item antes que ele seja retornado. A função de transformação só será chamada se o item aparecer na entrada (nunca será chamada com o valor padrão).
Exemplo 1
O seguinte pressupõe um valor de chave que seja um único byte, com quatro itens esperados no grupo, todos com um byte de dados após a chave. Os itens aparecem na entrada da seguinte maneira:
- A chave 1 é necessária e é exibida com o valor 11.
- A chave 2 é repetida e aparece duas vezes com o valor 22 e resulta em um valor de { 22, 22 }.
- A chave 3 é opcional e não aparece e resulta em um valor de null.
- A chave 4 repete-se, mas não aparece, e resulta em um valor de { }.
- A chave 5 não faz parte do grupo, mas é exibida uma vez com o valor 55. A função extra é chamada com o valor de chave 5 e retorna o formato correspondente a esse valor (BinaryFormat.Byte). O valor 55 é lido e descartado.
Usage
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)
Saída
{11, {22, 22}, null, {}}
Exemplo 2
O exemplo a seguir ilustra a transformação de valor de item e o valor de item padrão. O item repetido com a chave 1 soma a lista de valores lidos usando List.Sum. O item opcional com a chave 2 tem um valor padrão de 123, em vez de null.
Usage
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)
Saída
{203, 123}