返回悠然博客列表

从范例体会TinyScript脚本语言

发布于 7月前

代码

/*

本脚本示例演示基本的tinyscript语法,用户可以通过tinyscript运行器执行。

具体安装过程可以参考文档:http://www.tinygroup.org/docs/6213296363248889992

*/

//boolean类型

println(true);

println(false);

//char类型

println('1');  //单字符数值

println('a');  //单字符字母

println("start"+'\t'+"end");  //特殊字符:制表符

//int类型

println(123); //十进制的123

println(0110); //八进制,结果为72

println(0x6B7C); //十六进制,表示27516

println(0b111); //二进制,表示7

println(-123); //十进制的负数

println(-0110); //八进制的负数

println(-0x6B7C); //十六进制的负数

println(-0b111); //二进制的负数

//long类型

println(99999999L); //十进制的99999999

println(0110L); //八进制,结果为72

println(0x6B7CL); //十六进制,表示27516

println(0b111L); //二进制,表示7

println(-99999999L); //十进制的负数

println(-0110L); //八进制的负数

println(-0x6B7CL); //十六进制的负数

println(-0b111L); //二进制的负数

//float类型

println(1.1);    //默认浮点类型

println(1.1f);   //指定单精度类型

println(.1f);    //小于1的浮点数可以省略0前缀

println(9f);   

println(1.0e3f);    //科学计数法表示浮点

println(0x7.5p8f);  //十六进制的浮点数

println(-2.3f);     //负单精度浮点数,正单精度浮点数可以省略前缀+

//double类型

println(2.53D);    //双精度浮点数不能省略结尾D/d

println(.53d);     //小于1的浮点数可以省略0前缀

println(10d);

println(1.0e3d);    //科学计数法表示双精度浮点

println(-5.6d);     //负双精度浮点数,正双精度浮点数可以省略前缀+

//String类型

println("abc");   //一般字符串

println("if");    //包含指令关键字的字符串

println("null");  //包含null关键字的字符串

a="cat";

d="dog";

op="and";

//引擎支持字符串嵌套变量,减少用户使用+拼接字符串

println("dog and ${b}");  //字符串的$渲染,语法符合找不到对象b,返回空值

println("dog and ${a}");  //字符串的$渲染,渲染a对象

println("${a}{}[]");      //字符串的$渲染,渲染a对象

println("mmmmm${a}");     //字符串的$渲染,渲染a对象

println("dog and ${1+2+3}");     //字符串的$渲染,支持表达式

println("##${a} ${op} ${b}##");  //渲染包含多个变量

//null

println(a==null); //判断对象是否非空

println(b==null); //判断对象是否非空

// 基本的加、减、乘、除、求模、括号

println(1+2+3);

println(1+2*3);

println(100-5-50+177);

println(10000/4/100+4);

println(2343%5);

println(1/2);

println(-1/2);

println(3*(2+2)-7);

println((2+5)*(6-3)-7*2);

// 浮点的加、减、乘、除

println(1.0f+2.0d);      //结果3.0d

println(1.0f-2.0d);      //结果-1.0d

println(1.0d*2.5d-1.0d);

println(1.0d/2);

// 与、或、非、异或

println(!false);

println(!true);

println(~2);

println(128&129);

println(128|129);

println(15^2);

// 逻辑短路

println(1=='1');

println(1==0 && 1==1);

println(1=="1");

println(1==0 || 1==1);

println(1==1 || 6>7 || 8!=8 );

println(1==1 && a!=null && a.length()>8);  //测试与的短路操作

println(1==0 || a==null || a.length()>8);  //测试或的短路操作

// 大小比较

println(1==1);

println(1==0);

println(1!=0);

println(0!=0);

println(200>199);

println(200>=200);

println(200<199);

println(200<=200);

// 位移运算

println(8>>2);

println(8<<2);

println(-121 >>> 4);

// 三元表达式

println(1+1>=1?"yes":"no");

println(2==5-3?true:false);

println(2!=5-3?true:false);

a=10;b=20; println(a==20?'a':(b==10?'b':'c'));

