打印这样的数据我没什么问题,我写了这样的脚本
[% FOREACH comp IN company %]
[% comp.name %]
[% comp.location%]
employeedata:
[% FOREACH employee IN comp.domain.java.employee %]
[% FOREACH experiance IN employee.experiance %]
[% FOREACH obj IN ObjectDefinition%]
[% FOREACH beha IN obj.experiance %]
[% IF beha.years == experiance.years %]
[% beha.Name %],
[% LAST %]
[% END %]
[% END %]
[% END %]
[% END %]
[% END %]
[% END %]
从上面的脚本中比较哈希中两个键中的“years”值,如果两者都相同,则打印员工姓名。它的工作和打印如下所示。
如果有三个名字就像这样打印。
clar, larson, per,
如果有两个名字就像这样打印。
clar, larson,
但我需要像这样打印 如果有三个名字
clar, larson or per.
如果有两个名字就像这样
clar, larson.
如果只有一个这样的名字
clar.
我的名字最多只有三个。我需要像这样打印帮助我如何打印这样的。如果有任何错误,请原谅。
我也尝试了这个
[% FOREACH employee IN comp.domain.java.employee %]
[% FOREACH experience IN employee.experience %]
[% FOREACH obj IN ObjectDefinition%]
[% FOREACH beha IN obj.experience %]
[% IF beha.years == experience.years %]
[% IF employee.experience.size == 1 %]
[% beha.Name %].
[% ELSIF employee.experience.size == 2 %]
[% beha.Name %],[% beha.Name %].
[% ELSIF employee.experience.size == 3 %]
[% beha.Name %],[% beha.Name %]or[% beha.Name %].
[% END %]
[% END %]
[% END %]
[% END %]
[% END %]
[% END %]
但是当我们有一个名字时会打印。如果我们有两个名字就像这样打印
clar,clar.
larson,larson.
如果我们有三个名字就像这样打印
clar,clar or clar.
larson,larson or larson.
per,per or per.
我的剧本出了什么问题我无法解决这个问题,任何人都可以帮助我。
答案 0 :(得分:0)
第二次尝试肯定更接近你需要的东西。但循环的顺序看起来不正确。 beha.Name
只会获得当前记录的值。
我想你想要这样的东西:
[% SET staff = []; # empty list
FOREACH beha IN obj.experience;
staff.push(beha) IF beha.years == experience.years;
END; %]
[% IF staff.size == 1;
staff.0.Name;
ELSIF staff.size == 2;
"$staff.0.Name, $staff.1.Name";
ELSIF staff.size >= 3;
"$staff.0.Name, $staff.1.Name or $staff.2.Name";
END %]
IF-ELSIF循环不是很漂亮,但是没有明显的staff.join()构造,可以使用逗号和文本分隔符以及3个元素的限制来完成所需的操作。
<强>更新强>
根据要求,使用.join的示例:
如果您有一个任意长度的名称列表,您可能希望将它们显示为名称,名称,[名称,...]或名称:
ELSIF staff.size >= 3;
SET lastname = staff.pop; #remove last person from list
staff.join(', '); " or $lastname";
END;
但正如我之前所说的,最多有3个名字,这太过分了。