Dela via


BinaryFormat.Group

Syntax

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

Om

Parametrarna är följande:

  • Parametern binaryFormat anger det binära formatet för nyckelvärdet.
  • Parametern group innehåller information om gruppen med kända objekt.
  • Den valfria extra parametern kan användas för att ange en funktion som returnerar ett binärt formatvärde för värdet efter en oväntad nyckel. Om parametern extra inte anges utlöses ett fel om det finns oväntade nyckelvärden.

Parametern group anger en lista med objektdefinitioner. Varje objektdefinition är en lista som innehåller 3–5 värden enligt följande:

  • Nyckelvärde. Värdet för nyckeln som motsvarar objektet. Detta måste vara unikt i uppsättningen med objekt.
  • Objektformat. Det binära format som motsvarar objektets värde. På så sätt kan varje objekt ha olika format.
  • Objektförekomst. Värdet BinaryOccurrence.Type för hur många gånger objektet förväntas visas i gruppen. Obligatoriska objekt som inte finns orsakar ett fel. Obligatoriska eller valfria duplicerade objekt hanteras som oväntade nyckelvärden.
  • Standardvärde för objekt (valfritt). Om standardobjektvärdet visas i objektdefinitionslistan och inte är null används det i stället för standardvärdet. Standardvärdet för upprepande eller valfria objekt är null och standardvärdet för upprepade värden är en tom lista { }.
  • Transformering av objektvärde (valfritt). Om funktionen transformering av objektvärde finns i objektdefinitionslistan och inte är null anropas den för att transformera objektvärdet innan det returneras. Transformeringsfunktionen anropas bara om objektet visas i indata (det anropas aldrig med standardvärdet).

Exempel 1

Följande förutsätter ett nyckelvärde som är en enda byte, med 4 förväntade objekt i gruppen, som alla har en byte data som följer nyckeln. Objekten visas i indata enligt följande:

  • Nyckel 1 krävs och visas med värdet 11.
  • Nyckel 2 upprepas och visas två gånger med värdet 22 och resulterar i värdet { 22, 22 }.
  • Nyckel 3 är valfri och visas inte och resulterar i värdet null.
  • Nyckel 4 upprepas, men visas inte och resulterar i värdet { }.
  • Nyckel 5 ingår inte i gruppen, men visas en gång med värdet 55. Den extra funktionen anropas med nyckelvärdet 5 och returnerar formatet som motsvarar det värdet (BinaryFormat.Byte). Värdet 55 läss och ignoreras.

Användning

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)

Output

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

Exempel 2

I följande exempel visas objektvärdestransformering och standardvärde för objekt. Det upprepade objektet med nyckel 1 summerar listan med värden som lästs med List.Sum. Det valfria objektet med nyckel 2 har standardvärdet 123 i stället för null.

Användning

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)

Output

{203, 123}