a=10;b=10; println(a==20?'a':(b==10?'b':'c'));

a=20;b=20; println(a==20?'a':(b==10?'b':'c'));

类声明

/*

     示例脚本类,演示动态调用

*/

class Model{

printDataSet(path){

       dataSet = readTxt(path);

//测试方法内输出

       fields = dataSet.getFields();

       for(field:fields){

          println("field="+field.getName());

       }

    }

printList(){

      list1 = ["aaa","bbb","ccc","ddd"];

      list2 = ["bbb","ddd","eee","fff"];

      println(list1+list2);  //并集

      println(list1-list2);  //差集

      println(list1&list2);  //交集

      println(list1^list2);  //相对差(异或)

    }

//测试返回值

createArray(){

       ss = new String[]{"人法地","地法天","天法道","道法自然"};

       return ss;

    }

}

//具体执行逻辑

model = new Model();

model.printDataSet("/data/Orders.txt");

model.printList();

array = model.createArray();

for(s:array){

println(s);

}

集合处理

//演示集合递归子元素的操作符和函数

//List集合模型

list1=[1,2,3]; list2=["dog","cat","bird"].toUpperCase();

println(list1+3);

println(list2);

//Map集合模型

map1={"key1":100,"key2":200,"key3":300};

map2={1:"Hello",2:"Tom",3:"John"}.toLowerCase();

println(map1/100);

println(map2);

//Set集合模型

set1=map1.keySet().substring(1,4);

set2=map2.keySet();

println(set1);

println(set2*10);

//集合分组

list = [1..5];

println(list.groupStaged(it<3));

println(list.groupDynamic(it%2));

=================以下是运行结果================

[4, 5, 6]

[DOG, CAT, BIRD]

{key3=3, key2=2, key1=1}

{1=hello, 2=tom, 3=john}

[ey1, ey3, ey2]

[20, 10, 30]

[[1, 2], [3, 4, 5]]

[[1, 3, 5], [2, 4]]

数据集

dataSet =readTxt("/data/sortExample.txt");

//排序操作

println(dataSet.sort("w_eight desc"));

println(dataSet.sort("n-ame desc,w_eight desc,value asc"));

println(dataSet.sort((a,b)->{

return a[0]>b[0]?1:a[0]==b[0]?0:-1;

}));

println([6,2,3].sort());//默认asc排序

println([6,2,3].sort("desc"));

//insert操作

dataSet1 =readTxt("/data/data1.txt");

dataSet2 =readTxt("/data/data2.txt");

println(dataSet1.insert(dataSet2));

//intersect操作

result = dataSet1.intersect(dataSet2,()->{ return name+"|"+weight; });

println(result);

println("================================================================");

result = dataSet1.intersect(dataSet2,["name","weight"]);

println(result);

println("================================================================");

result = dataSet1.intersect(dataSet2,"name");

println(result);

//subtract操作

result = dataSet1.subtract(dataSet2,()->{return name+"|"+weight;});

println(result);

println("================================================================");

result = dataSet1.subtract(dataSet2,["name","weight"]);

println(result);

println("================================================================");

result = dataSet1.subtract(dataSet2,"name");

println(result);

//xor操作

result = dataSet1.xor(dataSet2,()->{ return name+"|"+weight; });

println(result);

println("================================================================");

result = dataSet1.xor(dataSet2,["name","weight"]);

println(result);

println("================================================================");

result = dataSet1.xor(dataSet2,"name");

println(result);

//union操作

println(result);

println("================================================================");

result = dataSet1.unite(dataSet2,["name","weight"]);

println(result);

println("================================================================");

result = dataSet1.unite(dataSet2,"name");

println(result);

//序表转tree

dataSet =readTxt("/data/tree.txt");

tree = dataSet.toTree("menuid","parentid");

println(tree.toDataSet());

//序表转值list

list = dataSet.toList();

println(list);

=================以下是运行结果================

n-ame w_eight value count 

c 6 5 1 

d 5 4 1 

e 4 6 1 

a 2 6 1 

