Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Syntax
BinaryFormat.Group(
binaryFormat as function,
group as list,
optional extra as nullable function,
optional lastKey as any
) as function
Info
Die Parameter sind wie folgt:
- Der parameter
binaryFormatgibt das Binärformat des Schlüsselwerts an. - Der parameter
groupstellt Informationen zur Gruppe bekannter Elemente bereit. - Der optionale
extra-Parameter kann verwendet werden, um eine Funktion anzugeben, die einen Binärformatwert für den Wert zurückgibt, der auf einen unerwarteten Schlüssel folgt. Wenn der parameterextranicht angegeben ist, wird ein Fehler ausgelöst, wenn unerwartete Schlüsselwerte vorhanden sind.
Der parameter group gibt eine Liste von 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 Vorkommen des Elements in der Gruppe erwartet wird. Erforderliche Elemente, die nicht vorhanden sind, verursachen einen Fehler. Erforderliche oder optionale doppelte Elemente werden wie unerwartete Schlüsselwerte behandelt.
- Standardelementwert (optional). Wenn der Standardelementwert in der Elementdefinitionsliste angezeigt wird und nicht NULL ist, wird er anstelle der Standardeinstellung verwendet. Der Standardwert für wiederholte oder optionale Elemente ist NULL, und der Standardwert für wiederholte Werte ist eine leere Liste { }.
- Elementwerttransformation (optional). Wenn die Elementwerttransformationsfunktion 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 (es wird nie mit dem Standardwert aufgerufen).
Beispiel 1
Es wird davon ausgegangen, dass es sich bei einem Schlüsselwert um ein einzelnes Byte handelt, wobei vier erwartete Elemente in der Gruppe vorhanden sind, die alle über ein Byte mit Daten verfügen, die dem Schlüssel folgen. Die Elemente werden in der Eingabe wie folgt angezeigt:
- Schlüssel 1 ist erforderlich und wird mit dem Wert 11 angezeigt.
- Schlüssel 2 wiederholt sich und erscheint zweimal mit dem Wert 22, was zu einem Wert von { 22, 22 } führt.
- Schlüssel 3 ist optional und wird nicht angezeigt und führt zu einem Wert von NULL.
- Schlüssel 4 wiederholt, wird jedoch nicht angezeigt und führt zu einem Wert von { }.
- Schlüssel 5 ist nicht Teil der Gruppe, wird jedoch 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
Im folgenden Beispiel wird die Elementwerttransformation und der Standardelementwert veranschaulicht. Das wiederholte Element mit Schlüssel 1 summiert die Liste der Werte, die mit List.Sumgelesen werden. Das optionale Element mit Schlüssel 2 weist einen Standardwert von 123 anstelle von NULL auf.
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}