Добавление строки в список

Тема в разделе "Lotus - Программирование", создана пользователем Gor, 25 сен 2008.

  1. Gor

    Gor Well-Known Member

    Регистрация:
    7 июн 2005
    Сообщения:
    517
    Симпатии:
    2
    Здравствуйте!
    Помогите решить такую задачку.

    У меня есть мультивалуйное поле с разделителями New Line.
    Значение я туда записываю просто @SetField ом
    @SetField("DCL_P";DCL_P:DCL_AddEncl1_1);

    т.е. пополняю список значений.

    Как можно добавить в этот список значений своё, но в определённом месте, т.е. по ключу?

    например
    DCL_P = ОДИН:ДВА:ТРИ

    key:= ДВА
    Value:= МОЙ ТЕКСТ

    Чтобы результат поля DCL_P по выполнению какой то функции был таким DCL_P = ОДИН:ДВА:МОЙ ТЕКСТ:ТРИ ????

    Пытаюсь пройти в цикле весь список, но чёто торможу... непойму как вставить значение в следующую линию и сдвинуть список на 1
    Код (Text):
    @For(n := 1;n <= @Elements(DCL_P); n := n+1;
    @If(@Contains(Key;DCL_P[n]);@SetField(DCL_P[n+1];"МОЙ ТЕКСТ");@Success));
    @Command([ViewRefreshFields])
    не работает( да наверно и не должно... неправильно делаю... но догадаться не могу что то как надо...
     
  2. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Например так:
    Код (Text):
    @Explode(@Replace("ОДИН" : "ДВА" : "ТРИ"; "ДВА"; "ДВА" + "~" + "МОЙ ТЕКСТ"); "~")
     
  3. Gor

    Gor Well-Known Member

    Регистрация:
    7 июн 2005
    Сообщения:
    517
    Симпатии:
    2
    спасибо))
    извиняюсь, но на самом деле немного задачку наверно я описал не так, точнее не полностью. Скорее через @Explode здесь не всё получится сделать...

    Я по кнопке пишу значения сразу в несколько полей одновременно

    @SetField("DCL_P";DCL_P:DCL_AddEncl1_1);
    @SetField("DCL_P1";DCL_P1:DCL_Add_1);
    @SetField("DCL_P2";DCL_P2:DCL_Add_2);

    И ключ есть только для одного поля. В остальные поля строчка должна добавляться на том же уровне.

    т.е.

    DCL_P = ОДИН:ДВА:ТРИ
    DCL_P1 = 1:2:3
    DCL_P1 = 10:20:30

    key:= ДВА

    Value = МОЙ ТЕКСТ
    Value1 = МОЙ ТЕКСТ1
    Value2 = МОЙ ТЕКСТ2

    Результат:
    DCL_P = ОДИН:ДВА:МОЙ ТЕКСТ:ТРИ
    DCL_P1 = 1:2:МОЙ ТЕКСТ1:3
    DCL_P2 = 10:20:МОЙ ТЕКСТ2:3

    Как то здесь через цикл наверно надо делать, массив строк чтоли обрабатывать... вставлять в n-ый элемент...
     
  4. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    А почему не на скрипте?
     
  5. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Немного сложнее:
    Код (Text):
    @SetField("DCL_P1"; @Explode(@Right(@Replace(DCL_P + "~" + DCL_P1; key + "~" + DCL_P1; "~" + DCL_P1 + "|" + Value1); "~"); "|"));
    @SetField("DCL_P2"; @Explode(@Right(@Replace(DCL_P + "~" + DCL_P2; key + "~" + DCL_P2; "~" + DCL_P2 + "|" + Value2); "~"); "|"));
    @SetField("DCL_P"; @Explode(@Right(@Replace(DCL_P + "~" + DCL_P; key + "~" + DCL_P; "~" + DCL_P + "|" + Value); "~"); "|"));
     
  6. Gor

    Gor Well-Known Member

    Регистрация:
    7 июн 2005
    Сообщения:
    517
    Симпатии:
    2
    Код (Text):
    А почему не на скрипте?
    Web форма... и документ на этапе создания (т.е. ещё не сохранён)
     
  7. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    На js можно.
     
  8. Gor

    Gor Well-Known Member

    Регистрация:
    7 июн 2005
    Сообщения:
    517
    Симпатии:
    2
    to: Medevic

    Я на js дальше валидации и регулярных выражений к сожалению не продвинулся =)
    да и редактор js в лотусе ужасный... с синтиксисом у меня проблемы... а другой редактор на рабочем месте
    нет возможности использовать...

    Спасибо огромное!!! Работает! +1
     
  9. Gor

    Gor Well-Known Member

    Регистрация:
    7 июн 2005
    Сообщения:
    517
    Симпатии:
    2
    to: Medevic
    Единственно эта формула почему то при наличии в строке только одной записи записывает сразу две сроки ниже...

    т.е. если
    DCL_P = ОДИН
    DCL_P1 = 1
    DCL_P1 = 10

    key:= ОДИН

    Value = МОЙ ТЕКСТ
    Value1 = МОЙ ТЕКСТ1
    Value2 = МОЙ ТЕКСТ2

    Возвращет результат
    DCL_P = ОДИН:МОЙ ТЕКСТ:ОДИН
    DCL_P1 = 1:МОЙ ТЕКСТ1:1
    DCL_P2 = 10:МОЙ ТЕКСТ2:10

    это наверное потому что нет списка уже?
     
  10. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Попробуй везде @Trim поставить.
    Т.е. @Trim(DCL_P) + "~" + @Trim(DCL_P1) и т.д.
     
  11. Gor

    Gor Well-Known Member

    Регистрация:
    7 июн 2005
    Сообщения:
    517
    Симпатии:
    2
    нипомогает(

    хотя я наврал...
    она немного по другому делает... Независимо от того сколько уже линий в поле.
    Вот так хитро она возвращет=))):

    DCL_P = ОДИН:ДВА:ТРИ
    DCL_P1 = 1:2:3
    DCL_P1 = 10:20:30

    key:= ОДИН

    Value = МОЙ ТЕКСТ
    Value1 = МОЙ ТЕКСТ1
    Value2 = МОЙ ТЕКСТ2

    Возвращет результат
    DCL_P = ОДИН:МОЙ ТЕКСТ:ДВА:ТРИ
    DCL_P1 = 1:МОЙ ТЕКСТ1:2:3:1
    DCL_P2 = 10:МОЙ ТЕКСТ2:20:30:10

    т.е. дублирует строчку где она ключевой не является, а в ключевую пишет нормально. И дублирует причём только один раз=)))
    Если повоторно функцию прогать больше строчек лишних она не добавляет,т.е. нормально возвращает, хотя лишняя строчка записанная остаётся...

    DCL_P = ОДИН:МОЙ ТЕКСТ:МОЙ ТЕКСТ:ДВА:ТРИ
    DCL_P1 = 1:МОЙ ТЕКСТ1:МОЙ ТЕКСТ1:2:3:1
    DCL_P2 = 10:МОЙ ТЕКСТ2:МОЙ ТЕКСТ2:20:30:10

    Может быть с полями у меня что то не то((
     
  12. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.078
    Симпатии:
    300
    получайте @SubSet используя @Member
     
  13. Gor

    Gor Well-Known Member

    Регистрация:
    7 июн 2005
    Сообщения:
    517
    Симпатии:
    2
    А как узнать каким именно элементом по счёту в списке является моё уникальное значение?
     
  14. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    @member вернёт позицию элемента в массиве
     
  15. Gor

    Gor Well-Known Member

    Регистрация:
    7 июн 2005
    Сообщения:
    517
    Симпатии:
    2
    ну можно попробовать же и так сделать?

    @For(n := 1;n <= @Elements(DCL_P1); n := n+1;
    @If(DCL_P1[n]=key;@SetField("DCL_P1";@Subset(DCL_P1;n-1):Value:mad:Subset(DCL_P1;n+1));@Success);@Success);


    только что то не работает=) буду разбираться=)
     
  16. Gor

    Gor Well-Known Member

    Регистрация:
    7 июн 2005
    Сообщения:
    517
    Симпатии:
    2
    с сабсетом конструкция работает =)

    Спасибо!
     
  17. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.078
    Симпатии:
    300
    вы неправильно пользуетесь ф-цией
    циклы в собаках - это излишне (зачастую)
    n:=@Member(key;list);
    nAll:=@Elements(list)
    newvalue:=@SubSet(list;n):value:mad:SubSet(list;n-nAll);
    в границах мог ошибиться на 1
     
  18. Gor

    Gor Well-Known Member

    Регистрация:
    7 июн 2005
    Сообщения:
    517
    Симпатии:
    2
    Я уже понял :(
    С сабсетом ещё и проверка на ноль нужна...
    У меня вот так работает

    f:= @Member(enclTo;DCL_P1_1);
    s:= -(@Elements(DCL_P1_1)-@Elements(@Subset(DCL_P1_1;f)));

    qoute:= " + " +DCL_AddEncl1;
    m:=" * "+DCL_LA_1;
    m1:=" * "+DCL_R2;

    @If(s=0;@SetField("DCL_P";DCL_P:qoute);@SetField("DCL_P";@Subset(DCL_P;f):qoute:mad:Subset(DCL_P;s)));
    @If(s=0;@SetField("DCL_P1_1";DCL_P1_1:m);@SetField("DCL_P1_1";@Subset(DCL_P1_1;f):m:mad:Subset(DCL_P1_1;s)));
    @If(s=0;@SetField("DCL_P2_1";DCL_P2_1:m1);@SetField("DCL_P2_1";@Subset(DCL_P2_1;f):m1:mad:Subset(DCL_P2_1;s)));
     
Загрузка...

Поделиться этой страницей