简单条件值
简单条件由典型模式操作数后跟等号和值表示。
字母值必须使用引号。 用于测试是否存在后跟街道类型的值为 MAPLE 的令牌的条件是:
*? = "MAPLE" | T
*? = "MAPLE"
是具有条件的标记,也是操作数。
如果分类中包含单词 SOUTH ,那么可以使用 D = "SOUTH" 对 SOUTH 进行显式测试,也可以使用 D = "S" 对操作数使用标准缩写为 S 的任何方向进行测试。
输入不带引号的数字值。 以下模式操作集与 1000 MAIN 匹配,但与 1001 MAIN不匹配。
* ^ = 1000 | ?
等号运算符 (=) 测试标准化缩写 (如果令牌在 .cls 文件中找到并且具有缩写) 和操作数的原始等号值。 另外两个运算符可用于仅测试与缩写或原始令牌值的等同性。 运算符如下所示:
运算符 | 值 |
---|---|
= A= | 只测试 .cls 文件中的缩写。 |
= T= | 只测试原始标记值。 |
例如,要正确处理 AVE MARIA LANE,请测试是否与原始令牌值相等:
*T =T= "AVE" | + | T
RETYPE [1] ?
作为操作数, *T =T= "AVE"
确保对 AVE 进行编码,而不是对另一个映射到相同缩写的值进行编码,从而使 AVENUE MARIA 的输入保持不变。 同样,如果只需要对缩写进行测试,请使用 = A= 。
一系列条件值
以下示例是等价的,表示街道类型的值或标准化缩写是 RD
或 AV
或 PL
:
T = "RD", "AV", "PL"
T = "RD" "AV" "PL"
数字系列可以用同样的方式表示,只是不加引号。 您还可以选择使用缩写相等运算符 =A= 或原始值运算符 =T=,例如:
T =A= "RD", "AV", "PL"
T =T= "RD", "AV", "PL"
可以用类似的方法对字典字段中的一系列值进行测试:
^ | T | [ {StreetName} = "MAIN", "ELM", "COLLEGE" ]
以下模式测试国家代码(指定为 CC
),以确定要使用的处理方式:
; Armenia, Azerbaijan, China, Georgia, Russia, Tajikstan
;
[ {CC}="ARM" ,"AZE" ,"CHN" ,"GEO" ,"RUS" ,"TJK" ]
CALL Area_Format_B
如果您测试的是字典字段值,而不是普通的模式操作数,则测试必须遵循所有模式操作数,包括字段结束。
^ | ? | T | $ | [ {StreetName} = "MAIN", "ELM", "COLLEGE" ]
测试 [ {StreetName} = "MAIN", "ELM", "COLLEGE" ]
遵循所有模式操作数,包括字段结束符 ($)。
条件值表
如果有很多值很难包含在条件语句中,或者您更喜欢更新表中的值而不是修改模式-操作文件,则可以使用值表文件。
表格可按如下方式指定:
@TABLE_FILE_NAME.TBL
例如,您想测试一个数字是否是一系列邮政编码中的一个。 首先,编辑模式-操作文件,引用列出邮政编码的文件。 在 InfoSphere® DataStage® and QualityStage® Designer 中为文件创建占位符。 然后编辑列出邮政编码的文件。 确保每个邮政编码都有一行。 例如,该文件名为 POSTCODE.TBL 并如下所示:
90016
90034
90072
90043
...
匹配城市、州和邮政编码的模式可能如下所示:
? | S | ^ = @POSTCODE.TBL
该模式用于匹配包含城市名称、州和邮政编码的情况。 如果数字操作数在列表中,则模式匹配;否则不匹配。 LOS ANGELES CA 90016匹配,但 CHICAGO IL 12345不匹配,因为表格中没有邮政编码。
表格文件名可包含完整或相对路径信息,包括环境变量。 如果在命令行中指定了规则集的路径,则该路径将用于规则集的模式-操作文件中的值文件,并且不能再次指定路径。
字典字段内容也可以根据值表进行测试:
^ | T | {StreetName} = @STRTNAME.TBL
如果字典字段内容不是模式操作数,则必须按照所有模式操作数(包括字段结束操作数)对值表进行测试。 下面的示例无效,因为表格测试后有一个模式操作数:
^ | {StreetName} = @STRTNAME.TBL | T
组合条件表达式
运算符 | 值 |
---|---|
& |
和 |
| |
或 |
测试大于 1000 的偶数房屋:
^ [{} % 2 = 0 & {} > 1000]
测试 1000 到 10000 之间的房屋:
^ [{} >= 1000 & {} <= 10000]
检测房屋数量是否小于 100 或大于 1000:
^[{} < 100 | {} > 1000]
测试偶数房屋,测试 temp 中一半的值是否大于 50,测试邮政编码是否大于 12345:
^ [{} % 2 = 0 & temp / 2 > 50 & {ZipCode} > 12345]
不允许使用括号。 所有操作都从左到右执行。 在单个括号限定的条件中,AND 和 OR 操作符不能混合使用。 如果遇到这种情况,将打印错误信息。 如果可能,可以通过使用单独的模式操作数来获得操作符优先级。 算术表达式 ((a | b) & (c | d)) 可以用以下方式表示:
[a | b] | [c | d]
括号内的竖线 (|) 表示逻辑 OR 运算,括号外的竖线表示操作数分隔符。 在前面的示例中,a
、b
、c
和 d
表示条件表达式。