BinaryFormat.Group

Sözdizimi

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

Hakkında

Parametreler şu şekildedir:

  • binaryFormat parametresi anahtar değerinin ikili biçimini belirtir.
  • parametresi, group bilinen öğeler grubu hakkında bilgi sağlar.
  • İsteğe bağlı extra parametresi, beklenmeyen herhangi bir anahtarın ardından 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österilmesinin 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ğerleri 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).

Örnek 1

Aşağıda, tümü anahtarı izleyen bir bayt veri içeren, grupta beklenen 4 öğe içeren tek bir bayt olan bir anahtar değeri varsayılır. Öğeler girişte aşağıdaki gibi görünür:

  • Anahtar 1 gereklidir ve 11 değeriyle birlikte 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, {}}

Örnek 2

Aşağıdaki örnekte öğe değeri dönüşümü ve varsayılan öğe değeri gösterilmektedir. Anahtar 1 ile yinelenen öğe, List.Sum kullanı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}