首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >比较文件和报表统计中的记录-场景2

比较文件和报表统计中的记录-场景2
EN

Stack Overflow用户
提问于 2009-05-20 22:45:55
回答 1查看 244关注 0票数 1

所需经费如下:

事实1:我们有一些由遗留系统生成的数据文件。

事实2:我们有一些由新系统产生的数据文件,最终应该取代旧的系统。

事实3:

这两个文件都是text/ASCII文件,记录由多行组成。记录中的每一行都由字段名和fieldvalue.

  • The格式组成,在1和2之间不同,但是可以通过使用regex

  • 字段名从每一行中提取字段名和字段值。但是,我们有一个与它们相关的映射(

  • ),每个记录都有一个唯一的标识符,它帮助我们将遗留记录与一个新记录关联起来,因为输出文件中记录的顺序不需要在两个

文件之间相同,以便将至少10 MB与平均30 - 35 MB的进行比较。

事实4:当我们迭代构建新系统时,我们需要比较两个系统在完全相同的条件下生成的文件,并协调差异。

事实5:这种比较是使用昂贵的视觉差异工具手动完成的。为了在这方面有所帮助,我编写了一个工具,将两个不同的字段名放入一个公共名称中,然后在每个记录中对每个文件中的字段名进行排序,以便它们按顺序同步(新文件可以有在visual diff中被忽略的额外字段)。

事实6:由于人类手工进行的比较,以及人类的错误,我们得到了错误的正负,这对我们的时间表产生了很大的影响。

很明显,问题是,'ALG‘和'DS’应该是什么?

我必须解决的情况是:

我想要构建一个PERL程序

DS

  • Display/report
  1. 将两个文件中的相关信息读入数据结构‘DS’
  2. 进程中,并使用算法'ALG‘查找来自的记录与最终用户的统计数据之间的差异,例如记录之间有多少行(值)不同或值完全不同,是否缺少行(来自新系统的文件可以有额外字段,但它们必须包含遗留系统生成的文件中的所有行)。

我的建议是:

DS :绑定到磁盘的多个嵌套散列。

看上去:

代码语言:javascript
复制
$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的输出将是:

代码语言:javascript
复制
$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];
};

在这种情况下,你会做什么/建议什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-05-20 23:01:03

为什么不将所有数据导入SQLite数据库。您只需要一个表,其中只有一个主键对应于两个系统共有的唯一标识符。列应该是传统字段和新字段的结合。

首先导入一个数据集,比如新系统生成的数据集。然后,对于遗留集中的每个项,尝试对表中相应的条目进行更新:如果更新失败,您将知道新数据集丢失了旧系统中过去存在的那些条目。

如果与遗留数据相对应的任何列都具有NULL,那么您将知道旧系统中不存在的新系统中的条目。

然后,您可以选择新系统中的任何列都与旧系统中的相应列不匹配的行。

IMHO,这比基于哈希表的系统更灵活。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/890624

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档