b 2 3 1 

n-ame w_eight value count 

e 4 6 1 

d 5 4 1 

c 6 5 1 

b 2 3 1 

a 2 6 1 

n-ame w_eight value count 

e 4 6 1 

d 5 4 1 

c 6 5 1 

b 2 3 1 

a 2 6 1 

[2, 3, 6]

[6, 3, 2]

name weight value count 

a 2 6 1 

b 2 3 1 

c 6 5 1 

e 4 6 1 

d 5 4 1 

a 2 6 1 

b 1 3 1 

r 6 5 1 

f 5 4 1 

e 4 6 1 

name weight value count 

a 2 6 1 

b 1 3 1 

r 6 5 1 

f 5 4 1 

e 4 6 1 

================================================================

name weight value count 

a 2 6 1 

b 1 3 1 

r 6 5 1 

f 5 4 1 

e 4 6 1 

================================================================

name weight value count 

a 2 6 1 

b 1 3 1 

r 6 5 1 

f 5 4 1 

e 4 6 1 

name weight value count 

b 2 3 1 

c 6 5 1 

d 5 4 1 

================================================================

name weight value count 

b 2 3 1 

c 6 5 1 

d 5 4 1 

================================================================

name weight value count 

c 6 5 1 

d 5 4 1 

name weight value count 

b 2 3 1 

c 6 5 1 

d 5 4 1 

================================================================

name weight value count 

b 2 3 1 

c 6 5 1 

d 5 4 1 

================================================================

name weight value count 

c 6 5 1 

d 5 4 1 

name weight value count 

c 6 5 1 

d 5 4 1 

================================================================

name weight value count 

a 2 6 1 

b 2 3 1 

c 6 5 1 

e 4 6 1 

d 5 4 1 

b 1 3 1 

r 6 5 1 

f 5 4 1 

================================================================

name weight value count 

a 2 6 1 

b 1 3 1 

c 6 5 1 

e 4 6 1 

d 5 4 1 

r 6 5 1 

f 5 4 1 

menuid parentid name 

1  根菜单 

2 1 菜单一 

3 1 菜单二 

4 2 菜单三 

5 3 菜单四 

[{name:根菜单 menuid:1 parentid: }, {name:菜单一 menuid:2 parentid:1 }, {name:菜单二 menuid:3 parentid:1 }, {name:菜单三 menuid:4 parentid:2 }, {name:菜单四 menuid:5 parentid:3 }]

多级分组

//演示多级分组

defaultDB="mysql";

ds =[[select * from test2 ]].toDynamic();

println("输出原始序表:");

println(ds);

gs1 = ds.group("sex"); 

println("输出分组序表:");

println(gs1);

gs2 = ds.group("sex");

gs2 = gs2.avgGroup("age");

gs2 = gs2.groupStaged(AGE<=18,AGE>=18 && AGE <60 , AGE>=60);//此处会对聚合结果进行更新

println(gs2);

level1 = gs2.getGroups(1); //获取第一级分组

println("一级分组个数:"+level1.size());

println("遍历第一级序表:");

for(sub:level1){

  println(sub);

}

level2 = gs2.getGroups(2); //获取第二级分组

println("二级分组个数:"+level2.size());  //sex=1的序表不存在AGE>60的记录,所以分组个数只有5个而不是6个

println("遍历第二级序表:");

for(sub:level2){

  println(sub);

}

=================以下是运行结果================

输出原始序表:

ID FULLNAME AGE SEX 

1 莫小二 20 2 

2 张大名 30 1 

3 李德宏 78 2 

4 赵方毅 45 1 

5 John 12 1 

6 冯若依曼 45 1 

7 Tom 12 1 

8 赵真 45 2 

9 邱少云 30 1 

10 王三 12 2 

输出分组序表:

----------------------------------------

ID FULLNAME AGE SEX 

----------------------------------------

1 莫小二 20 2 

3 李德宏 78 2 

8 赵真 45 2 

10 王三 12 2 

----------------------------------------

2 张大名 30 1 

