BinaryFormat.Group

Syntaks

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

Om

Parametrene er som følger:

  • Parameteren binaryFormat angiver nøgleværdiens binære format.
  • Parameteren group indeholder oplysninger om gruppen af kendte elementer.
  • Den valgfri extra parameter kan bruges til at angive en funktion, der returnerer en værdi i binært format for værdien efter en hvilken som helst nøgle, der var uventet. Hvis parameteren extra ikke er angivet, udløses der en fejl, hvis der er uventede nøgleværdier.

Parameteren group angiver en liste over elementdefinitioner. Hver elementdefinition er en liste, der indeholder 3-5 værdier, som følger:

  • Nøgleværdi. Værdien af den nøgle, der svarer til elementet. Dette skal være entydigt i sættet af elementer.
  • Elementformat. Det binære format, der svarer til værdien af elementet. Dette gør det muligt for hvert element at have et andet format.
  • Elementforekomst. Værdien BinaryOccurrence.Type for, hvor mange gange elementet forventes at blive vist i gruppen. Obligatoriske elementer, der ikke er til stede, forårsager en fejl. Obligatoriske eller valgfrie dubletelementer håndteres som uventede nøgleværdier.
  • Standardværdi (valgfri). Hvis standardværdien for elementet vises på elementdefinitionslisten og ikke er null, bruges den i stedet for standarden. Standarden for gentagne eller valgfrie elementer er null, og standarden for gentagne værdier er en tom liste { }.
  • Transformation af elementværdi (valgfri). Hvis transformeringsfunktionen for elementværdien findes på elementdefinitionslisten og ikke er null, kaldes den for at transformere elementværdien, før den returneres. Transformationsfunktionen kaldes kun, hvis elementet vises i inputtet (den kaldes aldrig med standardværdien).

Eksempel 1

Følgende forudsætter en nøgleværdi, der er en enkelt byte, med fire forventede elementer i gruppen, som alle har en byte af data efter nøglen. Elementerne vises i inputtet på følgende måde:

  • Nøgle 1 er påkrævet og vises med værdien 11.
  • Nøgle 2 gentages og vises to gange med værdien 22 og resulterer i en værdi på { 22, 22 }.
  • Nøgle 3 er valgfri og vises ikke og resulterer i en værdi på null.
  • Nøgle 4 gentages, men vises ikke, og resulterer i en værdi på { }.
  • Nøgle 5 er ikke en del af gruppen, men vises én gang med værdien 55. Den ekstra funktion kaldes med nøgleværdien 5 og returnerer det format, der svarer til den pågældende værdi (BinaryFormat.Byte). Værdien 55 læses og kasseres.

Brug

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, {}}

Eksempel 2

I følgende eksempel illustreres transformationen af elementværdien og standardværdien for elementet. Det gentagne element med nøgle 1 opsummerer listen over værdier, der læses ved hjælp af List.Sum. Det valgfrie element med nøgle 2 har en standardværdi på 123 i stedet for null.

Brug

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}