Как Регулярные Выражения Прикрутить К Lotusscript?

Тема в разделе "Lotus - Программирование", создана пользователем StarikStarik2705, 29 мар 2012.

  1. StarikStarik2705

    StarikStarik2705 Well-Known Member

    Регистрация:
    8 фев 2012
    Сообщения:
    103
    Симпатии:
    0
    вобщем ситуация следующая есть проверка поля под ява скрипт, и занимает изза регулярного выражения она всего одну строчку, есть такая же под лотус скрипт и занимает не одну строчку :

    If Trim(Cstr(source.FieldGetText("Hours")))="" Then
    Msgbox "Необходимо заполнить числовым значением"
    Continue=False
    Exit Sub
    Else
    Const ErrMsg = "Поле должно иметь следующий формат: <целое число>,5 или <целое число>"
    Dim tstr As String
    Dim IntPart As String
    Dim FloatPart As String

    tstr = source.FieldGetText("Hours")

    IntPart = Strleft( tstr, "," )
    If Len( IntPart ) > 0 Then ' проверяем отдельно целую и дробную части
    FloatPart = Strright( tstr, "," )
    If Not IsInteger( IntPart ) Then
    Msgbox ErrMsg
    Continue = False
    Elseif FloatPart <> "5" Then
    Msgbox ErrMsg
    Continue = False
    End If
    Elseif Not IsInteger( tstr )
    Msgbox ErrMsg
    Continue = False
    на явеСкрипт это так выглядит


    var flag;
    var expr = /^[0-9](,5)?$|^1[0-9](,5)?$|^2[0-3](,5)?$|^24$/;

    flag = false;

    flag = expr.test( document.getElementById( "Hours" ).value );
    if (!flag){
    alert( "Поле Часы должно иметь следующий формат: <целое число>,5 или <целое число>" );
    }else{
    if (chDate()){
    document.getElementById("idbtnsave").click();
    }
    }

    можно использовать регулярное выражение для Лотуса Скрип к примеру функцию написать что бы написано было на лотусескрипте но с использованием свойств регулярного выражения? вообще возможно ли это?
     
  2. morpheus

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

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    Это Вы про Like што ле?

    This example uses Like as a validation formula for city and zip fields.
    if doc.city(0) like "*[0-9]*" then messagebox _
    "city field contains a number"
    if doc.zip(0) like "*[a-z,A-Z]*" then messagebox _
    "zip code field contains a character"
     
  3. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    У LS есть оператор Like. Проверяет не регулярные выражения, но может подойти. Если же нужны именно регулярные выражения, можно вызывать Яву через LS2J.
     
  4. StarikStarik2705

    StarikStarik2705 Well-Known Member

    Регистрация:
    8 фев 2012
    Сообщения:
    103
    Симпатии:
    0
    спасибо мужики я уже написал всё оказалось не так сложно но думаю функция очень полезная, покрайне мере для меня очень!!!!!


    ' RegEx - передавать регурярное выражение в кавычках "RegEx", Field - значение поля
    'Функция вернёт True если значение поля прошло фильтр выражения, и False если не прошло
    Function RegExpFunc(RegEx As String, Field As String)
    Dim regexpObj
    Dim teststring As String
    Dim re As String
    re = RegEx
    teststring = Field
    Set regexpObj = CreateObject("VBScript.RegExp")
    regexpObj.Pattern = re
    regexpObj.Global = True
    RegExpFunc = regexpObj.test(teststring)
    End Functio
     
  5. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    странно, что никто не нападает, что оле для данной задачи как-то некошерно :)
    Имхо, через like можно было сообразить что-то подобное такому:
    Код (LotusScript):
    tstr = source.FieldGetText("Hours")
    dim patterns(0 to 5) as String
    dim ok as boolean
    patterns(0) = "#"
    patterns(1) = "#,5"
    patterns(2) = "1#"
    patterns(3) = "1#,5"
    patterns(4) = "2[0-4]"
    patterns(5) = "2[0-3],5"
    // или так: dim patterns as Variant : patterns = split("#:#,5:1#:1#,5:2[0-4]:2[0-3],5", ":")
    ok=false
    forall pattern in patterns
    if tstr like pattern then
    ok = true
    exit forall
    end if
    end forall
    if not ok then
    Msgbox ErrMsg
    Continue = False
    end if
    не тестировала ;)

    Добавлено: и вместо [0-9] надо #. исправила
     
  6. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    КМК, полезней использовать родные средства:
    Код (LotusScript):
    Uselsx "*javacon"
    Function matchesToRegEx(testString As String, regEx As String)
    Dim jSession As JavaSession
    Dim jClass As JavaClass
    Dim jMethod As JavaMethod

    Set jSession = New JavaSession()
    Set jClass = jSession.GetClass("java/util/regex/Pattern")
    Set jMethod = jClass.GetMethod("matches", "(Ljava/lang/String;Ljava/lang/CharSequence;)Z")
    matchesToRegEx = jMethod.Invoke(, regEx, testString)
    End Function
     
  7. lmike

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

    Регистрация:
    27 авг 2008
    Сообщения:
    6.082
    Симпатии:
    300
    устали объяснять, что вляпаться в ОЛЕ - это плохо...
    вот ребенку скока не говори - не брать каку - будет брать пока не вырастет (а может и потом - ежели привыкнет :) )
     
  8. StarikStarik2705

    StarikStarik2705 Well-Known Member

    Регистрация:
    8 фев 2012
    Сообщения:
    103
    Симпатии:
    0
    Та неееее у меня эе потом я смогу использоват при много кратной проверке для самых разных случаев, только регулярку подбери нудную))) и чего не кошерно дял поля? на выходе проверка всего четыре строки а не целая лента ))

    Добавлено: спасибо большое!

    Добавлено:
    простите а вы не могли бы обьяснить почему ОЛЕ(Object Linking and Embedding) не хорошо брать? к чему это может привести?
     
  9. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Lotus Notes зверь кроссплатформенный, OLE — Windows only. Захочет Ваш мегабосс поставить себе мак со снежным барсом — что делать будете?
     
  10. lmike

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

    Регистрация:
    27 авг 2008
    Сообщения:
    6.082
    Симпатии:
    300
    помимо отсутствия кроссплатформенности и того что МС болт положила на ОЛЕ (увлеклась сначала .НЕТ, а терь хтмл5), есть ещё момент настройки
    ОЛЕ регается в системе, но "это" может "слететь" и тогда будут костыли для: проверки, перерегистрации...
    ошибки - ваще хз как обрабатывать и что они означают (у каждой КОМы свои приколы)

    т.е. вместо решения одной проблемы (никак не связанной с МС технологиями) устраиваем русскую рулетку с виндой (я даже могу сказать - кто проиграет)
     
  11. StarikStarik2705

    StarikStarik2705 Well-Known Member

    Регистрация:
    8 фев 2012
    Сообщения:
    103
    Симпатии:
    0


    ну а проблема решиться с использованием этой функции если как приведено выше я всё родное Uselsx "*javacon" буду применять?
     
  12. lmike

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

    Регистрация:
    27 авг 2008
    Сообщения:
    6.082
    Симпатии:
    300
    что останавливает?
    код дали, даже в ф-цию оформили...
     
  13. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    А попробовать? Лепите агента, в (Options) втыкаете Uselsx "*javacon", в Initialize что-нибудь типа
    Код (LotusScript):
    Msgbox Cstr(matchesToRegEx("B", "[a-z]"))
    , ну и саму функцию.
     
  14. StarikStarik2705

    StarikStarik2705 Well-Known Member

    Регистрация:
    8 фев 2012
    Сообщения:
    103
    Симпатии:
    0
    да не т за это спасибо я имел ввиду что ОЛЕ у меня всё упадёт если это не виндовс будет
     
  15. lmike

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

    Регистрация:
    27 авг 2008
    Сообщения:
    6.082
    Симпатии:
    300
    вывалит ошибку - что объекта нет и не сделает нужного
     
  16. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    эээ... мне нужно проверить, что в строке есть ровно 8 цифр.
    делаю через LS2J, рега: "/[0-9]{8}/"
    Строка: Наклейка на С5 (44002002)
    Результат false
    Что я делаю не так?
     
  17. Murtas

    Murtas Well-Known Member

    Регистрация:
    11 апр 2006
    Сообщения:
    123
    Симпатии:
    0
    /^\d{8}$/
     
  18. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    Как выяснилось "всё":
    Код (Java):
    Session session = getSession();
              AgentContext agentContext = session.getAgentContext();
     
              // (Your code goes here)
     
              String source = "Наклейка на С5 (44002002)";
              String p = "[0-9]{8}";
             
              Pattern pa = Pattern.compile(p);
              Matcher m = pa.matcher(source);
         
              b = m.find();
             
              JOptionPane.showMessageDialog(null, b + " : " + source + " | " + p + " -> " + m.group(0), "InfoBox: ", JOptionPane.INFORMATION_MESSAGE);
     
  19. garrick

    garrick Lotus team
    Lotus team

    Регистрация:
    26 окт 2009
    Сообщения:
    773
    Симпатии:
    52
    Вне Windows OLE вообще нет. Да, и в Windows не всегда работает. Может так случится, что на какой-то конкретной машине этот класс/объект/сервер и пр. (как там эти компоненты OLE правильно называются?) вообще нерабочий/поломатый/неправильно установлен/не зарегистрирован. Вы вообще не разберётесь почему на этой машине ваш код не работает, а на всех других - нормально. Выход - переустанавливать Windows.

    @Matches не пробовали использовать?
     
  20. duchan

    duchan Well-Known Member

    Регистрация:
    20 сен 2006
    Сообщения:
    106
    Симпатии:
    3
    @garrick,
    - извените, но это детская отмазка, поскольку на "конкретной машине", может быть и не исправно оборудывание (память сбоит) - вообще придется комп ремонтировать, я для явы, может не подойти текущая версия явы в "нотсе" - надо будет более свежий клиент ставить (а они кстати не совсем обратно совместимы, к слову), и вообще некоторые библиотеки явы надо ставить локально на каждый комп, что бы "странное" работало. Так что, сами видите, что Ваши доводы применимы к любой технологии, если вопрос в использовании сторонних наработок (не дефолтных лотусовых). У любого приложения есть минимальные системные требования - естественно, необходимо минимизировать зависимости, и использовать по возможности штатные средства (например, как в нашем случае RegExp из явы через LS2J), но иногда этих средств может не хватать и приходится использовать внешнее API (как для COM так и для Java) - тут вопрос в эффективности и обоснованности применения.
    И в любом случае, для избежания проблем исполнения, необходимо проверять окружение при использовании внешних модулей (как с Java, так и COM), устанавливать не достающие модули и предупреждать об невозможности устранить проблему, если таковая случается.
     
Загрузка...

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