4 赵方毅 45 1 

5 John 12 1 

6 冯若依曼 45 1 

7 Tom 12 1 

9 邱少云 30 1 

----------------------------------------

----------------------------------------

ID FULLNAME AGE SEX avgGroup_age 

----------------------------------------

10 王三 12 2 38.75 

1 莫小二 20 2 38.75 

3 李德宏 78 2 38.75 

----------------------------------------

5 John 12 1 29.0 

2 张大名 30 1 29.0 

----------------------------------------

一级分组个数:2

遍历第一级序表:

----------------------------------------

ID FULLNAME AGE SEX avgGroup_AGE 

----------------------------------------

10 王三 12 2 12.0 

----------------------------------------

1 莫小二 20 2 32.5 

8 赵真 45 2 32.5 

----------------------------------------

3 李德宏 78 2 78.0 

----------------------------------------

----------------------------------------

ID FULLNAME AGE SEX avgGroup_AGE 

----------------------------------------

5 John 12 1 12.0 

7 Tom 12 1 12.0 

----------------------------------------

2 张大名 30 1 37.5 

4 赵方毅 45 1 37.5 

6 冯若依曼 45 1 37.5 

9 邱少云 30 1 37.5 

----------------------------------------

二级分组个数:5

遍历第二级序表:

ID FULLNAME AGE SEX 

10 王三 12 2 

ID FULLNAME AGE SEX 

1 莫小二 20 2 

8 赵真 45 2 

ID FULLNAME AGE SEX 

3 李德宏 78 2 

ID FULLNAME AGE SEX 

5 John 12 1 

7 Tom 12 1 

ID FULLNAME AGE SEX 

2 张大名 30 1 

4 赵方毅 45 1 

6 冯若依曼 45 1 

9 邱少云 30 1 

JOIN

ds1 =readCsv("/data/t1.csv","utf-8");

ds2 =readCsv("/data/t2.csv","utf-8");

//测试内联

inner = ds1.join(ds2,"userid=userid");

println(inner);

println("=================================");

//测试左联

left = ds1.joinLeft(ds2,"userid=userid");

println(left);

println("=================================");

//测试右联

right = ds1.joinRight(ds2,"userid=userid");

println(right);

println("=================================");

//测试全联

full = ds1.joinFull(ds2,"userid=userid");

println(full);

println("=================================");

=================以下是运行结果================

userid username password userid jifen dengji 

1 jack jackpwd 1 20 3 

=================================

userid username password userid jifen dengji 

1 jack jackpwd 1 20 3 

2 open openpwd null null null 

=================================

userid username password userid jifen dengji 

1 jack jackpwd 1 20 3 

null null null 3 50 6 

=================================

userid username password userid jifen dengji 

1 jack jackpwd 1 20 3 

2 open openpwd null null null 

null null null 3 50 6 

=================================

通过lambda表达式JOIN

ds1 =readCsv("/data/k1.csv","gbk");

ds2 =readCsv("/data/k2.csv","gbk");

println(ds1);

println("=================================");

println(ds2);

println("=================================");

//测试内联,采用lambda表达式关联姓名

inner = ds1.join(ds2,()->{ return name;},()->{ return firstname+lastname;});

println(inner);

println("=================================");

//测试左联,采用lambda表达式关联姓名

left = ds1.joinLeft(ds2,()->{ return name;},()->{ return firstname+lastname;});

println(left);

println("=================================");

//测试右联,采用lambda表达式关联姓名

right = ds1.joinRight(ds2,()->{ return name;},()->{ return firstname+lastname;});

println(right);

println("=================================");

//测试全联,采用lambda表达式关联姓名

full = ds1.joinFull(ds2,()->{ return name;},()->{ return firstname+lastname;});

println(full);

println("=================================");

=================以下是运行结果================

name job level 

张三丰 经理 E4 

李明月 高级经理 E5 

王河 员工 E2 

=================================

firstname lastname age sex 

张 三丰 30 男 

王 河 23 女 

赵 云 40 男 

=================================

name job level firstname lastname age sex 

