다음을 통해 공유


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가 있는 선택적 항목의 기본값은 null이 아닌 123입니다.

사용량

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}