文本文件连接的实现

问题来源:http://stackoverflow.com/questions/26820118/text-file-processing-using-java

JAVA没有直接处理文本文件的连接运算的类库,自行编码非常复杂,特别是文件太大无法放入全部读入内存时。集算器可以协助JAVA实现这些运算,下面通过例子来看一下具体作法。

文本文件order.txt的第一行是列名,列SellerId是逻辑外键,指向employee.txt的列EID,现在需要从两个文件中取出列OrderIDClientNameDept,并形成新的文件。部分源数据如下:

 

Order.txt



 

 

Employee.txt



 

 

假设两个文件都比较小,则可以使用如下集算器代码进行内连接运算:



 

A1A2:将文件读入内存。@t表示第一行是列名。

 

A3:进行内连接运算,结果如下:



 

A4:A3中取出需要的字段。

 

A5:写入文件。内容如下:



 

如果进行左连接运算,只需在join函数使用选项@1,代码如:=join@1(A1:o,SellerId; A2:e,EId),生成的文件如下:



 

类似的,全连接只需使用选项@f

 

 

如果其中一个文件较大,或两个都很大,这时可以用集算器游标来解决,代码如下:



 

A1,A2:以游标的方式打开大文件。

A3:进行游标之间的内连接运算。和内存连接不同,游标连接要求游标有序,因此这里用函数sortx进行排序。

A4:取出需要的字段,形成新的游标。

A5:将游标写入文件。

类似地,@1表示左连接,@f表示全连接。

 

         上述脚本已经完成了所有的数据处理工作,接下来通过JDBC将集算器脚本集成在JAVAJAVA代码如下:

         //建立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();//获得计算结果

猜你喜欢

转载自datamachine.iteye.com/blog/2196171
今日推荐