構文
BinaryFormat.Group(
binaryFormat as function,
group as list,
optional extra as nullable function,
optional lastKey as any
) as function
バージョン情報
パラメーターは次のとおりです。
-
binaryFormatパラメーターは、キー値のバイナリ形式を指定します。 -
groupパラメーターは、既知の項目のグループに関する情報を提供します。 - 省略可能な
extraパラメーターを使用して、予期しないキーに続く値のバイナリ形式の値を返す関数を指定できます。extraパラメーターが指定されていない場合は、予期しないキー値がある場合にエラーが発生します。
group パラメーターは、項目定義のリストを指定します。 各項目の定義は、次のように 3 ~ 5 個の値を含むリストです。
- キー値。 項目に対応するキーの値。 これは、項目のセット内で一意である必要があります。
- アイテムの形式。 項目の値に対応するバイナリ形式。 これにより、各項目の形式を変更できます。
- アイテムの出現。 項目がグループに表示されることが予想される回数の BinaryOccurrence.Type 値。 必要な項目が存在しない場合、エラーが発生します。 必須または省略可能な重複項目は、予期しないキー値のように処理されます。
- 既定の項目値 (省略可能)。 項目定義リストに既定の項目値が表示され、null でない場合は、既定値の代わりに使用されます。 繰り返しまたは省略可能な項目の既定値は null で、繰り返し値の既定値は空のリスト { } です。
- 項目値変換 (省略可能)。 項目値変換関数が項目定義リストに存在し、null でない場合は、返される前に項目値を変換するために呼び出されます。 transform 関数は、項目が入力に表示される場合にのみ呼び出されます (既定値で呼び出されることはありません)。
例 1
次の例では、1 バイトのキー値が想定され、グループ内に 4 つの予期される項目があり、そのすべてがキーの後に 1 バイトのデータを持ちます。 項目は、次のように入力に表示されます。
- キー 1 は必須であり、値 11 で表示されます。
- キー 2 が繰り返され、値が 22 で 2 回表示され、値 { 22, 22 } になります。
- キー 3 は省略可能であり、表示されず、null の値になります。
- キー 4 は繰り返されますが、表示されず、{}の値になります。
- キー 5 はグループの一部ではありませんが、値 55 で 1 回表示されます。 追加の関数は、キー値 5 で呼び出され、その値に対応する形式 (BinaryFormat.Byte) を返します。 値 55 は読み取られ、破棄されます。
使用方法
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)
アウトプット
{11, {22, 22}, null, {}}
例 2
次の例は、項目値の変換と既定の項目値を示しています。 キー 1 を持つ繰り返し項目は、 List.Sumを使用して読み取られた値の一覧を合計します。 キー 2 を持つ省略可能な項目の既定値は、null ではなく 123 です。
使用方法
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)
アウトプット
{203, 123}