Delen via


BinaryFormat.Group

Syntaxis

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

Info

De parameters zijn als volgt:

  • De binaryFormat parameter geeft de binaire indeling van de sleutelwaarde op.
  • De group parameter bevat informatie over de groep bekende items.
  • De optionele extra parameter kan worden gebruikt om een functie op te geven die een binaire notatiewaarde retourneert voor de waarde na een sleutel die onverwacht was. Als de extra parameter niet is opgegeven, wordt er een fout gegenereerd als er onverwachte sleutelwaarden zijn.

Met de group parameter wordt een lijst met itemdefinities opgegeven. Elke itemdefinitie is een lijst met 3-5 waarden, als volgt:

  • Sleutelwaarde. De waarde van de sleutel die overeenkomt met het item. Dit moet uniek zijn binnen de set items.
  • Itemindeling. De binaire indeling die overeenkomt met de waarde van het item. Hierdoor kan elk item een andere indeling hebben.
  • Exemplaar van item. De waarde BinaryOccurrence.Type voor het aantal keren dat het item naar verwachting in de groep wordt weergegeven. Vereiste items die niet aanwezig zijn, veroorzaken een fout. Vereiste of optionele dubbele items worden verwerkt als onverwachte sleutelwaarden.
  • Standaarditemwaarde (optioneel). Als de standaarditemwaarde wordt weergegeven in de lijst met itemdefinities en niet null is, wordt deze gebruikt in plaats van de standaardwaarde. De standaardwaarde voor herhalende of optionele items is null en de standaardwaarde voor herhalende waarden is een lege lijst { }.
  • Transformatie van itemwaarde (optioneel). Als de transformatiefunctie van de itemwaarde aanwezig is in de itemdefinitielijst en niet null is, wordt deze aangeroepen om de itemwaarde te transformeren voordat deze wordt geretourneerd. De transformatiefunctie wordt alleen aangeroepen als het item wordt weergegeven in de invoer (het wordt nooit aangeroepen met de standaardwaarde).

Voorbeeld 1

Hieronder wordt uitgegaan van een sleutelwaarde die één byte is, met 4 verwachte items in de groep, die allemaal een byte aan gegevens bevatten die volgen op de sleutel. De items worden als volgt weergegeven in de invoer:

  • Sleutel 1 is vereist en wordt weergegeven met waarde 11.
  • Sleutel 2 wordt herhaald en wordt twee keer weergegeven met waarde 22 en resulteert in een waarde van { 22, 22 }.
  • Sleutel 3 is optioneel en wordt niet weergegeven en resulteert in een waarde van null.
  • Sleutel 4 wordt herhaald, maar wordt niet weergegeven en resulteert in een waarde van { }.
  • Sleutel 5 maakt geen deel uit van de groep, maar wordt eenmaal weergegeven met de waarde 55. De extra functie wordt aangeroepen met de sleutelwaarde 5 en retourneert de indeling die overeenkomt met die waarde (BinaryFormat.Byte). De waarde 55 wordt gelezen en verwijderd.

Gebruik

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)

Uitvoer

{11, {22, 22}, null, {}}

Voorbeeld 2

In het volgende voorbeeld ziet u de transformatie van de itemwaarde en de standaarditemwaarde. Met het herhalende item met sleutel 1 wordt de lijst met waarden opgeteld die worden gelezen met Behulp van List.Sum. Het optionele item met sleutel 2 heeft een standaardwaarde van 123 in plaats van null.

Gebruik

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)

Uitvoer

{203, 123}