有时我们不能使用数据库而采用文件系统存储数据,这时就需要自行完成基于文件的数据计算。但JAVA本身缺少相应的类库,需要硬编码才能实现结构化文件计算,代码复杂且可读性差。
使用免费的集算器可以弥补这一不足。集算器封装了丰富的结构化文件计算函数,并提供JDBC接口。JAVA应用程序可以将集算器脚本文件当做数据库存储过程执行,传入参数并用JDBC获得返回结果,详情参考集算器用作Java计算类库的应用结构。
下面举例说明JAVA中常见的结构化计算,以及集算器对应的解法。
文本查询
sOrder.txt是tab分割的文本,现在要用JAVA查询出指定时间段内的订单。
源数据如下:
集算器代码:
读入文件,默认分隔符是tab,@t表示将第一行读为列头。之后执行条件查询。startDate和endDate是输入参数,比如2010-01-01至2010-12-31。结果:
文本排序
针对sOrder.txt,请在JAVA中按照客户代码降序排序,按照年、月升序排序。
集算器代码:=A1.sort(-Client,year(OrderDate),month(OrderDate))
解释:降序排列使用“-”,年、月需要计算获得。
引申:如果要在查询的基础上排序,可以写作=A2.sort(…),或者=A1.select(…).sort(…)
结果:
分组汇总:计算出每个销售员每年的销售额和订单数
代码:=A1.groups(SellerId,year(OrderDate);sum(Amount),count(~))
解释:函数group可在分组的同时进行汇总,~表示每组或当前组,count(~)等于count(OrderID)。
结果:
获得唯一值:
列出sOlder中的客户名单。
代码:=A1.id(Client)
结果:
去除重复
保留sOlder中每个客户每个销售的第一条记录。
代码:=A1.group@1(Client,SellerId)
解释:函数group用来分组(可以不汇总),@1表示每组取第1条记录。
结果:
TopN
找到每个销售员销售额最大的3笔订单。
代码:=A1.group(SellerId;~.top(-Amount;3):t).conj(t)
解释:函数top过滤出TopN,”-”表示逆序,函数conj用于合并。
引申:如果只取最大的一笔订单,可以用maxp函数。
计算结果:
关联计算
emp.txt是tab分割的文本,其EId字段对应sOrder中的SellerId字段,请在JAVA中将emp.txt的Name、Dept、Gender这三个字段对齐到sOrder.txt。
源数据如下:
集算器代码:
函数join执行连接运算,并将两个表改名为s和e,@1表示左连接。之后从连接的表中取得需要的字段,组成新的结构化二维表格。结果:
引申:@1表示左链接,@f表示全连接,内连接无选项。
前面的例子假定文件较小,如果文件较大无法放入内存,可用集算器游标进行计算,详情参考相关文档。
相关推荐
在Java中,包是一种逻辑结构,用于将相关的类和接口分组,避免命名冲突,并提供了一种模块化的方式组织代码。`com`通常代表一个公司的域名倒写,比如`com.example.myapp`,这可能表示这个应用或者类库是由example....
在JAVA端,利用SAX或DOM解析器读取XML文件。SAX适用于大文件,按事件驱动的方式逐行读取,节省内存;DOM则一次性加载整个文件,适合小规模数据。根据项目需求,可以选择合适的解析策略。 为了提高检索效率,还可以...
ANTLR(ANother Tool for Language Recognition)是一个强大的解析器生成器,用于读取、处理、执行或翻译结构化文本或二进制文件。在Hibernate中,ANTLR主要用于解析HQL(Hibernate Query Language)和JPQL(Java ...
Java工作量统计系统是一...通过深入研究源码,可以学习到文件操作、数据持久化、面向对象设计、UI编程等多个Java编程领域的知识。对于想要提升Java开发技能或了解项目管理工具实现的人来说,这是一个有价值的参考资源。
Java音频水印程序是一种利用编程技术在音频文件中嵌入隐藏信息的技术,通常用于版权保护、数据追踪或者个性化标识。这个程序是用Java语言编写的,它能够将BMP图像文件的数据转换为一种形式,然后将其嵌入到WAV等音频...
XML(eXtensible Markup Language)是一种用于存储和传输结构化数据的标准格式。在这个提醒簿中,XML文件被用作数据库,存储备忘录的信息。利用Java的DOM(Document Object Model)或SAX(Simple API for XML)解析...
2. `org`:在Java中,`org`通常被用作组织(organization)的顶级包名,可能包含了第三方库或项目内部的组织结构。 3. `javax`:这是Java扩展的包名,通常包含一些标准库的扩展或补充API。 4. `java`:这是Java...
本项目"HttpServer_Java"提供了一个简单的Http服务器实现,它可以用作一个类库,便于集成到其他Java项目中。这个服务器的核心是处理HTTP协议,这是一种用于传输超文本的应用层协议,是互联网上应用最广泛的服务之一...
总结来说,《Java 7口袋指南》第2版旨在通过其结构化的内容安排,帮助读者从基础的Java语言规范到整个Java平台的理解,再到使用工具和UML进行软件设计,从而全面深入地掌握Java技术。该书不仅是Java开发者的实用参考...
根据提供的文件内容,我们可以整理出一系列与Java编程语言相关的知识点,包括数据结构、设计模式以及面试常见问题等。下面将对这些知识点进行详细的解析。 ### 1. Java平台概述 - **平台无关性**:Java的一大特点...
根据提供的文件信息,我们可以从中提炼出以下关于Java的相关知识点: ### Java个人笔记概览 这份文档作为个人学习Java过程中的笔记整理,对于初学者来说具有一定的参考价值。 ### Java简介 1. **Java是什么?** ...
在这个项目中,Java被用作主要的开发语言,用于实现聊天和画图的功能。 2. **网络通信**:聊天功能的实现依赖于网络通信技术。Java的`Socket`类库提供了基础的网络连接和数据传输能力,允许两个或多个客户端之间...
1. SCXML解释器:这是一个Java类库,它解析SCXML文档并执行其中定义的状态转换。通常,它会包含一个`ScxmlExecutor`类,用于启动和管理状态机的生命周期。 2. 示例SCXML文件:可能有一些预定义的SCXML文件,展示了...
Java的面向对象特性使得代码结构清晰,易于维护和扩展,而其标准库提供了大量用于算法实现的工具,如数据结构和算法的类库。 项目文件"基于遗传算法的中药药对挖掘系统的设计与实现项目说明报告.doc"很可能是项目的...
在IT领域,文本数据库是一种特殊的数据库类型,它主要用于存储和管理非结构化或半结构化的文本数据,如文章、报告、邮件等。这种数据库通常不使用SQL语言进行查询,而是采用自定义的查询语法或者API。在这个“文本...
9. **国际化与本地化**:为了适应不同地区的需求,系统可能会包含国际化支持,通过资源文件进行多语言切换。 10. **测试与调试**:JUnit作为单元测试框架,Mockito用于模拟依赖,帮助开发者进行代码验证。Eclipse或...
1. **SQL语言**:结构化查询语言用于创建、查询、更新和删除数据库中的记录。包括SELECT、INSERT、UPDATE、DELETE等语句。 2. **数据库设计**:遵循范式理论,如第一范式(1NF)、第二范式(2NF)和第三范式(3NF)...
JRE(Java Runtime Environment)是Java运行环境,包含了Java虚拟机(JVM)和运行Java程序所需的类库。IDE(Integrated Development Environment)是集成开发环境,用于提高编程效率,如Eclipse、IntelliJ IDEA等。 ...
学习者应熟悉Java的基本语法、类库和面向对象编程思想,包括封装、继承和多态。 2. **系统框架设计**:SMART系统可能采用了MVC(Model-View-Controller)架构,这是一种常见的软件设计模式,用于分离应用程序的数据...