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

74 篇文章 0 订阅
16 篇文章 0 订阅

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

 

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


 

         集算器脚本如下:

 


 

 

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



 

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



 

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

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

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


 

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值