Passa al contenuto principale

BinaryFormat.Group

Restituisce un formato binario che legge un gruppo di elementi.

Syntax

BinaryFormat.Group(
binaryFormat as function,
group as list,
optional extra as function,
optional lastKey as any
) as function

Remarks

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 parametro extra 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 ha un formato diverso.
  • Occorrenza dell'elemento. Valore BinaryOccurrence.Type che indica quante volte si prevede che l'elemento sia presente 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.

Examples

Example #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 sono presenti nell'input come segue:<ul><li>La chiave 1 è obbligatoria ed è presente con valore 11.</li><li>La chiave 2 si ripete ed è presente due volte con valore 22 restituendo un valore di { 22, 22 }.</li><li>La chiave 3 è facoltativa, non è presente e restituisce un valore Null.</li><li>La chiave 4 si ripete, ma non è presente e restituisce un valore di { }.</li><li>La chiave 5 non fa parte del gruppo, ma è presente una volta con valore 55. La funzione aggiuntiva è chiamata con il valore di chiave 5 e restituisce il formato corrispondente al valore (BinaryFormat.Byte). Il valore 55 viene letto e rimosso.</li></ul>

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)

Result:

{11, {22, 22}, null, {}}

Example #2

Nel seguente esempio viene illustrata la trasformazione del valore dell'elemento e il valore predefinito dell'elemento. L'elemento ripetuto con chiave 1 somma l'elenco dei valori letti utilizzando List.Sum. L'elemento facoltativo con chiave 2 contiene un valore predefinito di 123 anziché Null.

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)

Result:

{203, 123}

Category

Binary Formats.Reading a group of items