文本文件连接的实现
问题来源:http://*.com/questions/26820118/text-file-processing-using-java
JAVA没有直接处理文本文件的连接运算的类库,自行编码非常复杂,特别是文件太大无法放入全部读入内存时。集算器可以协助JAVA实现这些运算,下面通过例子来看一下具体作法。
文本文件order.txt的第一行是列名,列SellerId是逻辑外键,指向employee.txt的列EID,现在需要从两个文件中取出列OrderID、Client、Name、Dept,并形成新的文件。部分源数据如下:
Order.txt
Employee.txt
假设两个文件都比较小,则可以使用如下集算器代码进行内连接运算:
A1,A2:将文件读入内存。@t表示第一行是列名。
A3:进行内连接运算,结果如下:
A4:从A3中取出需要的字段。
A5:写入文件。内容如下:
如果进行左连接运算,只需在join函数使用选项@1,代码如:[email protected](A1:o,SellerId; A2:e,EId),生成的文件如下:
类似的,全连接只需使用选项@f。
如果其中一个文件较大,或两个都很大,这时可以用集算器游标来解决,代码如下:
A1,A2:以游标的方式打开大文件。
A3:进行游标之间的内连接运算。和内存连接不同,游标连接要求游标有序,因此这里用函数sortx进行排序。
A4:取出需要的字段,形成新的游标。
A5:将游标写入文件。
类似地,@1表示左连接,@f表示全连接。
上述脚本已经完成了所有的数据处理工作,接下来通过JDBC将集算器脚本集成在JAVA里。JAVA代码如下:
//建立esProc jdbc连接
Class.forName("com.esproc.jdbc.InternalDriver");
con= DriverManager.getConnection("jdbc:esproc:local://");
//调用esProc,其中test是脚本文件名
st =(com.esproc.jdbc.InternalCStatement)con.prepareCall("call test()");
st.execute();//执行esProc存储过程
ResultSet set = st.getResultSet();//获得计算结果