在进行文本处理时,经常会遇到对大文件进行条件查询的情况。用命令行的grep\cat可以处理一些简单情况,写法很简单,但效率太低,用高级语言处理此类问题虽然可以获得较高的运行效率,但代码编写复杂度却相当高。如果遇到条件比较复杂或条件经常变化的情况,还需要额外实现一套类SQL的底层库函数,其难度会更大。
集算器支持大文件条件查询和多线程并行计算,代码简洁性能优异,下面通过例子来看一下具体作法。
文本文件employee.txt中保存了员工数据。现在要读取员工信息,从中找出1981年1月1日(含)之后出生的女员工,最后将查询结果输出到result.txt中。
文本文件empolyee.txt的格式如下:
EID NAME SURNAME GENDER STATE BIRTHDAY HIREDATE DEPT SALARY
1 Rebecca Moore F California 1974-11-20 2005-03-11 R&D 7000
2 Ashley Wilson F New York 1980-07-19 2008-03-16 Finance 11000
3 Rachel Johnson F New Mexico 1970-12-17 2010-12-01 Sales 9000
4 Emily Smith F Texas 1985-03-07 2006-08-15 HR 7000
5 Ashley Smith F Texas 1975-05-13 2004-07-30 R&D 16000
集算器代码:
A1:以游标的形式打开文件。函数cursor并不会将数据全部读入内存,而是以游标(流)的方式打开文件,因此不会占据内存空间。函数cursor使用了默认参数,即:以tab为列分割符读入全部的字段。选项@t表示文件的第一行是列名,之后可以使用直观的列名来书写表达式,如果没有这个选项,则会自动命名为_1、_2、_3…_n。
A2=A1.select(${where})
按照条件过滤。这里使用宏来实现动态解析表达式,其中的where就是动态传入的参数,需要提前定义。定义参数的界面如下:
集算器会先计算${…}里的表达式,将计算结果作为宏字符串值替换${…}之后解释执行。比如按照案例中的条件给where赋值为BIRTHDAY>=date(1981,1,1) && GENDER=="F",则A2的表达式会被替换为=A1.select(BIRTHDAY>=date(1981,1,1) && GENDER=="F")。参数可以在IDE中输入,也可以来自JAVA代码和命令行。
A3=file("D:/result.txt").export@t(A2)。将计算结果输出到文件中。如果计算结果总是很小,也可以用=A2.fetch()将计算结果放入内存并直接观察,或者用result A2.fetch()将计算结果返回给JAVA程序。
本案例的最终结果如下:
本案例实现的是动态查询,即过滤条件发生变化时不用改变代码,只需改变where参数即可。例如,条件变为:查询1981年1月1日(含)之后出生的女员工,或者NAME+SURNAME等于”RebeccaMoore”的员工。Where的参数值可以写为:BIRTHDAY>=date(1981,1,1) && GENDER=="F" || NAME+SURNAME=="RebeccaMoore"。执行之后,A2中的结果集如下图:
前面的算法是串行,改成并行可以进一步提高性能,具体做法是用多个线程并行读取文件,每个线程都用游标访问文件的一部分,并同时进行条件查询,最后再将每个游标的结果合并。
集算器并行计算的代码如下:
A1=4,A1是分段数量,即将文件分成4段。分段数量,也就是实际执行时的并行数,一般不要超过CPU的核数,否则会形成排队等待,并不能提高性能。实际使用最大并行数量可以在选项中配置。
A2=A1.(file("d:/employee.txt").cursor@z(;, ~:A1))
上面的代码按照分段数量生成4个游标。其中A1.(express)表示按照括号内的表达式依次计算A1的成员,括号内可用“~”来表示当前成员。A1一般是集合,比如["file1", " file2"]或[2,3],A1如果是从1开始的连续数字,比如[1,2,3,4],则可以简写成4.( express),案例中的代码就是这种情况。
括号内的表达式是file("d:/employee.txt ").cursor@z(;, ~:A1),其中函数cursor使用了选项@z,这表示将文件分段,用游标取其中的某一段。~:A1表示文件会被大致分为4段(A1=4),当前取第~段。“~”是A1的当前成员,因此每个游标依次对应第1、第2、第3、第4段文件。
另外,之所以是“大致分”,是因为精确分会出现半行数据的情况,而集算器会去头补位,自动取出整行数据。
A3=A2.(~.select(${where})),这句代码针对A2中的每个游标(即~)进行计算,求查询出游标中符合条件的行数据。这里的计算结果仍然是四个游标。
A4=A3.conj@xm(),这句代码将A3中的多个游标进行并行合并。
A5=file("d:/result.txt”).export(A4),将最终计算结果输出到文件中。
相关推荐
【铁路建设项目监理招标文件示范文本】是中国铁路总公司为了规范铁路建设项目监理招标过程,确保招标活动的公正、公平和透明而制定的一份标准模板。这份文本主要用于指导招标人在编写招标文件时遵循的规定和流程,...
招标文件是建设工程领域中进行项目招标的核心文档,它详细规定了招标项目的各项要求、程序、条件和责任。"××市建设工程招标文件示范文本"是一份为该市建筑工程项目提供的标准化模板,旨在指导招标过程的规范进行。...
招标文件是建设工程领域中一个关键的法律文档,它详细规定了招标项目的各项要求、程序和条件,确保公平、公正的市场竞争。"××市建设工程招标文件示范文本"是为2021-2022年间该市的建设工程招标活动提供的标准化...
该文本由多个部分组成,包括《专用条款》、《其它事项条款及说明》、《投标文件否决性条款摘要》、《通用条款》、《两阶段评标办法开标、资格后审、评标工作细则》和《附件》,旨在规范招标过程,确保公平、公正。...
《最新汽车租赁合同书》是一份详尽的法律文件,旨在规范出租方和承租方在汽车租赁过程中的权利和义务。这份合同书基于《中华人民共和国民法典》的规定,确保双方的权益得到保障。 首先,合同明确了租车的期限和交付...
5. **合同价款**:合同价款包括工程造价、预付款、进度款、结算款等,应详细列出计价方式、支付条件及变更费用的处理办法。 6. **材料设备**:施工单位需提供符合设计和质量要求的建筑材料和设备,且应在合同中明确...
《建设工程施工合同模板(示范文本)》是一份用于规范建筑工程项目执行的重要法律文件,它包含了合同的三个主要部分:协议书、通用条款和专用条款。这份文档为建设行业的参与者提供了标准化的合同格式,以确保双方在...
《笨办法学Python》是Zed A. Shaw所著的一本Python编程入门书籍,特别适合初学者使用。这本书以其独特的教学方式,引导读者通过实践学习Python编程基础。以下是基于书名和描述的一些关键知识点的详细解释: 1. **...
第十条涉及不可抗力事件和免责条件,为因不可预见、不可避免且无法克服的事件导致合同履行困难时提供了处理办法。 第十一条违约责任条款设定了违约行为的界定、补救措施、索赔方式和争议解决途径。 第十二条指定了...
10. **不可抗力条款**:明确了因不可抗力导致的合同履行困难时的处理办法和免责条件,如自然灾害和社会事件。 11. **违约责任**:规定了违约行为的构成、补救措施、索赔方式以及争议解决方式。 12. **争议解决及...
3. **投标文件格式文本**:提供了投标文件的标准格式。 4. **报价及技术要求**:规定了报价的具体方式和设备的技术标准。 5. **合同**:列出了合同的主要条款。 #### 三、投标须知详解 1. **前附表**:通常会列出...
由于直接文本信息不足,无法详细展开具体文件的细节内容,以上提供的是基于通用的员工招聘与录用办法的知识点。在实际操作中,不同企业的具体办法可能会有所不同,但整体流程和原则通常是相似的。
标准文件中强制性要求包括《标准施工招标文件》和《标准施工招标资格预审文件》等,这部分内容必须无条件引用。例如,投标人须知、评标办法、资格审查办法等应当根据项目的具体特点和实际需要编制,并且不得与标准...
1. **招标文件编制原则**:招标人在编写招标文件时,应遵循《招标文件示范文本》,仅对空白部分填写,不可随意修改其他内容。如需修改,需书面报中国铁路总公司建设管理部审批。 2. **招标公告或投标邀请书**:这两...
"license.txt" 文件是关于软件许可的文本,通常包含使用这些MATLAB脚本的条款和条件,确保合法和合规的使用。 至于"html" 文件,可能是包含帮助文档或者教程的网页,解释了如何使用这些MATLAB程序,包括输入参数的...
《建设工程施工专业分包合同(示范文本)》是IT领域中与项目管理和工程实施密切相关的一份重要文档。在工程建设行业中,此类合同规范了建设单位(发包方)与专业承包单位(分包方)之间的权利、义务和责任,确保工程...
OCR(光学字符识别)是一种将扫描的文档、图片或其他格式的图像转换成机器编码文本的技术,以便于电子文件的存储、编辑和搜索。OCR技术在将纸质文档转换为数字格式以进行进一步处理和共享方面非常有用,例如归档电子...
1. **安装说明.txt**:这是一个文本文件,通常包含了补丁的安装步骤和注意事项,用户在安装补丁前应仔细阅读,以确保补丁能够正确无误地应用到系统中。安装说明可能包括系统需求、兼容性信息、备份原有文件的建议...
信托文件——资产服务合同是金融保险业内用于规范信贷资产信托受益权转让的一种合同文本,主要涉及受托人和资产服务机构之间的权利与义务关系。这份合同适用于处理信贷资产的管理和服务,确保资产的安全与高效运营。...