BinaryFormat.Group
ไวยากรณ์
BinaryFormat.Group(binaryFormat as function, group as list, optional extra as nullable function, optional lastKey as any) as function
เกี่ยวกับ
พารามิเตอร์มีดังนี้:
- พารามิเตอร์
binaryFormat
ระบุรูปแบบไบนารีของค่าคีย์ - พารามิเตอร์
group
ให้ข้อมูลเกี่ยวกับกลุ่มของหน่วยข้อมูลที่รู้จัก - พารามิเตอร์ ที่เลือกได้
extra
สามารถใช้เพื่อระบุฟังก์ชันที่จะแสดงค่ารูปแบบไบนารีสําหรับค่าดังกล่าวตามคีย์ใด ๆ ที่ไม่คาดคิดextra
หากไม่ได้ระบุพารามิเตอร์ ระบบจะแสดงข้อผิดพลาด หากมีค่าคีย์ที่ไม่คาดคิดเกิดขึ้น
พารามิเตอร์ group
ระบุรายการของข้อกําหนดหน่วยข้อมูล แต่ละข้อกําหนดของหน่วยข้อมูลคือรายการที่มี 3-5 ค่าดังนี้:
- ค่าคีย์ ค่าของคีย์ที่สอดคล้องกับหน่วยข้อมูล การดําเนินการนี้ต้องไม่ซ้ํากันภายในชุดของหน่วยข้อมูล
- รูปแบบหน่วยข้อมูล รูปแบบไบนารีที่สอดคล้องกับค่าของหน่วยข้อมูล ซึ่งช่วยให้หน่วยข้อมูลแต่ละรายการมีรูปแบบที่แตกต่างกัน
- การปรากฏของหน่วยข้อมูล ค่า BinaryOccurrence.Type สําหรับจํานวนครั้งที่คาดหวังว่ารายการจะปรากฏในกลุ่ม หน่วยข้อมูลที่จําเป็นที่ไม่มีข้อผิดพลาดเกิดขึ้น หน่วยข้อมูลที่ซ้ํากันที่จําเป็นหรือเป็นทางเลือกจะได้รับการจัดการเช่นเดียวกับค่าคีย์ที่ไม่คาดคิด
- ค่าหน่วยข้อมูลเริ่มต้น (ไม่บังคับ) หากค่าหน่วยข้อมูลเริ่มต้นปรากฏในรายการข้อกําหนดหน่วยข้อมูลและไม่ใช่ค่า null ค่านี้จะถูกใช้แทนค่าเริ่มต้น ค่าเริ่มต้นสําหรับการทําซ้ําหรือหน่วยข้อมูลที่เลือกได้เป็น null และค่าเริ่มต้นสําหรับค่าที่ซ้ํากันคือรายการที่ว่างเปล่า { }
- การแปลงข้อมูลค่าหน่วยข้อมูล (ทางเลือก) หากฟังก์ชันการแปลงข้อมูลค่าหน่วยข้อมูลปรากฏอยู่ในรายการข้อกําหนดของหน่วยข้อมูลและไม่ใช่ค่า null ค่านี้จะถูกเรียกเพื่อแปลงข้อมูลค่าหน่วยข้อมูลก่อนที่จะถูกส่งกลับ ฟังก์ชันการแปลงข้อมูลจะถูกเรียกก็ต่อเมื่อหน่วยข้อมูลปรากฏในข้อมูลป้อนเข้า (จะไม่มีการเรียกใช้ด้วยค่าเริ่มต้น)
ตัวอย่างที่ 1
รายการต่อไปนี้จะถือว่าค่าคีย์ที่เป็นไบต์เดียว ซึ่งมีหน่วยข้อมูลที่คาดหวังจํานวน 4 รายการในกลุ่ม ซึ่งทั้งหมดนี้มีไบต์ของข้อมูลตามคีย์ หน่วยข้อมูลจะปรากฏในข้อมูลป้อนเข้าดังนี้:
- จําเป็นต้องมีคีย์ 1 และจะปรากฏพร้อมกับค่า 11
- คีย์ 2 ปรากฏซ้ําและปรากฏสองครั้งพร้อมกับค่า 22 และส่งผลให้มีค่า { 22, 22 }
- คีย์ 3 เป็นรายการทางเลือกและไม่ปรากฏขึ้น และแสดงผลลัพธ์เป็นค่า null
- คีย์ 4 ซ้ํากัน แต่ไม่ปรากฏขึ้น และส่งผลให้มีค่า { }
- คีย์ 5 ไม่ใช่ส่วนหนึ่งของกลุ่ม แต่จะปรากฏขึ้นหนึ่งครั้งพร้อมกับค่า 55 ฟังก์ชันพิเศษถูกเรียกด้วยค่าคีย์ 5 และแสดงรูปแบบที่สอดคล้องกับค่านั้น (BinaryFormat.Byte) ค่า 55 จะถูกอ่านและละทิ้ง
การใช้งาน
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)
เอาท์พุท
{11, {22, 22}, null, {}}
ตัวอย่าง 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)
เอาท์พุท
{203, 123}