ошибка при печати данных с использованием шаблонного модуля - PullRequest
0 голосов
/ 09 ноября 2011

У меня небольшая проблема с печатью таких данных, я написал такой скрипт

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

что не так с моим сценарием, я не могу решить эту проблему, может любое телоПомогите мне, пожалуйста.

1 Ответ

0 голосов
/ 10 ноября 2011

Вторая попытка определенно ближе к тому, что вам нужно.Но порядок петель не выглядит правильным.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 именами, это излишне.

...