Zdieľať cez


BinaryFormat.Group

Syntax

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

O

Parametre sú nasledovné:

  • Parameter binaryFormat určuje binárny formát hodnoty kľúča.
  • Parameter group poskytuje informácie o skupine známych položiek.
  • Voliteľný parameter extra možno použiť na zadanie funkcie, ktorá vráti hodnotu binárneho formátu pre hodnotu nasledujúcu za neočakávaným kľúčom. Ak parameter extra nie je zadaný, v prípade výskytu neočakávaných hodnôt kľúča sa vyskytne chyba.

Parameter group určuje zoznam definícií položiek. Každá definícia položky je zoznam obsahujúci 3 – 5 hodnôt nasledovne:

  • Hodnota kľúča. Hodnota kľúča, ktorá zodpovedá položke. Táto položka musí byť jedinečná v rámci množiny položiek.
  • Formát položky. Binárny formát zodpovedajúci hodnote položky. To umožňuje každej položke mať iný formát.
  • Výskyt položky. hodnota BinaryOccurrence.Type určuje, koľkokrát sa očakáva, že položka sa zobrazí v skupine. Neprídu požadované položky, ktoré sa nenachádzajú. Povinné alebo voliteľné duplicitné položky sa správajú ako neočakávané hodnoty kľúča.
  • Predvolená hodnota položky (voliteľná). Ak sa predvolená hodnota položky zobrazí v zozname definícií položiek a nemá hodnotu null, použije sa namiesto predvoleného nastavenia. Predvolená hodnota pre opakujúce sa alebo voliteľné položky je null a predvolená hodnota pre opakujúce sa hodnoty je prázdny zoznam { }.
  • Transformácia hodnoty položky (voliteľná). Ak je funkcia transformácie hodnoty položky prítomná v zozname definícií položiek a nemá hodnotu null, zavolá sa na transformáciu hodnoty položky ešte pred jej vrátením. Funkcia transformácie sa volá len vtedy, ak sa položka zobrazí vo vstupe (nikdy sa nevolá s predvolenou hodnotou).

Príklad č. 1

Nasledujúca hodnota predpokladá jednobajtovú hodnotu kľúča so 4 očakávanými položkami v skupine. Všetky tieto položky majú za kľúčom bajt údajov. Položky sa zobrazia na vstupe nasledovne:

  • Vyžaduje sa kľúč 1 a zobrazí sa s hodnotou 11.
  • Kľúč 2 sa opakuje a zobrazí sa dvakrát s hodnotou 22 a výsledkom je hodnota {22, 22 }.
  • Kľúč 3 je voliteľný a nezobrazí sa. Výsledkom je hodnota null.
  • Kľúč 4 sa opakuje, ale nezobrazí sa. Výsledkom je hodnota {}.
  • Kľúč 5 nie je súčasťou skupiny, ale zobrazí sa raz s hodnotou 55. Dodatočná funkcia sa volá s hodnotou kľúča 5 a vráti formát zodpovedajúci tejto hodnote (BinaryFormat.Byte). Hodnota 55 sa prečíta a zahodí.

používania

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)

výstupu

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

Príklad č. 2

Nasledujúci príklad ilustruje transformáciu hodnoty položky a predvolenú hodnotu položky. Opakujúca sa položka s kľúčom 1 zhŕňa zoznam hodnôt prečítaných pomocou List.Sum. Voliteľná položka s kľúčom 2 má predvolenú hodnotu 123 namiesto hodnoty null.

používania

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)

výstupu

{203, 123}