Строку в массив

Тема в разделе "Lotus - Программирование", создана пользователем Dragon108, 27 июл 2010.

  1. Dragon108

    Dragon108 Well-Known Member

    Регистрация:
    19 янв 2010
    Сообщения:
    264
    Симпатии:
    0
    Можно ли как-нибудь взять строку и посимвольно загнать её в массив?
    Например строка = "qwertyuiop"? массив: a1 = q , a2 =2, a3 = e и т.д.
    Спасибо.
     
  2. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    а зачем?
    вот таким "прелестным" циклом, например...
    Код (LotusScript):
    if stroka <> "" then
    lenstr = len(stroka)
    redim arr(0 to lenstr-1) As String
    for i=1 to lenstr
    arr(i-1) = Mid$(stroka, i, 1)
    Next
    else
    redim arr(0 to 0) As String
    end if
     
  3. turumbay

    Регистрация:
    13 мар 2009
    Сообщения:
    625
    Симпатии:
    2
    +1
    слезно прошу: не делайте этого.
    не знаю, зачем это вам нужно - но уверен, что вы изобретаете не самый правильный велосипед.
    Действительно уникальные задачи встречаются очень редко. Вашу проблему наверняка кто-то решал. Сформулируйте задачу и, скорее всего, получите нормальное( более эффективное и красивое ) решение.
    З.Ы.. динамические массивы, операции со строками - это не те задачи, которые ls решает хорошо. получите тормозной спагетти-код.

    З.З.Ы. пример самопального велосипеда, ваш же пример кода(из хелпа?):
    Код (LotusScript):
    if doc.zip(0) like "*[a-z,A-Z]*" then messagebox _  
    "zip code field contains a character"
    код не работает. "Ё#%;*й▼" - вполне себе такой валидный zipcode по вашему мнению? Проверять надо не отсутствие буков, а наличие только цифр.
     
  4. Dragon108

    Dragon108 Well-Known Member

    Регистрация:
    19 янв 2010
    Сообщения:
    264
    Симпатии:
    0
    Задача в следующем ... есть строка ... в ней могут содержаться как латинские буквы так и кириллица, надо отловить все латинские и заменить их, например, на нули (на что меня не важно, главное отслеживать латиницу и заменять её) - задача в кратце звучит вот так
     
  5. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    а разве replace не поможет? это из-за него такие извраты с массивом? сделайте статически массив символов латиницы... меняйте его на "0" и сравнивайте результат - если отличается replace, то были лат.символы.
    кстати, в клиенте есть же еще яваскрипт, до значений редактируемых полей достучаться вроде можно, а там регулярки есть...
     
  6. turumbay

    Регистрация:
    13 мар 2009
    Сообщения:
    625
    Симпатии:
    2
    вы не ходили по ссылке http://dontpanic82.blogspot.com/2007/10/si...sion-class.html ?
    самый системный подход - использовать java ( или ls2j из ls ).
    в UI я бы вообще скормил эту строку javascript-у: stringToValidate.replace( /[a-z,A-Z]/g , "0" )

    можно еще replace заюзать( в т.ч. и собачий ). набить циклом массив 27*2 латинский букв - все проще чем перебирать посимвольно и обратно склеивать.

    вы часом не задачу проверки введенных значений решаете? для этого у поля есть input validation, input translation и @Matches - и пусть юзер сам разбираеца с введенным мусором.
     
  7. lmike

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

    Регистрация:
    27 авг 2008
    Сообщения:
    6.075
    Симпатии:
    300
    <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">"ОФФ, индусский код"</div></div><div class="sp-body"><div class="sp-content">в мире существуют поклонники http://lurkmore.ru/%D0%98%D0%BD%D0%B4%D1%8...%BA%D0%BE%D0%B4 явные и по-призванию. А так как продукт LDN изобилует подобным - чего ожидать от его изучающих :)
     
  8. Dragon108

    Dragon108 Well-Known Member

    Регистрация:
    19 янв 2010
    Сообщения:
    264
    Симпатии:
    0
    Нет, уже имеются документы с такими введенными данными, надо их обработать, заменив латинские символы.
     
  9. Darker

    Darker Гость

    Для Split, в качестве сепаратора можно и chr(0) пустить
    Код (LotusScript):
       
    myStringArray=split(myString,chr(0))
    Dim letter(51) As String
    For i=0 To 25
    letter(i)=Chr(65+i)
    letter(26+i)=Chr(97+i)
    Next
    myStringArray=Replace(myStringArray,letter,"0")
     
  10. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    Имхо, на скрипте проще myStringReplaced=replace(myString,letter,"0")
    уж простите, но зачем ваааще массив для каждого символа исходной строки тут юзать?

    Добавлено: PS: split строки по chr(0) - прикольно, не встречала =)
     
  11. Xalet

    Xalet Well-Known Member

    Регистрация:
    8 авг 2008
    Сообщения:
    410
    Симпатии:
    0
    Код (LotusScript):
        For i=0 To 25
    myString = replace(myString,Chr(65+i),"0")
    myString = replace(myString,Chr(97+i),"0")
    Next
    тогда уж как-то так.

    оффтоп: и где это такие мегазадачи несколько дней решаются?
     
  12. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    xalet
    Думаешь 50 реплейсов будет быстрее, чем один? :)
     
  13. Xalet

    Xalet Well-Known Member

    Регистрация:
    8 авг 2008
    Сообщения:
    410
    Симпатии:
    0
    не думаю =) не нравится идея с массивами... особенно если строки неопределенной длинны.

    Код (LotusScript):
    Dim myString As String
    myString = "fdваыпhg odыпвыпsifj oiosывпавыjgf iodsаыаjg io"
    Dim letter(51) As String
    For i=0 To 25
    letter(i)=Chr(65+i)
    letter(26+i)=Chr(97+i)
    Next
    myString=Replace(myString,letter,"0")
    Msgbox myString
     
  14. Medevic

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

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Проще на собаках @ReplaceSubstring(Поле; "a" : "b" : "c" : .. : "Z"; "0").

    :)
    Для split вместо chr(0) можно просто кавычки использовать - "".
     
  15. ToxaRat

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.046
    Симпатии:
    18
    а без циклов слабо? :)
     
  16. Darker

    Darker Гость

    Medevic
    если строка не в поле? Да и ограничения у собак...
     
  17. Medevic

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

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Через split как два пальца. :)
    Replace(Строка, Split("a b c ... Z"), "0")
     
  18. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    офф: а Split эффективней заполнения массива в цикле?
     
  19. Xalet

    Xalet Well-Known Member

    Регистрация:
    8 авг 2008
    Сообщения:
    410
    Симпатии:
    0
    явно удобнее, если понадобится еще какие символы позаменять, кроме латинских букв
     
  20. turumbay

    Регистрация:
    13 мар 2009
    Сообщения:
    625
    Симпатии:
    2
    кстати, про эффективность создания собако-списков через ":" ( типа "a":"b":"c" ) есть небольшое исследование: http://damienkatz.net/2004/11/formula-lang...rty-secret.html
    Правда не представляю реальной ситуации, когда именно это станет причиной тормозов.
     
Загрузка...

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