BinaryFormat.Choice
Returnerar ett binärformat som väljer nästa binärformat baserat på ett värde som redan har lästs.
Syntax
BinaryFormat.Choice(
binaryFormat as function,
chooseFunction as function,
optional type as type,
optional combineFunction as function
) as function
Remarks
Returnerar ett binärformat som väljer nästa binärformat baserat på ett värde som redan har lästs. Värdet i binärformat som genereras med den här funktionen används i faser:
- Binärformatet som anges av parametern
binaryFormat
används för att läsa ett värde. - Värdet skickas till den choice-funktion som anges av parametern
chooseFunction
. - Choice-funktionen inspekterar värdet och returnerar ett andra binärformat.
- Det andra binärformatet används för att läsa ett andra värde.
- Om combine-funktionen anges skickas det första och andra värdet till combine-funktionen och det resulterande värdet returneras.
- Om combine-funktionen inte anges returneras det andra värdet.
- Det andra värdet returneras.
type
anger typen av binärformat som returneras av choice-funktionen. type any
, type list
eller type binary
kan anges. Om parametern type
inte anges används type any
. Om type list
eller type binary
används kanske systemet kan returnera ett strömmande binary
- eller list
-värde i stället för ett buffrat, vilket kan minska mängden minne som krävs för att läsa formatet.
Examples
Example #1
Läs en lista med byte där antalet element bestäms av den första byten.
let
binaryData = #binary({2, 3, 4, 5}),
listFormat = BinaryFormat.Choice(
BinaryFormat.Byte,
(length) => BinaryFormat.List(BinaryFormat.Byte, length)
)
in
listFormat(binaryData)
Result:
{3, 4}
Example #2
Läs en lista med byte där antalet element bestäms av den första byten, och bevara den första lästa byten.
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)
Result:
[length = 2, list = {3, 4}]
Example #3
Läs en lista med byte där antalet element bestäms av den första byten med hjälp av en strömningslista.
let
binaryData = #binary({2, 3, 4, 5}),
listFormat = BinaryFormat.Choice(
BinaryFormat.Byte,
(length) => BinaryFormat.List(BinaryFormat.Byte, length),
type list
)
in
listFormat(binaryData)
Result:
{3, 4}
Category
Binary Formats.Controlling what comes next