Поделиться через


BinaryFormat.Choice

Синтаксис

BinaryFormat.Choice(binaryFormat as function, chooseFunction as function, optional type as nullable type, optional combineFunction as nullable function) as function

Около

Возвращает двоичный формат, который выбирает следующий двоичный формат на основе значения, которое уже было прочитано. Значение двоичного формата, созданное этой функцией, работает на этапах:

  • Двоичный формат, указанный параметром binaryFormat, используется для чтения значения.
  • Значение передается функции выбора, указанной параметром chooseFunction.
  • Функция выбора проверяет значение и возвращает второй двоичный формат.
  • Второй двоичный формат используется для чтения второго значения.
  • Если указана функция объединения, то первые и второй значения передаются в функцию объединения, а результирующее значение возвращается.
  • Если функция объединения не указана, возвращается второе значение.
  • Возвращается второе значение.

Необязательный параметр type указывает тип двоичного формата, возвращаемого функцией выбора. Можно указать type any, type listили type binary. Если параметр type не указан, используется type any. Если используется type list или type binary, система может вернуть значение потоковой передачи binary или list вместо буферизованного, что может уменьшить объем памяти, необходимой для чтения формата.

Пример 1

Прочитайте список байтов, в которых число элементов определяется первым байтом.

использование

let
    binaryData = #binary({2, 3, 4, 5}),
    listFormat = BinaryFormat.Choice(
        BinaryFormat.Byte,
        (length) => BinaryFormat.List(BinaryFormat.Byte, length)
    )
in
    listFormat(binaryData)

выход

{3,4}

Пример 2

Прочитайте список байтов, где количество элементов определяется первым байтом, при этом первый байт сохраняется.

использование

let
    binaryData = #binary({2, 3, 4, 5}),
    listFormat = BinaryFormat.Choice(
        BinaryFormat.Byte,
        (length) => BinaryFormat.Record([
            length = length,
            list = BinaryFormat.List(BinaryFormat.Byte, length)
        ])
    )
in
    listFormat(binaryData)

выход

[length = 2, list = {3, 4}]

Пример 3

Прочитайте список байтов, в котором число элементов определяется первым байтом с использованием потокового списка.

использование

let
    binaryData = #binary({2, 3, 4, 5}),
    listFormat = BinaryFormat.Choice(
        BinaryFormat.Byte,
        (length) => BinaryFormat.List(BinaryFormat.Byte, length),
        type list
    )
in
    listFormat(binaryData)

Выход

{3, 4}