0

我对打印这样的数据没有什么问题,我写过这样的脚本

[% 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 %]

从上面的脚本中比较哈希中两个键中的“年”值,如果两者相同,则打印员工姓名。它的工作和打印如下所示。

如果有三个名字,它会像这样打印。

  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.

我的脚本有什么问题我无法解决这个问题,请任何人帮助我。

4

1 回答 1

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 的示例:

如果您有任意长度的名称列表,您可能希望将它们显示为name、name、[name, ...] 或 name

ELSIF staff.size >= 3;
    SET lastname = staff.pop; #remove last person from list
    staff.join(', '); " or $lastname";
END;

但正如我之前所说,最多有 3 个名字,这是矫枉过正的。

于 2011-11-10T02:41:38.793 回答