“连接 Info 表”(Coverage) 的工作原理
连接 Info 表工具由两个 INFO 数据文件组成。为创建“输出 Info 表”,两个文件的项定义和值均被合并(请参阅下面的“示例”一节)。
“输出 Info 表”中的项集的形成方式如下:将“连接 Info 表”中的项定义插入到“输入 Info 表”中指定的“起始项”后面。仅合并不在“输入 Info 表”中的那些“连接 Info 表”项。当两个文件中出现相同的项名称时,“输入 Info 表”的定义和值优先。
项目值通过 INFO 关联逻辑进行合并。当“关联项”的值相等时,“连接 Info 表”中的记录会与“输入 Info 表”中的各条记录匹配。两条记录中的项目值随后被复制到“输出 Info 表”。
“关联类型”指定了用于匹配记录的方法。LINEAR 和 ORDERED 选项中的匹配过程可能需要搜索整个“连接 Info 表”,才会获得一条满足以下条件的记录:该记录的“关联项”值与给定“输入 Info 表”记录中的“关联项”值相同。对于“输入 Info 表”的每条记录,系统都会对“连接 Info 表”执行一次搜索。指定 LINEAR 时会使用顺序搜索法,而二分搜索法则用于 ORDERED 选项。如果“连接 Info 表”很大,则使用 ORDERED 选项通常会执行较快。“连接 Info 表”必须按“关联项”升序排序方可使用 ORDERED 选项。
使用 LINK 选项时,只有“输入 Info 表”必须包含“关联项”。“输入 Info 表”的每条记录中的“关联项”都会连接到要合并的“连接 Info 表”中的记录号。由于没有对匹配“关联项”值进行搜索,因此执行速度较快。
大多数情况下,“输入 Info 表”和“连接 Info 表”都应进行排列,以便任一文件中的每条记录均可以与另一个文件中的一条(并且是唯一的一条)记录相匹配。如果这种一对一的对应关系不存在,则会出现以下某种情况:
- 一条“输入 Info 表”记录可以与多条“连接 Info 表”记录匹配。这种情况下,将只有一条“连接 Info 表”记录与每条输入记录合并。包含在其他任何匹配记录中的数据都不会显示在“输出 Info 表”中。在这种情况下选择的记录在已建立索引的关联项和未建立索引的关联项之间可能存在差异;在对某项建立索引后,无法确切获取其在文件中第一次出现的位置。
- “输入 Info 表”记录不能与任一“连接 Info 表”记录匹配。这种情况下,相应的“输出 Info 表”记录将包含“连接 Info 表”项的 0 值或空值。
- 一条“连接 Info 表”记录与多条“输入 Info 表”记录匹配。这种情况下,“连接 Info 表”记录会与每条匹配的“输入 Info 表”记录合并。数据会重复出现在“输出 Info 表”中。
- “连接 Info 表”记录不能与任一“输入 Info 表”记录匹配。这种情况下,不会进行合并,并且数据也不会出现在“输出 Info 表”中。
示例
用法:JOINITEM <in_info_table> <join_info_table> <out_info_table> <relate_item> {start_item} {LINEAR | ORDERED | LINK}
JOINITEM 之前的 EXCOV.PAT:
RECNO AREA PERIMETER EXCOV# EXCOV-ID 1 00028176.00* 40,005.500 1 0 2 8881,878.000 13,950.113 2 2 3 8917,384.000 20,539.754 3 1 4 33996880.000 32,816.500 4 3 5 15326114.000 16,342.805 5 5 6 4163,639.000 8,161.073 6 4 7 20812064.000 20,337.066 7 6 8 7930,208.000 11,073.945 8 7
EXCOV.CODE:
RECNO EXCOV-ID CLASS SUIT SOIL 1 2 A 3 EMS 2 1 B 0 DH 3 3 A 7 SDL 4 5 B 2 EAS 5 4 C 0 RO 6 6 B 4 WNB 7 7 A 3 EMS
JOINITEM 之后的 EXCOV.PAT:
RECNO AREA PERIMETER EXCOV# EXCOV-ID CLASS SUIT SOIL 1 00028176.00* 40,005.500 1 0 0 0 2 8881,878.000 13,950.113 2 2 A 3 EMS 3 8917,384.000 20,539.754 3 1 B 0 EDH 4 33996880.000 32,816.500 4 3 A 7 SDL 5 15326114.000 16,342.805 5 5 B 2 EAS 6 4163,639.000 8,161.073 6 4 C 0 RO 7 20812064.000 20,337.066 7 6 B 4 WNB 8 7930,208.000 11,073.945 8 7 A 3 EMS