BinaryFormat.Group
Syntax
BinaryFormat.Group(binaryFormat as function, group as list, optional extra as nullable function, optional lastKey as any) as function
Info
Die Parameter lauten wie folgt:
- Der
binaryFormat
-Parameter gibt das Binärformat jedes Schlüsselwerts an. - Der
group
-Parameter enthält Informationen über die Gruppe bekannter Elemente. - Der optionale
extra
-Parameter kann zum Angeben einer Funktion verwendet werden, die einen Wert im Binärformat zurückgibt, der einem beliebigen, unerwarteten Schlüssel folgt. Wenn derextra
-Parameter nicht angegeben wird, wird bei unerwarteten Schlüsselwerten ein Fehler ausgelöst.
Der group
-Parameter gibt eine Liste an Elementdefinitionen an. Jede Elementdefinition ist eine Liste mit 3-5 Werten, wie folgt:
- Schlüsselwert. Der Wert des Schlüssels, der dem Element entspricht. Dieser muss innerhalb des Elementsatzes eindeutig sein.
- Elementformat. Das Binärformat, das dem Wert des Elements entspricht. Dadurch kann jedes Element ein anderes Format aufweisen.
- Vorkommen des Elements Der BinaryOccurrence.Type Wert gibt an, wie häufig das Element in der Gruppe erscheinen sollte. Erforderliche Elemente, die nicht vorhanden sind, führen zu einem Fehler. Erforderliche oder optionale doppelte Elemente werden wie unerwartete Schlüsselwerte behandelt.
- Standardelementwert (optional). Wenn der Standardelementwert in der Liste der Elementdefinitionen aufgeführt ist und nicht Null ist, wird er anstelle des Standardwerts verwendet. Der Standard für sich wiederholende oder optionale Elemente ist Null, und der Standard für sich wiederholende Werte ist eine leere Liste { }.
- Elementwerttransformation (optional). Wenn die Funktion für die Elementwerttransformation in der Elementdefinitionsliste vorhanden ist und nicht Null ist, wird sie aufgerufen, um den Elementwert zu transformieren, bevor er zurückgegeben wird. Die Transformationsfunktion wird nur aufgerufen, wenn das Element in der Eingabe angezeigt wird (sie wird nie mit dem Standardwert aufgerufen).
Beispiel 1
Im Folgenden wird von einem Schlüsselwert ausgegangen, der ein einzelnes Byte ist, und von vier erwarteten Elementen in der Gruppe, die alle ein Datenbyte nach dem Schlüssel haben. Die Elemente werden in der Eingabe wie folgt angezeigt:
- Schlüssel 1 ist erforderlich und wird mit dem Wert 11 angezeigt.
- Schlüssel 2 wird wiederholt und wird zweimal mit dem Wert 22 angezeigt und führt zu einem Wert von {22, 22}.
- Schlüssel 3 ist optional und wird nicht angezeigt, und führt zu einem Wert von Null.
- Schlüssel 4 wiederholt sich, wird aber nicht angezeigt, und führt zu einem Wert von Null.
- Schlüssel 5 ist nicht Teil der Gruppe, wird aber einmal mit dem Wert 55 angezeigt. Die zusätzliche Funktion wird mit dem Schlüsselwert 5 aufgerufen und gibt das Format zurück, das diesem Wert entspricht (BinaryFormat.Byte). Der Wert 55 wird gelesen und verworfen.
Verwendung
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)
Ausgabe
{11, {22, 22}, null, {}}
Beispiel 2
Das folgende Beispiel veranschaulicht die Elementwerttransformation und den Standardelementwert. Das sich wiederholende Element mit Schlüssel 1 fasst die Liste der mithilfe von List.Sum gelesenen Werte zusammen. Das optionale Element mit Schlüssel 2 hat den Standardwert 123 anstelle von Null.
Verwendung
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)
Ausgabe
{203, 123}