BinaryFormat.Group
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,則會將其呼叫來轉換項目值,然後傳回。 只有當項目出現在輸入中時,才會呼叫轉換函式 (一律不會使用預設值來呼叫)。
下列假設為單一位元組的索引鍵值,其包含群組中的 4 個預期項目,其中資料都是索引鍵後面的一個位元組。 項目會顯示在輸入中,如下所示:
- 索引鍵 1 為必要,且顯示值為 11。
- 索引鍵 2 會重複,並以值 22 顯示兩次,並產生 { 22, 22 } 的值。
- 索引鍵 3 為選擇性,但不會顯示,且會產生 null 值。
- 索引鍵 4 會重複,但不會顯示,且會產生 { } 的值。
- 索引鍵 5 不是群組的一部分,但會以值 55 出現一次。 使用索引鍵值 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, {}}
下列範例說明項目值轉換和預設項目值。 具有鍵值 1 的重複的項目會將使用 List.Sum讀取的值列表進行加總。 具有索引鍵 2 的選擇性項目,預設值為 123,而不是 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)
輸出
{203, 123}