Ανάγνωση στα Αγγλικά

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


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}