首页 > 其他 > 详细

结构化文本处理时的表达式计算

时间:2015-03-05 02:07:11      阅读:301      评论:0      收藏:0      [点我收藏+]

JAVA不直接支持动态解析文本文件中的表达式,只能通过手工拆分字符串再递归调用来实现,这需要编写大量代码,过程复杂难以维护。使用集算器来辅助Java编程,这些问题就不需要自己写代码了,下面我们通过例子来看一下具体作法。

?

???????? 文本文件formula.txttab分割的文本文件,第一行是列名,有3个列Notypeexp,其中exp列是公式。现在需要动态解析exp中的公式,并将计算结果附加在exp之后,命名为value列。文件fromula.txt的前几行数据如下:


bubuko.com,布布扣

?

? ? ? ? ?集算器脚本如下:

?

bubuko.com,布布扣
?

?

? ? ? ? ?A1=file("E:\\ formula.txt").import@t()函数import用来读入文本文件, 函数选项@t表示将第一行读为列名。读入后的数据存储在A1格中,如下:


bubuko.com,布布扣
?

? ? ? ? ?A2=A1.derive(eval(exp):value)。函数derive用来在A1中加入新的列,列名为value,列的值是eval(exp)。函数eval用来对字符串进行动态解析,比如eval(“1+1”)的计算结果是数字2。由于代码中的exp列是多个字符串组成的,因此eval(exp)的计算结果也是多个,如下:


bubuko.com,布布扣
?

? ? ? ? ??动态公式已经解析完成,下面将A2输出到文本文件,即:

???????? A3=file("E:\\ result.txt").export@t(A2)

????????上述脚本中,函数export用来将A2中的数据写入文件result.txt,函数选项@t表示将列名写在第一行。打开这个文件,可以看到如下内容:


bubuko.com,布布扣

?

? ? ? ? ?A4result A2。这句脚本将A2中的数据返回JAVAJAVA代码只需通过JDBC调用集算器脚本就能获得结果,代码如下。

???????? //建立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();?? //获取结果集

?

结构化文本处理时的表达式计算

原文:http://datamachine.iteye.com/blog/2188750

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!