Megosztás a következőn keresztül:


BinaryFormat.Choice

Szintaxis

BinaryFormat.Choice(
    binaryFormat as function,
    chooseFunction as function,
    optional type as nullable type,
    optional combineFunction as nullable function
) as function

Rólunk

Olyan bináris formátumot ad vissza, amely egy már beolvasott érték alapján választja ki a következő bináris formátumot. A függvény által előállított bináris formátumérték szakaszokban működik:

  • Az érték olvasásához a binaryFormat paraméter által megadott bináris formátumot használja a rendszer.
  • Az érték a chooseFunction paraméter által megadott választási függvénynek lesz átadva.
  • A választási függvény az értéket vizsgálja, és egy második bináris formátumot ad vissza.
  • A második bináris formátum egy második érték beolvasására szolgál.
  • Ha az összevonási függvény meg van adva, a rendszer az első és a második értéket átadja az összevonási függvénynek, és az eredményül kapott értéket adja vissza.
  • Ha az összevonási függvény nincs megadva, a második érték lesz visszaadva.
  • A második érték lesz visszaadva.

Az opcionális type paraméter a választott függvény által visszaadott bináris formátum típusát jelzi. Megadható type any, type listvagy type binary. Ha a type paraméter nincs megadva, akkor type any lesz használva. Ha type list vagy type binary használ, a rendszer képes lehet streamelési binary vagy list értéket visszaadni pufferelt helyett, ami csökkentheti a formátum olvasásához szükséges memória mennyiségét.

1. példa

Olvassa el azoknak a bájtoknak a listáját, amelyekben az elemek számát az első bájt határozza meg.

Használat

let
    binaryData = #binary({2, 3, 4, 5}),
    listFormat = BinaryFormat.Choice(
        BinaryFormat.Byte,
        (length) => BinaryFormat.List(BinaryFormat.Byte, length)
    )
in
    listFormat(binaryData)

kimeneti

{3,4}

2. példa

Olvassa el azoknak a bájtoknak a listáját, amelyekben az elemek számát az első bájt határozza meg, és őrizze meg az első bájtolvasást.

Használat

let
    binaryData = #binary({2, 3, 4, 5}),
    listFormat = BinaryFormat.Choice(
        BinaryFormat.Byte,
        (length) => BinaryFormat.Record([
            length = length,
            list = BinaryFormat.List(BinaryFormat.Byte, length)
        ])
    )
in
    listFormat(binaryData)

kimeneti

[length = 2, list = {3, 4}]

3. példa

Olvasson el egy bájtokból álló listát, ahol az elemek számát az első bájt határozza meg egy stream lista segítségével.

Használat

let
    binaryData = #binary({2, 3, 4, 5}),
    listFormat = BinaryFormat.Choice(
        BinaryFormat.Byte,
        (length) => BinaryFormat.List(BinaryFormat.Byte, length),
        type list
    )
in
    listFormat(binaryData)

kimeneti

{3, 4}