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

上記のスクリプトから、ハッシュ内の 2 つのキーの「年」の値を比較し、両方が同じ場合は従業員名を出力します。以下のように動作し、このように印刷されます。

3 つの名前がある場合、このように印刷されます。

  clar, larson, per,

2 つの名前がある場合は、このように印刷されます。

clar, larson,

しかし、3つの名前がある場合、このように印刷する必要があります

clar, larson or per.

このように2つの名前がある場合

clar, larson.

このように名前が1つだけある場合

clar.

名前の最大数は 3 つだけです。このように印刷する必要があり、このように印刷する方法を教えてください。間違いがあればすみません。

私もこのようにしてみました

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

ただし、名前が 1 つの場合は印刷されます。2 つの名前がある場合、このように印刷されます

clar,clar.
larson,larson.

3 つの名前がある場合、このように印刷されます

clar,clar or clar.
larson,larson or larson.
per,per or per.

私のスクリプトの何が問題なのですか? この問題を解決できません。誰か助けてください。

4

1 に答える 1

0

2 回目の試行は、必要なものに間違いなく近いものです。しかし、ループの順序は正しくありません。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 ループはあまりきれいではありませんが、カンマとテキスト区切り記号の組み合わせと 3 つの要素の制限で必要なことを行う明らかな staff.join() 構造はありません。

アップデート

リクエストに応じて、.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 に答える