`

用Perl进行数据加工处理

 
阅读更多

最近项目需要用Perl对文本数据进行加工处理,再一次Perl的高效快捷让我爱不释手。

平时我们习惯用SQL文进行数据的增删查改处理,在没有DB的情况下,配上恰当的算法,Perl的

文件处理能力同样能够写出同SQL一样高效的小程序。

 

  【条件过滤】

    将条件参数放入文本中,Perl逐行读该文件,在以key/value的形式存入hash。

    打开需要过滤的文件,perl逐行读该文件,取出条件项目字段,判断该字段是否在hash中存在,

    如果存在,将本行数据写入过滤后的文本中。

 

  【Interface数据作成】

    如果数据仓库在A系统中,一般A系统将会向下流N个系统

    以文件数据的形式提供Interface。从格式上讲:Interface文件一般根据“固定/可变,编码,分隔符,双引号”的

    不同而不同;从内容上讲则有全件与差分的区别。下流系统全件数据更新时:会删除当前所以旧数据,再将本

    次文件中所以记录追加到相应表中;下流系统差分数据更新时:会根据提供数据记录的“删除,变更,追加”区

    分对相应的表做处理。全件数据一般用一条SQL可将执行结果导到文件中。而差分数据则需要本次全件数据

    同上次数据逐行进行比较,进而将不同的数据(删除、添加、更新)输出到差分文件中。

 

   本次项目的差分数据作成算法非常巧妙,值得留下记录。

    假设A文件为上次全件数据,B文件为本次全件数据。

    ①.A文件和B文件,按照差分比较用主键进行升序排序。

    ②.取A文件和B文件第一行

    ③.当A和B文件都处理完成时终止循环

          ・A文件第一行=B文件第一行

             ⇒过滤,依次读A和B文件下一行

          ・A文件第一行≠B文件第一行 && A文件主键 = B文件主键

             ⇒将B文件的这条数据以更新区分的形式输出到差分文件中,A和B文件依次读取下一行

          ・A文件第一行≠B文件第一行 && A文件主键 > B文件主键

             ⇒将B文件的这条数据以追加区分的形式输出到差分文件中,B文件读取下一行

          ・A文件第一行≠B文件第一行 && A文件主键 < B文件主键

             ⇒将A文件的这条数据以删除区分的形式输出到差分文件中,A文件读取下一行

 

未完待续酷

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics