FWScript 结构

FWScript提供一种结构存储的方式,使用了MongoDB中Bson的实现方式进行数据的存放与处理。另外也实现了BsonArray,作为使用数据源方式实现的数组的补充。

  • 结构赋值
  • 结构取值
  • 结构修改
  • 文件读写

结构赋值

采用与JavaScript类似的方式来定义一个结构,也可以使用Json的方式,FWScript将逐一进行处理,因此可以使用变量,也可以在使用"的字符串里面放置变量。

可以使用JavaScript的方式,如下所示:
$b = {a3:"aaa",b3:"bbb",cdf:{c2:"cc",d3:"ddd",f4:"ffff"},thelist:["fff",23,-12,true]}

也可以直接使用Json格式,如:
$b = {"a3":3.12, "b3":-12, "lll":[12,23,33]}

在所有独立理解的地方,都可以使用变量,如:
$b = {$aa:$3, "b@$2":$2, $name:[$1,@12,@]} 

为了方便,FWScript扩展了注释的使用,凡是在引号之外的两个斜杠之间的内容,都是注释,如:
$b = {/this is a document/ $a:/the content of a/ 3.4,list:[12,/you can use hex or oct/0xFF, 056, 2.3]}
// 注意:如果在文件的json或结构定义中使用了注释,则这个文件只能在BizRunner中使用,无法在第三方的系统中使用
//        如果使用标准的注释结构 /*  */ 则与我们的定义是兼容的 

