Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Syntax
BinaryFormat.Group(
binaryFormat as function,
group as list,
optional extra as nullable function,
optional lastKey as any
) as function
Acerca de
Los parámetros son los siguientes:
- El
binaryFormatparámetro especifica el formato binario del valor de clave. - El
groupparámetro proporciona información sobre el grupo de elementos conocidos. - El parámetro opcional
extrase puede usar para especificar una función que devolverá un valor de formato binario para el valor después de cualquier clave inesperada. Si no se especifica elextraparámetro , se producirá un error si hay valores de clave inesperados.
El group parámetro especifica una lista de definiciones de elementos. Cada definición de elemento es una lista que contiene 3-5 valores, como se indica a continuación:
- Valor de clave. Valor de la clave que corresponde al elemento. Debe ser único dentro del conjunto de elementos.
- Formato de elemento. Formato binario correspondiente al valor del elemento. Esto permite que cada elemento tenga un formato diferente.
- Repetición del elemento. Valor
BinaryOccurrence.Typede cuántas veces se espera que el elemento aparezca en el grupo. Los elementos necesarios que no están presentes provocan un error. Los elementos duplicados obligatorios o opcionales se controlan como valores de clave inesperados. - Valor de elemento predeterminado (opcional). Si el valor de elemento predeterminado aparece en la lista de definiciones de elemento y no es NULL, se usará en lugar del valor predeterminado. El valor predeterminado para los elementos repetidos o opcionales es NULL y el valor predeterminado para los valores repetidos es una lista vacía { }.
- Transformación de valor de elemento (opcional). Si la función de transformación de valor de elemento está presente en la lista de definiciones de elementos y no es null, se llamará a para transformar el valor del elemento antes de que se devuelva. Solo se llama a la función de transformación si el elemento aparece en la entrada (nunca se llamará con el valor predeterminado).
Ejemplo 1
A continuación se supone un valor de clave que es un solo byte, con 4 elementos esperados en el grupo, todos los cuales tienen un byte de datos después de la clave. Los elementos aparecen en la entrada de la siguiente manera:
- Se requiere la clave 1 y aparece con el valor 11.
- La clave 2 se repite y aparece dos veces con el valor 22 y da como resultado un valor de { 22, 22 }.
- La clave 3 es opcional y no aparece y da como resultado un valor null.
- La clave 4 se repite, pero no aparece, y da como resultado un valor de { }.
- La clave 5 no forma parte del grupo, pero aparece una vez con el valor 55. Se llama a la función adicional con el valor de clave 5 y devuelve el formato correspondiente a ese valor (
BinaryFormat.Byte). El valor 55 se lee y descarta.
Uso
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)
Salida
{11, {22, 22}, null, {}}
Ejemplo 2
En el ejemplo siguiente se muestra la transformación de valor de elemento y el valor de elemento predeterminado. El elemento de repetición con la clave 1 suma la lista de valores leídos mediante List.Sum. El elemento opcional con la clave 2 tiene un valor predeterminado de 123 en lugar de null.
Uso
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)
Salida
{203, 123}