文本文件比对示例

【摘要】
本文介绍两个文本文件进行比对,按照需求找出文件中数据相同或不同时,会遇到的几种情况,并用 esProc SPL 举例实现。请点击文本文件比对示例了解详情

 

在数据处理业务中,有时需要比较两个文本文件内容有哪些相同或不同的数据,本文将介绍文本文件比对的几种情况,如整行比对、关键列比对,同时又分小文件、大文件比对,并提供用 esProc SPL 编写的代码示例。esProc 是专业的数据计算引擎,SPL 中有一套完善的集合运算领域的函数库,做文件比对很方便,写出的代码非常简洁。

 

1.   小文件比对

1.1  整行比对

有两个文本文件,其每一行是一个字符串,要对这两个文件中整行内容进行比对。处理此问题可以把文件的每一行读成一个字符串,组成一个集合,然后通过两个集合的运算得出结果。

报名绘画、舞蹈兴趣班的同学学号姓名分别记录在paint.txt和dance.txt中,paint.txt部分数据如下所示:
    20121102-Joan
    20121107-Jack
    20121113-Mike

 

1.1.1.   找相同

把两个文件中整行内容相同的行都找出来,即求两集合的交集。

示例:请找出报了这两个兴趣班的所有同学,记录在p_d.txt文件中。

esProc SPL脚本如下:

  A 注释
1 =file("e:/txt/paint.txt").read@n() 读出paint.txt的每一行组成集合
2 =file("e:/txt/dance.txt").read@n() 读出dance.txt的每一行组成集合
3 =file("e:/txt/p_d.txt").write(A1^A2) 将A1、A2集合的交集写入文件p_d.txt中

 

1.1.2.  找不同

找不同有以下两种情况:

1、  找出两个文件中所有不相同的行。

示例:找出所有只报了一个兴趣班的同学, esProc SPL脚本如下:

  A 注释
1 =file("e:/txt/paint.txt").read@n() 读出paint.txt的每一行组成集合
2 =file("e:/txt/dance.txt").read@n() 读出dance.txt的每一行组成集合
3 =file("e:/txt/p_d.txt").write(A1%A2) 将A1、A2集合的异或集写入文件p_d.txt中

 

2、找出一个文件中有而另一个文件中没有的行。

示例:找出只报了绘画班的同学和只报了舞蹈班的同学, esProc SPL脚本如下:

  A 注释
1 =file("e:/txt/paint.txt").read@n() 读出paint.txt的每一行组成集合
2 =file("e:/txt/dance.txt").read@n() 读出dance.txt的每一行组成集合
3 =file("e:/txt/p_1.txt").write(A1\A2) 将绘画班A1减去舞蹈班A2所得的差集,即只报了绘画班的同学,写入文件p_1.txt中
4 =file("e:/txt/d_1.txt").write(A2\A1) 将舞蹈班A2减去绘画班A1所得的差集,即只报了舞蹈班的同学,写入文件d_1.txt中

 

1.2  关键列比对

两个文本文件,有多列数据,第一行是列名,第二行开始是数据记录,要对两个文件中关键列的内容进行比对。处理此问题可以把文件读成数据集,取出关键列的记录值组成一个集合,然后通过两个集合的运算得出结果。

有2018、2019年的销售订单表order_2018.txt和order_2019.txt,两文件有相同的列结构,部分数据如下所示:

    ..

 

1.2.1.   找相同

把两个文件中关键列值相同的都找出来。

示例:请找出这两年都购买了同一种产品的用户CustomerId和产品ProductId,记录在c_p.txt文件中。

esProc SPL脚本如下:

  A 注释
1 =file("e:/txt/order_2018.txt").import@t(CustomerId,ProductId) 读出2018订单表中的关键列数据
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值