Skip to main content

BinaryFormat.Group

ส่งกลับรูปแบบไบนารีที่อ่านกลุ่มรายการ

Syntax

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

Remarks

พารามิเตอร์มีดังต่อไปนี้:

  • พารามิเตอร์ binaryFormat จะระบุรูปแบบไบนารีของค่าคีย์
  • พารามิเตอร์ group จะมีข้อมูลเกี่ยวกับกลุ่มรายการที่รู้จัก
  • สามารถใช้พารามิเตอร์ extra ที่เป็นทางเลือกในการระบุฟังก์ชันที่จะส่งกลับค่ารูปแบบไบนารีสำหรับค่าที่ตามหลังคีย์ที่ไม่คาดคิด หากไม่มีการระบุพารามิเตอร์ extra จะเกิดข้อผิดพลาดขึ้นหากมีค่าคีย์ที่ไม่คาดคิด
พารามิเตอร์ group จะระบุรายการคำจำกัดความ คำจำกัดความแต่ละรายการคือ รายการที่มีค่าอยู่ 3-5 ค่าดังต่อนี้:
  • ค่าคีย์ ค่าของคีย์ที่สอดคล้องกับรายการ ซึ่งจะต้องไม่ซ้ำกันในชุดรายการ
  • รูปแบบรายการ รูปแบบไบนารีที่สอดคล้องกับค่าของรายการ โดยแต่ละรายการสามารถมีรูปแบบที่แตกต่างกันได้
  • การปรากฏของรายการ ค่า BinaryOccurrence.Type สำหรับจำนวนครั้งที่รายการควรจะปรากฏในกลุ่ม รายการที่จำเป็นที่ไม่ปรากฏจะทำให้เกิดข้อผิดพลาด จะมีการจัดการรายการซ้ำที่จำเป็นหรือเป็นตัวเลือกเช่นเดียวกันกับค่าคีย์ที่ไม่คาดคิด
  • ค่ารายการเริ่มต้น (ทางเลือก) หากค่าข้อมูลเริ่มต้นปรากฏในคำจำกัดความรายกาและไม่มีค่าเป็น Null ค่านั้นจะถูกใช้แทนค่าเริ่มต้น ค่าเริ่มต้นสำหรับรายการซ้ำหรือข้อมูลที่เป็นตัวเลือกมีค่าเป็น Null และค่าเริ่มต้นสำหรับค่าที่ทำซ้ำคือรายการว่างเปล่า { }
  • การแปลงค่ารายการ (ทางเลือก) หากฟังก์ชันการแปลงค่ารายการปรากฏในคำจำกัดความรายการและไม่มีค่าเป็น Null จะมีการเรียกใช้ฟังก์ชันนั้นเพื่อแปลงค่ารายการก่อนส่งกลับ จะมีการเรียกใช้ฟังก์ชันการแปลงเฉพาะหากรายการปรากฏในข้อมูลป้อนเข้า (จะไม่มีการเรียกใช้ฟังก์ชันนี้ด้วยค่าเริ่มต้นโดยเด็ดขาด)

Examples

Example #1

รายการต่อไปนี้จะใช้ค่าคีย์ที่เป็นไบต์เดียวพร้อมด้วยรายการที่คาดหวัง 4 รายการในกลุ่ม ทั้งหมดนี้จะมีไบต์ของข้อมูลหลังจากคีย์ รายการจะปรากฏในข้อมูลป้อนเข้าดังนี้:<ul><li>ต้องการคีย์ 1 และปรากฏพร้อมกับค่า 11</li><li>คีย์ 2 ทำซ้ำและปรากฏสองครั้งพร้อมกับค่า 22 และผลลัพธ์ในค่าของ { 22, 22 }</li><li>คีย์ 3 จะใช้หรือไม่ก็ได้และไม่ปรากฏ และส่งผลลัพธ์ให้ค่าเป็น Null</li><li>คีย์ 4 จะทำซ้ำแต่ไม่ปรากฏ และส่งผลลัพธ์ให้ค่าเป็น { }</li><li>คีย์ 5 ไม่เป็นส่วนหนึ่งของกลุ่ม แต่ปรากฏหนึ่งครั้งพร้อมกับค่า 55 ฟังก์ชันพิเศษจะถูกเรียกใช้พร้อมกับค่าคีย์ 5 และส่งกลับรูปแบบที่สอดคล้องกับค่านั้น (BinaryFormat.Byte) ค่า 55 จะถูกอ่านและถูกละทิ้ง</li></ul>

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)

Result:

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

Example #2

ตัวอย่างต่อไปนี้จะแสดงให้เห็นการแปลงค่ารายการและค่ารายการเริ่มต้น ข้อมูลที่ทำซ้ำพร้อมกับคีย์ 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)

Result:

{203, 123}

Category

Binary Formats.Reading a group of items