跳到主要内容
版本:classic

sep 介绍

流式格式中,对于包含多个数据的复合类型数据,有时候希望紧凑地在一个单元格或者一个字符串内填写它的多个子数据,使用sep可以实现此目的。

sep会拆分单元格和字符串,再流式入,sep可以包含多个字符,如 sep=",;",此时会用每个字符来拆分读入的字符串。

分割 text

##variddesc
##typeinttext#sep=@
1key1@xxxxx
2key2@yyyyy

分割 简单列表

sep注解器 对于非容器类型,它作用于类型本身,对于容器类型,它既可以作用于容器,也可以作用于容器元素。

##variditem_id_listname_listfloat_list
##typeint(list#sep=,),int(list#sep=,),string(list#sep=,),float
11,2,3abc,efg,def1.5,2.5,3
24,5eee,fff1.2,2.2

分割 bean (单单元格)

<bean name="Item">
<var name="item_id" type="int"/>
<var name="num" type="int"/>
<var name="desc" type="string"/>
</bean>

<bean name="Shape">
<bean name="Circle">
<var name="radius" type="float"/>
</bean>
<bean name="Rectangle" alias="长方形">
<var name="width" type="float"/>
<var name="height" type="float"/>
</bean>
</bean>

<bean name="ComplexBean1">
<var name="x" type="int"/>
<var name="y" type="Item#sep=,"/>
<var name="z" type="int"/>
</bean>

<bean name="ComplexBean2">
<var name="x" type="int"/>
<var name="y" type="(list#sep=|),(Item#sep=,)"/>
<var name="z" type="int"/>
</bean>

##variditem
##typeintItem#sep=,
11001,10,item1
##varidshape
##typeintShape#sep=,
1Circle,10
2长方形,5,8
##variditem
##typeintComplexBean1#sep=;
1123;1002,1,item2;65
##variditem
##typeintComplexBean2#sep=;
1111;1001,2,item1|1002,1,item2;234

分割bean (多单元格)

##variditem
##typeintItem
110011item1
##varidshape
##typeintShape
1Circle10
1Rectangle1020
##varidx
##typeintComplexBean1
12341001,1,item1789
##varidx
##typeintComplexBean2
12341001,1,item1|1002,1,item2789

bean列表 (单单元格)

##variditem
##typeint(list#sep=%),Item#sep=,
11001,10,item1%1002,1,item2
##variditem
##typeint(list#sep=%),ComplexBean1#sep=;
1123;1002,1,item2;65%124;1002,1,item2;65
##variditem
##typeint(list#sep=%),ComplexBean2#sep=;
1123;1002,1,item2

bean列表 (多单元格)

##variditem
##typeintlist,Item#sep=,
11001,1,item11002,1,item2
##varidshape
##typeintlist,Shape#sep=,
1Circle,10Rectangle,15,18Circle,20
##varidx
##typeintlist,ComplexBean1#sep=;
1222;1001,1,item1;789333;1001,1,item1;789444;1001,1,item1;789
##varidx
##typeintlist,ComplexBean2#sep=;
1111;1001,1,item1;1002,2,item2;};111222;1001,1,item1;1002,2,item2;};111
##varidx
##typeintlist,ComplexBean3#sep=;
1333;1001,1,item1%1002,1,item2;444333;1001,1,item1%1002,1,item2;444

支持默认sep的bean

有些类型,你希望所有用到它的地方都以约定的sep去分割读取,而不是每处都定义sep。

bean支持sep属性实现这个机制。

假设你需要一个日期类, 你期望所有用到的地方都按 yyyy-mm-dd的格式填写。示例如下:

<bean name="Date" sep="-">
<var name="year" type="int"/>
<var name="month" type="int#range=[1,12]"/>
<var name="day" type="int#range=[1,31]"/>
</bean>
##variddatedates
##typeintDate(list#sep=$),Data
11999-9-92000-1-1$2020-2-2
22018-8-81990-2-3$1991-3-4$1992-4-5