Κοινή χρήση μέσω


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

Το παρακάτω προϋποθέτει μια τιμή κλειδιού που είναι ένα μόνο byte, με 4 αναμενόμενα στοιχεία στην ομάδα, τα οποία έχουν όλα ένα byte δεδομένων μετά από το κλειδί. Τα στοιχεία εμφανίζονται στην είσοδο ως εξής:

  • Το κλειδί 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}