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