データ再構成の例
以下は、特に必要とされる用途のための置換規則型の例である。
リテラルの挿入
リテラルを挿入するには、左辺の項を分離し、右辺でそれを挿入する。
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