命令行

阅读(8090) 标签: 命令行调用, esprocx, 执行程序,

命令行是指在类似于DOS中,用字符串形式的命令来执行程序。各类系统都支持命令行的使用,如Linux系统的控制台,或者Windows系统的command窗口等。

用命令行来计算集算器网格文件时,需要使用esprocx.exe文件,在集算器安装目录的esProc\bin路径下,可以找到。

无返回结果的网格文件

在命令行执行网格文件使用esprocx命令即可。如下面的网格文件D:\files\output1.splx

 

A

B

1

=create(ID,Amount)

 

2

for 100

>A1.insert(0,#A2,rand(100*100))

3

=file("D:\\files\\Data1.txt")

>A3.export@t(A1)

无返回结果的文件,往往用来读写文件或数据库。如这个网格中,创建了一些模拟数据,存储到文本文件Data1.txt中。使用时,只需在esprocx后面指明需要执行的脚本文件。执行时,屏幕上会显示开始执行以及结束执行的消息,如下:

执行后,生成的随机数据会写入Data1.txt文件,如下所示:

如果esprocx文件所在路径被设入了操作系统的path列表,可以直接运行esprocx,而不必在安装目录的esProc\bin路径下。但是,调用的脚本文件必须指明全路径,或者要位于当前路径中,如:

 

如果运行的网格文件中,使用了参数,那么在执行esprocx时,在脚本文件名后输入参数,中间用空格分隔。如下面的网格文件D:\files\output2.splx

 

A

B

1

=file("D:\\files\\Data1.txt")

=A1.import@t()

2

for IDs

>B1.modify(A2,Value:Amount)

3

>A1.export@t(B1)

 

文件中,使用了两个参数IDsValue,如下:

这个网格的作用是读取刚刚得到的Data1.txt文件,修改指定序号的一些记录,使它们的Amount字段全等于设定的Value,并重新存入文件中。在运行时,屏幕上显示的执行情况如下:

调用网格文件output2.splx时,设入了两个参数,第一个是序列[2,3,5,7,11],第二个是整数99999。和跨网格调用时的情况类似,在用命令行调用文件时,设入的参数也是根据网格中参数的顺序依次赋值,而与参数名无关。在这里,[2,3,5,7,11]赋值给第1个参数IDs99999赋值给第2个参数Value。在执行后,可以看到Data1.txt中的数据被修改:

需要返回结果的网格文件

在命令行中直接用esprocx命令,缺省并不会在屏幕上输出结果。如果需要将脚本文件返回的结果显示出来,需要在执行时使用-R选项。首先,和用call函数调用的网格文件类似,在脚本文件中需要返回的数据,必须用return语句返回。如下面的网格文件D:\files\calculate1.splx

 

A

B

1

=days(Day)

=string(Day,"EEE")

2

return A1

return B1

这个网格将返回给定日期所在的月的总天数,并计算出给定日期是星期几。使用了参数Day

先来看看添加了-r选项后的执行情况:

在这里,运行的时候并未设定参数,此时将使用默认的参数即01/01/2000计算。同时可以发现,这里A2B2中各自用return语句返回了一个结果,计算后会将结果依次列出。

如果准备设定参数,那么就要这个参数使用的是日期类型,日期或者时间类型的参数会涉及格式问题。在用命令行调用网格时,需要在集算器安装目录的esProc\config路径下配置文件raqsoftConfig.xml中,设置它们的格式:

<Esproc>

<dateFormat>yyyy-MM-dd </dateFormat>

<timeFormat>HH:mm:ss</timeFormat>

<dateTimeFormat> yyyy-MM-dd HH:mm:ss</dateTimeFormat>

</Esproc>

如果调用时设定参数,那么执行情况如下:

此时得到的就是2012222日所在月的总天数,以及这天的星期。

 

下面的网格文件D:\files\calculate2.splx和前面的略有不同,将返回的结果构成了序列:

 

A

B

1

=days(Day)

=string(Day,"EEE")

2

return [A1,B1]

 

执行情况如下:

可以看到,结果序列中的成员会依次列出,各占一行。

 

最后,再来看下面的网格文件D:\files\calculate3.splx

 

A

B

1

$(demo) select * from CITIES

$select * from STATES

2

=A1.switch(STATEID,B1:STATEID)

=A2.new(CID,NAME:City,STATEID.NAME:State)

3

=B2.select(left(City,1)==Letter)

 

4

return A3

 

网格中使用了一个参数Letter

在这个网格中,使用了数据库中的数据。在这里使用的数据连接,需要在集算器安装目录的esProc\config路径下的raqsoftConfig.xml进行配置:

<DBList encryptLevel="0">

<DB name="demo">

<property name="url" value="jdbc:hsqldb:hsql://127.0.0.1/demo"/>

<property name="driver" value="org.hsqldb.jdbcDriver"/>

<property name="type" value="13"/>

<property name="user" value="sa"/>

<property name="password" value=""/>

<property name="batchSize" value="1000"/>

<property name="autoConnect" value="true"/>

<property name="useSchema" value="false"/>

<property name="addTilde" value="false"/>

</DB>

</DBList >

更具体的配置方法,请查看相关文档。

执行后,运行结果如下:

在设置字符串类型的参数时,直接设定即可,不用添加双引号。在上面的结果中,列出了首字母为B的城市信息。序表或者排列类型的结果,在显示时,每条记录占一行,各个字段之间用制表符分隔。

 

上面提到的配置文件raqsoftConfig.xml,是与IDE共用的,因此日期格式、数据源配置等信息,可以在IDE中编辑。在菜单栏中点击Tool>Option,即可在Option窗口的Environment中配置日期格式等信息。

点击Tool>Datasource connection,可以在数据源管理器中配置数据库连接参数等信息。具体的配置方法可以查看

执行网格脚本和简单 SQL

esprocx命令后添加-c选项,可以执行输入的一个网格脚本,网格脚本中,列用Tab分隔,行用回车分隔,脚本输入完毕后同时按下Ctrl+C结束输入网格并开始执行脚本。如:

执行esprocx –c后,在网格输入时输入了下面的脚本:

-  []  >10.(A1=A1|#)

-  >output(A1)

在网格脚本中,在A1的空序列中依次添加了10个数,并在第二行的脚本中将序列输出到控制台,按Ctrl+C完成输入后,得到后台的执行结果。

如果想查看执行网格脚本的结果,更常用的方式是添加-r选项,如:

执行esprocx –r –c时,将直接返回网格的计算结果,如果网格中没有return语句,将返回最后一个格值。

除了执行网格脚本,在命令行中还可以直接执行简单SQL,查询主目录中的数据文件,如:

通常情况下,执行简单SQL时,会同时使用-r选项。有关在命令行中能够执行的简单SQL请阅读简单SQL,如果查询数据库中的数据,需要在raqsoftConfig.xml中完成配置。。

在 Linux 系统中使用命令行

Linux系统中,同样可以使用命令行,使用时与在Windows系统中类似,不同的是调用的命令是esproc.sh,如运行无返回结果的网格文件output1,如下:.

返回无结果集的网格文件

为了看到更细致的信息,这里使用了DEBUG日志级别,可以看到,输出结果和在Windows中的情况完全相同。

其它执行命令行的情况都是类似的。如执行返回结果的calculate1.splx

返回结果集-不传参

如果需要传递参数,则在调用网格文件名后添加参数即可:

返回结果集-传参

 

Linux系统中,同样可以添加-c选项执行网格脚本,但是与在Windows系统中执行时有所不同,注意此时结束脚本输入开始执行时,需要用Ctrl+D确认,如:

执行SPL

同样,在添加-r选项后,可以用看到return所返回的结果:

返回网格脚本计算结果

Linux系统中,也可以执行简单SQL,情况如下:

执行简单SQL