大文本如何按行去除重复值

 

去重复行,用SQL写很简单,就一句SELECT DISTINCT … FROM。但是文件上没法直接用SQL了,想用SQL还得找个数据库先建表,也很麻烦。如果直接写程序,简单思路就是先打开文件,再逐行读入文本。然后将文本跟缓存中的惟一值比较,是重复的文本就丢弃,否则追加到缓存,待文件读完后,再将缓存中去重后的内容写出到输出文件。

上述思路虽然简单,却只能对付小文件,没法处理大文件。当文件很大(内存装不下)时,就只能用文件做缓存,或者对源文件先排序,再去重。但要实现外存缓存或者大文件排序,自己写还是有点难度和麻烦。

这种情况,如果有集算器就省事多了,用SPL只要一句话:

file("d:/urls.txt").cursor().groupx(#1).fetch()

甚至还可以直接对着文件写SQL

$select distinct #1 from d:/urls.txt

 

集算器和SPL不仅能对文本做去重,还有很多运算都可以做,其中大多数查询还能直接用SQL,可以参考:SPL 结构化文本计算

 

集算器也是进行文件数据源处理的专业工具,可以方便地进行 TXTExcelXmlJsonCSVini 等各种文件数据的混合计算、入库以及导出等工作。桌面级计算工具,即装即用,配置简单,调试功能完善,可设置断点、单步执行,每步执行结果都可查看。语法简单,符合人的自然思维,比其他高级开发语言更简单。请参阅文件处理的应用场景

 

SPL也能很方便地嵌入到JAVA应用,可参考:Java 如何调用 SPL 脚本

具体使用方法可参考: 如何使用集算器