结构化文本计算示例(二)

本文详细介绍了结构化文本的二目运算,包括集合运算、归并、有序集合运算和关联计算。通过示例展示了如何进行文件比较、数据归并、有序集合的交并差集以及多层关联查询。此外,还讨论了综合运算的应用,如多层关联、异构文件比较、多级目录文件抽取、分组拆分写出和库存计算等。
摘要由CSDN通过智能技术生成

上一节讲述了结构化文本的一些基本运算,本节继续用案例讲述二目运算和综合运算。

 

二目运算

集合运算(文件比较)

现有文件f1.txt和f2.txt,第一行是列名,需要对文件中的Name字段进行交集运算。部分数据如下:

文件f1.txt:

Name   Dept

Rachel Sales

Ashley R&D

Matthew    Sales

Alexis Sales

Megan  Marketing

 

文件f2.txt:

Name   Dept

Emily  HR

Ashley R&D

Matthew    Sales

Alexis Sales

Megan  Marketing

 

代码如下:

  A B
1 =file("E:\\f1.txt").import@t() =file("E:\\f2.txt").import@t()
2 =[A1.(Name),B1.(Name)].isect()  

 

函数isect用于集合间的交集运算,A1.(Name)表示取出A1的Name列,形成一个集合,B1.(Name)表示取出B1的Name列。本案例的最终结果如下:

类似地,求并集用函数union,差集可用diff,合集可用conj(相当于union all)。也可以直接用运算符来代替函数,写法更加简洁,比如交集,并集、差集、合集可以改写为:

A1.(Name) ^ B1.(Name)

A1.(Name) & B1.(Name)

A1.(Name) \ B1.(Name)

A1.(Name) | B1.(Name)

上面的示例显示了读入文本文件并自动拆分为字段后,仅取其中的某一列进行集合运算。那如果想不拆分字段,对整行数据一起比较呢?很简单,在导入的选项加上 s 即可,表示不拆分字段。但需要注意的是,不进行拆分后,相当于直接返回一个只有一列的序表,且此时的列名也没有拆分,变成了Name(Tab)Dept,也就是此时的列名中包含了不可见字符 Tab,这列名是非法的,都没法直接引用了。不过还好可以用序号来表示第几列,此时的代码如下:

 

  A B
1 =file("D:\\f1.txt").import@ts() =file("D:\\f2.txt").import@ts()
2 =A1.(#1)^B1.(#1)  

 

    显然,不拆分字段时,肯定只有一列,与其得到一个非法的列名,还不如不要列名,直接返回成集合(序列)多好,此时需要额外加上选项 i,表示只有一列数据时,直接返回成序列。此时交集直接就是集合的运算了,写成 A1^B1 即可,代码如下:

  A B
1 =file("D:\\f1.txt").import@tis() =file("D:\\f2.txt").import@tis()
2 =A1^B1  

 

    上面两种算法,得到的都是相同的结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值