张三丰 经理 E4 张 三丰 30 男 

王河 员工 E2 王 河 23 女 

=================================

name job level firstname lastname age sex 

张三丰 经理 E4 张 三丰 30 男 

李明月 高级经理 E5 null null null null 

王河 员工 E2 王 河 23 女 

=================================

name job level firstname lastname age sex 

张三丰 经理 E4 张 三丰 30 男 

王河 员工 E2 王 河 23 女 

null null null 赵 云 40 男 

=================================

name job level firstname lastname age sex 

张三丰 经理 E4 张 三丰 30 男 

李明月 高级经理 E5 null null null null 

王河 员工 E2 王 河 23 女 

null null null 赵 云 40 男 

=================================

通过联合主键JOIN

ds1 =readCsv("/data/m1.csv","gbk");

ds2 =readCsv("/data/m2.csv","gbk");

println(ds1);

println("=================================");

println(ds2);

println("=================================");

//测试内联,以用户ID和日期做联合主键

inner = ds1.join(ds2,["userid","opdate"],["userid","punishdate"]);

println(inner);

println("=================================");

//测试左联,以用户ID和日期做联合主键

left = ds1.joinLeft(ds2,["userid","opdate"],["userid","punishdate"]);

println(left);

println("=================================");

//测试右联,以用户ID和日期做联合主键

right = ds1.joinRight(ds2,["userid","opdate"],["userid","punishdate"]);

println(right);

println("=================================");

//测试全联,以用户ID和日期做联合主键

full = ds1.joinFull(ds2,["userid","opdate"],["userid","punishdate"]);

println(full);

println("=================================");

=================以下是运行结果================

userid opdate costtime 

1 20170808 45 

1 20170809 300 

2 20170810 10 

3 20170808 500 

3 20170810 20 

=================================

userid punishdate reason 

1 20170808 禁言1分钟 

1 20170809 罚500金币 

2 20170809 禁言30分钟 

3 20170811 禁止登录1天 

3 20170810 罚1500金币 

=================================

userid opdate costtime userid punishdate reason 

1 20170808 45 1 20170808 禁言1分钟 

1 20170809 300 1 20170809 罚500金币 

3 20170810 20 3 20170810 罚1500金币 

=================================

userid opdate costtime userid punishdate reason 

1 20170808 45 1 20170808 禁言1分钟 

1 20170809 300 1 20170809 罚500金币 

2 20170810 10 null null null 

3 20170808 500 null null null 

3 20170810 20 3 20170810 罚1500金币 

=================================

userid opdate costtime userid punishdate reason 

1 20170808 45 1 20170808 禁言1分钟 

1 20170809 300 1 20170809 罚500金币 

null null null 2 20170809 禁言30分钟 

null null null 3 20170811 禁止登录1天 

3 20170810 20 3 20170810 罚1500金币 

=================================

userid opdate costtime userid punishdate reason 

1 20170808 45 1 20170808 禁言1分钟 

1 20170809 300 1 20170809 罚500金币 

2 20170810 10 null null null 

3 20170808 500 null null null 

3 20170810 20 3 20170810 罚1500金币 

null null null 2 20170809 禁言30分钟 

null null null 3 20170811 禁止登录1天 

=================================

数据库编程


//ds = dynamicDataSource.query("select * from test1");

//println(ds.getRows());

//设置数据库类型(parsedSql底层需要)

defaultDB="H2";

id = 2;

//通过 beanName [[ sql ]] 获取ds实例

//newds = dynamicDataSource[[ select * from test1 where id > @id ]];

//通过  [[ sql ]] 获取ds实例

//可以直接在上下文定义bean,也可以在application.xml全局配置定义

//customBean = "dynamicDataSource";

newds =[[ select * from test1 where id > @id ]];

//输出结果记录

while(newds.next()){

println(newds.getData("id")+" "+newds.getData("fullname"));

}

=================以下是运行结果================

3 William Bush

4 Violet Torlay1



 
相关信息
     标签
       附件
      文件 标题 创建者

      评分 0次评分

      日程