所需经费如下:
事实1:我们有一些由遗留系统生成的数据文件。
事实2:我们有一些由新系统产生的数据文件,最终应该取代旧的系统。
事实3:
这两个文件都是text/ASCII文件,记录由多行组成。记录中的每一行都由字段名和fieldvalue.
文件之间相同,以便将至少10 MB与平均30 - 35 MB的进行比较。
事实4:当我们迭代构建新系统时,我们需要比较两个系统在完全相同的条件下生成的文件,并协调差异。
事实5:这种比较是使用昂贵的视觉差异工具手动完成的。为了在这方面有所帮助,我编写了一个工具,将两个不同的字段名放入一个公共名称中,然后在每个记录中对每个文件中的字段名进行排序,以便它们按顺序同步(新文件可以有在visual diff中被忽略的额外字段)。
事实6:由于人类手工进行的比较,以及人类的错误,我们得到了错误的正负,这对我们的时间表产生了很大的影响。
很明显,问题是,'ALG‘和'DS’应该是什么?
我必须解决的情况是:
我想要构建一个PERL程序
DS
我的建议是:
DS :绑定到磁盘的多个嵌套散列。
看上去:
$namedHash { unique field value across both records } = {
legacy_system => {
'goodField' => 'I am good!',
'firstField' => 1,
'secondField' => 3
},
new_system => {
'firstField' => 11,
'secondField' => 33,
'goodField' => 'I am good!'
}
};ALG :由legacy_system和new_system密钥指向的匿名哈希之间的密钥比较。任何差异都将通过插入一个新的键“差异”来记录下来,这将是一个在遗留系统和新系统之间不同的字段名数组。
因此,对于这个示例,我的ALG的输出将是:
$namedHash { unique field value across both records } = {
legacy_system => {
'goodField' => 'I am good!',
'firstField' => 1,
'secondField' => 3
},
new_system => {
'firstField' => 11,
'secondField' => 33,
'goodField' => 'I am good!'
},
differences => [firstField, secondField];
};在这种情况下,你会做什么/建议什么?
发布于 2009-05-20 23:01:03
为什么不将所有数据导入SQLite数据库。您只需要一个表,其中只有一个主键对应于两个系统共有的唯一标识符。列应该是传统字段和新字段的结合。
首先导入一个数据集,比如新系统生成的数据集。然后,对于遗留集中的每个项,尝试对表中相应的条目进行更新:如果更新失败,您将知道新数据集丢失了旧系统中过去存在的那些条目。
如果与遗留数据相对应的任何列都具有NULL,那么您将知道旧系统中不存在的新系统中的条目。
然后,您可以选择新系统中的任何列都与旧系统中的相应列不匹配的行。
IMHO,这比基于哈希表的系统更灵活。
https://stackoverflow.com/questions/890624
复制相似问题