数据重构的一些示例
以下是一些针对特定所需应用的替换规则类型示例。
字面量插入
要插入一个字面量,请把左侧的各项分开,以便在右侧插入它。
a(A:10),b(A:70)->(a),(E'LIT':3),(b)
这 80 个 ASCII 字符在输出区中被输出,并在前 10 个 ASCII 字符之后插入 EBCDIC 字面量 LIT。
删除
左侧的各项被分开,以便右侧可以省略不需要的项。
(B:7),a(A:10)->(Ev(a):L(a))
在输出区中只输出这 10 个 ASCII 字符(作为 EBCDIC),这 7 个二进制位被丢弃。
输出缓冲区中的留空
在存在预格式化输出缓冲区(通常是显示缓冲区)的情况下,可以通过在右侧的项中省略复制函数和值函数来实现留空。
a(A:74)->(E:6),(Ev(a):74)
(E:6) 使输出区中跳过 48 个位的位置,随后这 74 个 ASCII 字符被转换为 EBCDIC 并在当前输出位置被输出。
任意长度
有些设备/程序每行产生数量可变的字符,而人们希望从中生成定长记录。
a(A:#) -> (Ev(a):74)
这些 ASCII 字符按需被截断或填充,并在一个 74 字符的字段中被转换为 EBCDIC。
转置
要转置的字段应当在左侧作为项被隔离出来。
a(X:2),b(A:#)->(Ev(b):L(b)),(a)
字符串长度计算
有些格式要求把字符串长度作为数据流的一部分。这可以通过长度函数来实现。
a(E:10),b(X'FF':2)->(BL(a)+L(b)+8:8),(Av(a):L(a)),(b)
长度项首先被输出,位于一个 8 位的字段中。 在这种情况下,长度既包含长度字段,也包含 ASCII 字符字段。
重复符号的展开与压缩
下面的规则对重复符号进行压缩。
a(E:1), b(E#*v(a):L(b)) -> (BL(b)+1:8),(a)
给定下面的输入串,连续三次应用该规则将输出所示的输出串。
Input: XXXXYYZZZZZZZ
Output: 4X2Y7Z