Bagikan melalui


BinaryFormat.Group

Sintaksis

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

Tentang

Parameternya adalah sebagai berikut:

  • Parameter binaryFormat menentukan format biner dari nilai kunci.
  • Parameter group menyediakan informasi tentang grup item yang diketahui.
  • Parameter extra opsional dapat digunakan untuk menentukan fungsi yang akan mengembalikan nilai format biner untuk nilai berikut kunci apa pun yang tidak terduga. Jika parameter extra tidak ditentukan, maka kesalahan akan muncul jika ada nilai kunci yang tidak terduga.

Parameter group menentukan daftar definisi item. Setiap definisi item adalah daftar, yang berisi 3-5 nilai, sebagai berikut:

  • Nilai kunci. Nilai kunci yang sesuai dengan item. Ini harus unik dalam kumpulan item.
  • Format item. Format biner yang sesuai dengan nilai item. Ini memungkinkan setiap item memiliki format yang berbeda.
  • Kemunculan item. Nilai BinaryOccurrence.Type untuk berapa kali item diharapkan muncul dalam grup. Item yang diperlukan yang tidak ada menyebabkan kesalahan. Item-item duplikat yang diperlukan atau opsional dianggap seperti nilai kunci yang tidak diharapkan.
  • Nilai item default (opsional). Jika nilai item default muncul dalam daftar definisi item dan tidak null, maka nilai item tersebut akan digunakan alih-alih default. Default untuk item yang berulang atau opsional adalah null, dan default untuk nilai berulang adalah daftar kosong { }.
  • Transformasi nilai dari item (opsional). Jika fungsi transformasi nilai item ada dalam daftar definisi item dan tidak null, maka akan dipanggil untuk mengubah nilai item sebelum dikembalikan. Fungsi transformasi hanya dipanggil jika item muncul dalam input (tidak akan pernah dipanggil dengan nilai default).

Contoh 1

Berikut ini mengasumsikan nilai kunci yang merupakan byte tunggal, dengan 4 item yang diharapkan dalam grup, yang semuanya memiliki byte data setelah kunci. Item-item muncul dalam input sebagai berikut:

  • Kunci 1 diperlukan, dan muncul dengan nilai 11.
  • Kunci 2 berulang, dan muncul dua kali dengan nilai 22, dan menghasilkan nilai { 22, 22 }.
  • Kunci 3 bersifat opsional, dan tidak muncul, dan menghasilkan nilai null.
  • Kunci 4 berulang, tetapi tidak muncul, dan menghasilkan nilai { }.
  • Kunci 5 bukan bagian dari grup, tetapi muncul sekali dengan nilai 55. Fungsi tambahan dipanggil dengan nilai kunci 5, dan mengembalikan format yang sesuai dengan nilai tersebut (BinaryFormat.Byte). Nilai 55 dibaca dan dibuang.

Penggunaan

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)

Output

{11, {22, 22}, null, {}}

Contoh 2

Contoh berikut mengilustrasikan transformasi nilai item dan nilai item default. Item berulang dengan kunci 1 menjumlahkan daftar nilai yang dibaca menggunakan List.Sum. Item opsional dengan kunci 2 memiliki nilai default 123, bukan null.

Penggunaan

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)

Output

{203, 123}