除了Bson外,还支持BsonArray作为变量的类型,其取值方式为:
$a  ={["abc",{a:1,b:2}, "rrr"]}
注意不是以[开头,而是以{[开头,与使用Dlist方式实现的数组区分开。


结构取值

FWScript支持使用两种方式从结构中取值,使用取下标的方式[],与使用取属性的方式.

取下标的方式 $b[index]

此种方式与Bson标准的方法相同,同时借鉴了JavaScript的习惯,有没有引号都一样。
针对Bson,既可以使用属性名称name,也可以实行数字index
如:
$b = {a3:"aaa",b3:"bbb",cdf:{c2:"cc",d3:"ddd",f4:"ffff"},thelist:["fff",23,-12,true]}

$b[a3]  的值为 "aaa",也可以使用 $b["a3"],  也可以先赋值$1="a3",再使用 $b[$1]
$b[edf][c2] 的值为 "cc"
$b[1] 的值为 "bbb"
$b[2][2] 的值为 "fff"

针对BsonArray,则只可以指定对应的序号(从0开始)
如:
$b = {[11,12,{b11:"aaa",b22:"bbb"}]}

$b[1]的值为12,也可以赋值$5为1,使用 $b[$5]
$b[2][b22] 的值为 "bbb",  也可以为 $b[2][1]

取属性值的方式 $b.attr

此种方式与JQuery的习惯类似。
针对Bson,既可以使用属性名称name,也可以实行数字index
如:
$b = {a3:"aaa",b3:"bbb",cdf:{c2:"cc",d3:"ddd",f4:"ffff"},thelist:["fff",23,-12,true]}

$b.a3  的值为 "aaa",也可以先赋值$1="a3",再使用 $b.$1
$b.cdf.c2 的值为 "cc"
$b.1 的值为 "bbb"
$b.2.2 的值为 "fff"

针对BsonArray,则只可以指定对应的序号(从0开始)
如:
$b = {[11,12,{b11:"aaa",b22:"bbb"}]}

$b.1的值为12,也可以赋值$5为1,使用 $b.$5
$b.2.b22 的值为 "bbb",  也可以为 $b.2.1

结构修改

当一个Bson结构已有数据时,可以向里面添加内容,也可以删除一些内容


当向一个bson结构添加与修改项的时候,需要指定name与value;当向一个bsonarray添加项的时候,则需要指定插到第几项order以及要插入的值value。 当需要从一个bson结构删除一项的时候,只需指定其name;而当需要从一个bsonarray删除项的时候,则只需要指定第几项。

针对Bson的添加与修改操作:


Bson的增加与修改视相应的attribute是否存在,如果存在,则直接修改,如果使用者用的是增加的语法,则出警告信息;如果不存在,则直接添加,如果使用者用的是修改的语法,则也出警告信息。
增加标准方式为:$b+name=value,也可以为$b.name += value  $b[name] += value
修改的标准方式为:$b.name = value, $b[name]=value
其中name可以使用数字变量$0-$9,value使用表达式
如:
$b+aaa= $3+"aaa"
$b+$1= 123+45
$b.$1+= "aaa"
$b.aaa = "234"

也可以对bson结构的子文档进行添加与修改操作,如:
$b = {a1:12, b1:{b11:"aaa",b22:"bbb"}}
$b.b1+b33="ccc"
则执行后的结果为:
$b = {a1:12, b1:{b11:"aaa",b22:"bbb",b33:"ccc"}}

$b.b1.b11 = "ccc:
则执行后的结果为:
$b = {a1:12, b1:{b11:"ccc",b22:"bbb",b33:"ccc"}}

针对BsonArray的添加与修改操作:

增加的标准方式为:$b+dd=value,也可以为$b.dd += value  $b[dd] += value
修改的标准方式为:$b.dd = value, $b[dd] = value

其中dd可以使用数字变量$0-$9,value可以使用表达式
如:
$b+2= $3+"aaa"
$1=2
$b+$1= 123+45
$b.$1+= "aaa"
$b.$1 = "ccc"

也可以对bsonArray结构的子文档进行添加操作,如:
$b = {[11,12,{b11:"aaa",b22:"bbb"}]}
$b.2+b33="ccc"
或 $b[2]+b33 = "ccc"
则执行后的结果为:
$b = {[11,12,{b11:"aaa",b22:"bbb",b33:"ccc"}]}

$b.2.b11 = "ccc"
或者 $b[2][b11] = "ccc"
则执行后的结果为:
$b = {[11,12,{b11:"ccc",b22:"bbb",b33:"ccc"}]}
注意:
针对bson或bsonarray的增加与修改,其实最终是定位在最后的子文档中。如:
$b = {a1: 3, a2:{aa1:"rrr", aa2:{aaa1:3, aaa3:4}, aa3:4, aa4:[1,2,3,4,5]}, a3:5}

如果前面的定位描述为:
$b.a2.aa2.aaa1 
则作用在一个bsondocument上面,亦即aa2上面,用于修改它的aaa1属性

如果前面的定位描述为:
$b.a2.aa4.3  
则作用在一个bsonArray上面,亦即aa4上面,要修改的就是它的第3个元素 

后面可以在跟上 +=  或者是  =, 用来决定是添加(插入),还是修改。


删除操作:

标准方式为:
$b-name也可以为$b.name-
$b-dd 也可以为b.dd-
其中name和dd可以使用数字变量$0-$9
如:
$b-2
$b-a
$b-$1

也可以对bson和bsonArray结构的子文档进行删除,如:
$b = {[11,12,{b11:"aaa",b22:"bbb"}]}
$b.2-b22
则执行后的结果为:
$b = {[11,12,{b11:"aaa"}]}

$b = {a1:12, b1:{b11:"aaa",b22:"bbb",b33:"ccc"}}
$b.b1-b22
或者 $b[b1]-b22
执行结果为:
$b = {a1:12, b1:{b11:"aaa", b33:"ccc"}}

文件读写

BsonDocument与BsonArray都可以进行文件的读入与存写,文件路径使用简单表达式SSExpr,参见 Simple String Expression,如果字符串结果以\开头,则自动加上BizRunner的安装路径。
文件的存储的方式有两种:一种是Json格式,此时指定的文件名称以.json为扩展名;另一种是bson格式,此时指定的文件名称以.bson为扩展名。Json格式的文件具有较好的可读性,而Bson格式的文件读写具备较高的效率。

Json的文件导入:注意标准的导入必须使用标准的JSON格式,要使用FWScript定义的方式,则使用特殊方式(见下面,在路径最前面加个星号*)。

$b = {<c:\bizat\tmp\t.json

$file =  'c:\bizat\tmp\t.json'
$b = {<$file 

$b = {<"c:\\bizat\\tmp\\t.json"

BsonArray的文件导入 (因为文件的格式不一样,所以需要分开)
$ba = {[<c:\bizat\tmp\t.json

$file =  'c:\bizat\tmp\t.json'
$ba = {[<$file

$ba = {[<"c:\\bizat\\tmp\\t.json"

如果希望利用FWScript的定义方式,可以让BizRunner选择使用自己的parser,此时在路径最前面加个星号即可。
如:
$file =  '*c:\bizat\tmp\t.json'	
$b = {<$file
$b = {<"*c:\\bizat\\tmp\\t.json"
$ba = {[<*c:\tmp\t.json


文件的写入:
$b = {>c:\bizat\tmp\t.json
或者 $b = {[>c:\bizat\tmp\t.json 后同,因为可以判断$b的类型采取不同的方法。

$file =  'c:\bizat\tmp\t.json'
$b = {>$file

$b = {>"c:\\bizat\\tmp\\t.json"