Ler em inglês

Partilhar via


BinaryFormat.Group

Sintaxe

BinaryFormat.Group(binaryFormat as function, group as list, optional extra as nullable function, optional lastKey as any) as function

Sobre nós

Os parâmetros são os seguintes:

  • O parâmetro binaryFormat especifica o formato binário do valor da chave.
  • O parâmetro group fornece informações sobre o grupo de itens conhecidos.
  • O parâmetro extra opcional 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âmetro extra 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 3-5 valores, da seguinte forma:

  • Valor-chave. O valor da chave que corresponde ao item. Isso 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 para quantas vezes se espera que o item apareça no grupo. Os itens necessários que não estão presentes causam um erro. Os itens duplicados obrigatórios ou opcionais são tratados como valores de chave inesperados.
  • Valor do item padrão (opcional). Se o valor do item padrão aparecer na lista de definição de item e não for nulo, ele será usado em vez do padrão. O padrão para itens repetitivos ou opcionais é null, e o padrão para repetir valores é uma lista vazia { }.
  • Transformação do valor do item (opcional). Se a função de transformação do valor do item estiver presente na lista de definições do 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ó é chamada se o item aparecer na entrada (ele nunca será chamado com o valor padrão).

Exemplo 1

O seguinte pressupõe um valor de chave que é um único byte, com 4 itens esperados no grupo, todos os quais têm um byte de dados seguindo a chave. Os itens aparecem na entrada da seguinte maneira:

  • A chave 1 é necessária e aparece com o valor 11.
  • A tecla 2 repete-se e aparece duas vezes com o valor 22 e resulta num valor de { 22, 22 }.
  • A chave 3 é opcional e não aparece e resulta em um valor nulo.
  • A tecla 4 repete-se, mas não aparece e resulta num valor de { }.
  • A chave 5 não faz parte do grupo, mas aparece 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.

Utilização

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 do valor do item e o valor do item padrão. O item repetitivo 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.

Utilização

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}