BinaryFormat.Group
BinaryFormat.Group(binaryFormat as function, group as list, optional extra as nullable function, optional lastKey as any) as function
Parametreler aşağıdaki gibidir:
-
binaryFormat
parametresi anahtar değerinin ikili biçimini belirtir. -
group
parametresi, bilinen öğe grubu hakkında bilgi sağlar. - İsteğe bağlı
extra
parametresi, beklenmeyen herhangi bir anahtarı izleyen değer için ikili biçim değeri döndürecek bir işlev belirtmek için kullanılabilir.extra
parametresi belirtilmezse, beklenmeyen anahtar değerleri varsa bir hata oluşur.
group
parametresi, öğe tanımlarının listesini belirtir. Her öğe tanımı, aşağıdaki gibi 3-5 değer içeren bir listedir:
- Anahtar değeri. Öğeye karşılık gelen anahtarın değeri. Bu, öğe kümesi içinde benzersiz olmalıdır.
- Öğe biçimi. Öğenin değerine karşılık gelen ikili biçim. Bu, her öğenin farklı bir biçime sahip olmasını sağlar.
- Öğe oluşumu. Öğenin grupta kaç kez görünmesinin beklendiğine ilişkin BinaryOccurrence.Type değeri. Mevcut olmayan gerekli öğeler hataya neden olur. Gerekli veya isteğe bağlı yinelenen öğeler, beklenmeyen anahtar değerler gibi işlenir.
- Varsayılan öğe değeri (isteğe bağlı). Varsayılan öğe değeri öğe tanımı listesinde görünüyorsa ve null değilse, varsayılan değer yerine kullanılır. Yinelenen veya isteğe bağlı öğeler için varsayılan değer null, yinelenen değerler için varsayılan değer ise boş bir { } listesidir.
- Öğe değeri dönüşümü (isteğe bağlı). Öğe değeri dönüştürme işlevi öğe tanımı listesinde varsa ve null değilse, döndürülmeden önce öğe değerini dönüştürmek için çağrılır. Dönüştürme işlevi yalnızca öğe girişte görünüyorsa çağrılır (hiçbir zaman varsayılan değerle çağrılmaz).
Aşağıda, anahtar değeri tek bir bayt olan ve grubun 4 öğe içermesi beklenen bir durum varsayılmaktadır; tüm öğeler, anahtarın ardından gelen bir bayt veri içermektedir. Öğeler girişte aşağıdaki gibi görünür:
- Anahtar 1 gereklidir ve zaten 11 değeriyle görünür.
- Anahtar 2 yineler ve 22 değeriyle iki kez görüntülenir ve sonuç olarak { 22, 22 } değeri elde eder.
- Anahtar 3 isteğe bağlıdır ve görünmez ve null değeriyle sonuçlanır.
- Anahtar 4 yineler, ancak görüntülenmez ve { } değeriyle sonuçlanır.
- Anahtar 5 grubun bir parçası değildir, ancak 55 değeriyle bir kez görünür. Ek işlev 5 anahtar değeriyle çağrılır ve bu değere karşılık gelen biçimi döndürür (BinaryFormat.Byte). 55 değeri okunur ve atılır.
Kullanım
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)
çıkış
{11, {22, 22}, null, {}}
Aşağıdaki örnekte öğe değeri dönüşümü ve varsayılan öğe değeri gösterilmektedir. Anahtar 1 ile yinelenen öğe, List.Sumkullanılarak okunan değerlerin listesini toplar. 2 anahtarına sahip isteğe bağlı öğenin varsayılan değeri null yerine 123'tür.
Kullanım
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)
Çıkış
{203, 123}