集算器文本处理之大文件集合运算.pdf

集算器文本处理之大文件集合运算.pdf

ID:52768071

大小:493.79 KB

页数:5页

时间:2020-03-30

集算器文本处理之大文件集合运算.pdf_第1页
集算器文本处理之大文件集合运算.pdf_第2页
集算器文本处理之大文件集合运算.pdf_第3页
集算器文本处理之大文件集合运算.pdf_第4页
集算器文本处理之大文件集合运算.pdf_第5页
资源描述:

《集算器文本处理之大文件集合运算.pdf》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、集算器文本处理之大文件集合运算在进行文本处理时,经常会遇到对大文件进行集合运算的情况,比如找出两个文件不同的行数据。用命令行的grepcat命令处理此类问题时,写法很简单,但效率太低,用高级语言处理此类问题虽然可以获得较高的运行效率,但代码编写复杂度确相当高。集算器支持大文件集合运算和多线程并行计算,代码简洁性能优异,下面通过例子来看一下具体作法。文件file1.txt和file2.txt存储着大量的字符串,找出两者共同的行数据(交集)。部分数据如下:大文件file1.txt大文件file2.txtC:WindowsSystem32409C:WindowsSyst

2、em32409C:WindowsSystem329999C:WindowsSystem322052C:WindowsSystem322hps.icoC:WindowsSystem322hps.icoC:WindowsSystem32aaclient.dllC:WindowsSystem32aaclient.dll…………C:WindowsSystem32zh-TWmsimsg.dll.muiC:WindowsSystem32zh-TWmsimsg.dll.muiC:WindowsSystem32zh-TWmspri

3、vs.dll.muiC:WindowsSystem32zh-TWmsprivs.dll.muiC:WindowsSystem32zh-TWWMPhoto.dll.muiC:WindowsSystem32zh-TWWMPhoto.dll.muiC:WindowsSystem32zh-TWWMPhoto.dll1.muiC:WindowsSystem32zh-TWWMPhoto.dll2.mui两个大文件两个文件都超出内存时,可以使用集算器的游标归并来实现交集运算,代码如下:AB1=file("E:\file1.txt").cursor()

4、=file("E:\file2.txt").cursor()2=[A1.sortx(_1),B1.sortx(_1)].merge@xi(_1)3=file("E:\result.txt").export(A2)A1、B1:以游标的形式打开文件。函数cursor并不会将数据全部读入内存,而是以游标(流)的方式打开文件,因此不会占据内存空间。函数cursor使用了默认参数,即:以tab为列分割符读入全部的字段,自动命名为_1、_2、_3…_n。对于本案例来说,只有一个字段_1。A2=[A1.sortx(_1),B1.sortx(_1)].merge@xi(_1)上述代码使用归

5、并算法找出两者共同的行数据,也就是求交集。归并算法要求数据有序,因此要先用sortx函数对游标进行排序,即A1.sortx(_1)和A2.sortx(_1),这里的_1是文件默认字段名。函数merge表示对多组数据进行归并(本案例是两组),没有参数选项时,可以对内存中的集合进行归并,使用参数选项@x表示对游标进行归并,使用参数选项@i表示归并的结果是交集。注意,A2的运算结果仍然是游标,仍然不会占据内存空间。只有遇到export/fetch/groups等函数时,集算器引擎才会分配合适的内存缓冲区,并将前面的游标计算自动转化为内存计算。A3=file("E:\result.t

6、xt").export(A2)上述代码将游标A2写入文件。函数export既支持将内存数据写入文件,也支持将游标写入文件。这里使用了默认参数,即:无列名,列分割符为Tab,覆盖文件而不是追加,写成文本文件而不是二进制。打开result.txt,可以看到部分数据如下:C:WindowsSystem32409C:WindowsSystem322052VSJitDebuggerUI.dllC:WindowsSystem322hps.icoC:WindowsSystem32ACCTRES.dllC:WindowsSystem32ARP.EXE…值得注意

7、的是,前面的集算器代码是分步计算,事实上可以将它们合为一句:A1=file("e:\result.txt").export([file("E:\file1.txt").cursor().sortx(_1),file("E:\file2.txt").cursor().sortx(_1)].merge@xi(_1))另外,本案例只实现了交集,其实还有并集、合集、差集,只需要修改单元格A2中函数merge的选项即可。比如,将file1.txt和file2.txt合并,并去除两者重复的成员(并

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。