Ga naar hoofdinhoud

BinaryFormat.Group

Retourneert een binaire indeling die een groep items leest.

Syntax

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

Remarks

De parameters zijn als volgt:

  • De parameter binaryFormat specificeert de binaire indeling van de sleutelwaarde.
  • De parameter group verschaft informatie over de groep met bekende items.
  • De optionele parameter extra kan worden gebruikt om een functie op te geven die een waarde van een binaire indeling retourneert voor de waarde die volgt op een sleutel die niet werd verwacht. Als de parameter extra niet is opgegeven, treedt er een fout op als er onverwachte sleutelwaarden zijn.
Met de parameter group wordt een lijst met itemdefinities opgegeven. Elke itemdefinitie is een lijst die 3-5 van de volgende waarden bevat:
  • Sleutelwaarde. De waarde van de sleutel die overeenkomt met het item. Deze moet uniek zijn binnen de set met items.
  • Itemindeling. De binaire indeling die overeenkomt met de waarde van het item. Op deze manier kan elk item een andere indeling hebben.
  • Iteminstantie. De waarde BinaryOccurrence.Type geeft aan hoe vaak het item volgens verwachting in de groep verschijnt. Vereiste items die niet aanwezig zijn, veroorzaken een fout. Vereiste of optionele dubbele items worden afgehandeld als onverwachte sleutelwaarden.
  • Standaardwaarde van het item (optioneel). Als de standaardwaarde van het item in de lijst met itemdefinities verschijnt en niet null is, wordt dit gebruikt in plaats van de standaard. De standaard voor herhalende of optionele items is null en de standaard voor herhalende waarden is een lege lijst { }.
  • Transformatie itemwaarde (optioneel). Als de functie voor transformatie van de itemwaarde aanwezig is in de lijst met itemdefinities en niet null is, dan wordt deze functie aangeroepen om de itemwaarde te transformeren voordat de waarde wordt geretourneerd. De transformatiefunctie wordt alleen aangeroepen als het item verschijnt in de invoer (het wordt nooit aangeroepen met de standaardwaarde).

Examples

Example #1

Het volgende gaat uit van een sleutelwaarde die een enkele byte is en die 4 verwachte items in de groep heeft die allemaal een byte met gegevens hebben die volgt na de sleutel. De items verschijnen als volgt in de invoer:<ul><li>Sleutel 1 is verplicht en verschijnt met waarde 11.</li><li>Sleutel 2 wordt herhaald en verschijnt twee keer met waarde 22 en heeft een waarde { 22, 22 } als resultaat.</li><li>Sleutel 3 is optioneel, en verschijnt niet, en heeft de waarde null als resultaat.</li><li>Sleutel 4 wordt herhaald maar verschijnt niet, en heeft de waarde{ } als resultaat.</li><li>Sleutel 5 maakt geen deel uit van de groep maar verschijnt eenmalig 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 genegeerd.</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

Het volgende voorbeeld illustreert de transformatie van de itemwaarde en de standaardwaarde van het item. Het herhalende item met sleutel 1 telt de lijst met waarden op die zijn gelezen met behulp van List.Sum. Het optionele item met sleutel 2 geeft een standaardwaarde van 123 in plaats van 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