BinaryFormat.Group
Sintassi
BinaryFormat.Group(binaryFormat as function, group as list, optional extra as nullable function, optional lastKey as any) as function
Informazioni su
I parametri sono i seguenti:
- Il parametro
binaryFormat
specifica il formato binario del valore di chiave. - Il parametro
group
include informazioni sul gruppo di elementi noti. - Il parametro facoltativo
extra
può essere usato per specificare una funzione che restituisce un valore di formato binario per il valore che segue qualsiasi chiave imprevista. Se il parametroextra
non è specificato, verrà generato un errore se sono presenti valori di chiave imprevisti.
Il parametro group
specifica un elenco di definizioni di elementi. Ogni definizione di elemento è un elenco, contenente da 3 a 5 valori, come segue:
- Valore di chiave. Valore della chiave corrispondente all'elemento. Deve essere univoco all'interno del set di elementi.
- Formato dell'elemento. Formato binario corrispondente al valore dell'elemento. In tal modo ogni elemento può avere un formato diverso.
- Occorrenza dell'elemento. Valore BinaryOccurrence.Type per il numero di volte in cui si prevede che l'elemento venga visualizzato nel gruppo. Gli elementi obbligatori non presenti causano un errore. Gli elementi duplicati obbligatori o facoltativi vengono gestiti come valori di chiave imprevisti.
- Valore di elemento predefinito (facoltativo). Se il valore di elemento predefinito è presente nell'elenco di definizione di elementi e non è Null, verrà usato al posto del valore predefinito. Il valore predefinito degli elementi ripetuti o facoltativi è Null e l'impostazione predefinita per i valori ripetuti è un elenco vuoto { }.
- Trasformazione del valore dell'elemento (facoltativo). Se la funzione di trasformazione dell'elemento è presente nell'elenco di definizione degli elementi e non è Null verrà chiamata per trasformare il valore dell'elemento prima che venga restituito. La funzione di trasformazione è chiamata solo se l'elemento è presente nell'input e non verrà chiamata mai con il valore predefinito.
Esempio 1
Di seguito si presuppone un valore chiave a byte singolo, con 4 elementi previsti nel gruppo, tutti con un byte di dati dopo la chiave. Gli elementi compaiono nell'input come segue:
- La chiave 1 è obbligatoria ed è presente con valore 11.
- La chiave 2 si ripete ed è presente due volte con valore 22, restituendo un valore di { 22, 22 }.
- La chiave 3 è facoltativa, non è presente e restituisce un valore Null.
- La chiave 4 si ripete, ma non è presente e restituisce un valore di { }.
- La chiave 5 non fa parte del gruppo, ma è presente una volta con valore 55. La funzione aggiuntiva viene chiamata con il valore della chiave 5 e restituisce il formato corrispondente a tale valore (BinaryFormat.Byte). Il valore 55 viene letto e rimosso.
Utilizzo
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)
Output
{11, {22, 22}, null, {}}
Esempio 2
L'esempio seguente illustra la trasformazione del valore dell'elemento e il valore predefinito dell'elemento. L'elemento ripetuto con chiave 1 somma la lista di valori letti usando List.Sum. L'elemento facoltativo con chiave 2 contiene un valore predefinito di 123 anziché Null.
Utilizzo
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)
Output
{203, 123}