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}