位置记录中的字段位置规范
若要定义位置记录,必须提供有关记录中字段的位置和长度的信息。 如果记录包含子记录,则子记录中的字段的位置和长度将汇总到包含记录的有关信息中。
为特定 Field 元素或 Field属性节点的位置偏移量和位置长度属性指定的值之和确定专用于相应字段的字符数。 涵盖记录及其所有子记录中的所有字段的一系列这样的和决定了记录中字段的边界。
注意
当架构节点的“以字节为单位的计数位置”属性设置为“是”时,“位置长度”和“位置偏移”属性指定字节而不是字符。
有关这些属性的更多详细信息,请参阅 UI 指南和开发人员 API 命名空间参考。
“位置偏移量”属性
当平面文件反汇编程序将平面文件实例消息转换为等效的 XML 实例消息时,为 Positional Offset 属性指定的值将定义多个字符 (或字节) ,这些字符将被忽略并跳过实例消息中的该位置。 换句话说,平面文件实例消息中由 Positional Offset 属性) 指定 (起始位置和长度的任何信息都不会复制到消息的 XML 版本中。
当平面文件汇编程序将 XML 实例消息转换为等效的平面文件实例消息时,为 Positional Offset 属性指定的值将定义多个字符 (或字节) ,这些字符在所创建的平面文件实例消息的起始位置填充空格字符。 始终使用空格字符来填充偏移位置;所使用的字符不可配置。
Positional Offset 属性提供了用于解释位置记录内容的灵活性。 实际上,此属性允许您忽略位于将此属性设置为非零值的字段前面的任何固定长度数据。 该固定长度数据可能是一个或多个不需要包括在平面文件实例消息的 XML 等效消息中的整个数据字段或某些类型的常数数据,例如,与字段关联的标记。 有关详细信息,请参阅后面的示例。
“位置长度”属性
当平面文件反汇编程序将平面文件实例消息转换为等效的 XML 实例消息时,为 Positional Length 属性指定的值将定义与实例消息中该位置的字段关联的字符数 (或字节) 数。 平面文件实例消息中起始位置和长度处出现的信息构成字段中的数据,但需遵守关联的 “理由” 和“ 垫字符 ”属性提供的其他信息。 有关理由和字段填充的更多概念性信息,请参阅 字段对齐 和 字段填充。
当平面文件汇编程序将 XML 实例消息转换为等效的平面文件实例消息时,为 Positional Length 属性指定的值将定义许多字符 (或可用于写入与该字段关联的数据的字节) 。 如果数据字符数比指定的字段长度要少,则将使用相关的填充字符来填充差额。 如果数据字符多于字段的指定长度,则会根据 Justification 属性的设置截断数据的开头或结尾,并且不包含在所构造的平面文件实例消息中。
注意
左对齐数据的尾部将被截断并丢弃。 右对齐数据的头部将被截断并丢弃。
示例
假设记录的字段定义如下:
字段节点名称 | 偏移量 | 长度 | Pad 字符 | 理由 |
---|---|---|---|---|
Field1 | 0 | 6 | 默认值(空格) | Left |
Field2 | 0 | 4 | * | Right |
Field3 | 2 | 6 | * | Left |
Field4 | 4 | 6 | 默认值(空格) | Right |
并且,在具有这些字段定义的记录的起点遇到以下字符流(第一行用于对字符位置计数):
123456789012345678901234567890123456789012345678901234567890
abc **12345678**skip here
将这些字段定义应用于此示例记录数据时,平面文件拆装器将生成以下 XML 等效消息(数据以粗体显示):
<Field1>abc</Field1>
<Field2>12</Field2>
<Field3>5678</Field3>
<Field4>here</Field4>
以下所观察到的现象展示了是如何对此数据进行解析的:
与 Field1 关联的字符 (长度 6 且没有偏移量) 为“”
abc
,但 XML 中不包含空格,因为空格字符是 Field1 的默认 () 填充字符,Field1 定义为左对齐。与 Field2 关联的字符 (长度 4 且没有偏移量) 为“
**12
”,但星号不包含在 XML 中,因为星号字符是为 Field2 定义的板字符,Field2 定义为右对齐。与 Field3 关联的字符 (长度 6 加上偏移量 2) 为“”
345678**
,但由于偏移量,3 和 4 不包含在 XML 中。 在 XML 中也不包括星号,因为星号字符是为 Field2 定义的填充字符,并且 Field2 被定义为左对齐。与 Field4 关联的字符 (长度 6 加上偏移量 4) 为“”
skip here
,但字符序列“skip
”不包括在 XML 中,因为偏移量。 在 XML 中也不包括两个空格字符,因为空格字符是 Field4 的(默认)填充字符,并且 Field4 被定义为右对齐。如果此示例中平面文件反汇编程序生成的 XML 使用相同的字段定义传递给平面文件汇编程序,则会生成相同的平面文件数据,但有两个例外:丢弃的偏移序列 34 和 skip 填充空格字符, (数据) 后面的行中的字符表示
^
。
123456789012345678901234567890123456789012345678901234567890
abc **12 5678** here
^^ ^^^^
另请参阅
- 字段注意事项
- 字段对齐
- 字段填充
- 有关以下属性的详细信息,请参阅 UI 指南和开发人员 API 命名空间参考:
- 平面文件架构 (Node 属性的以字节为单位的计数)
- 平面文件架构 (Node 属性)
- 平面文件架构) 的 Pad 字符 (Node 属性
- 平面文件架构的位置偏移 (Node 属性)
- 平面文件架构的位置长度 (节点属性)