разбор строки...

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

  1. Gor

    Gor Well-Known Member

    Регистрация:
    7 июн 2005
    Сообщения:
    517
    Симпатии:
    2
    Всем доброго время суток!
    Разбираю сообщения которые приходят мне в базу... обычное memo...
    Вот там в поле body следующее:

    wwwwwwwwww
    wwwwwwwwwwww
    wwwwwwwwwwwww

    три строки но они идут в столбик...и разделителей между строками нету...
    когда получаю поле body естественно мне вылазит одна строка wwwwww[][]wwwwwwwww[][]wwwwwwwwwww
    я так понимаю что [][] - это Chr(10) ?
    пытаюсь её разбирать... не выходит ничего...
    Попытался так получить хотя бы первую строку:
    Код (Text):
    jj = doc.body
    j1 = Strleft(jj,Chr(10))
    значение j1 - пустое(
    вроде бы все функции пересмотрел...никак придумать не могу как это реализовать...
    Неужели новую строку нельзя считать как разделитель? Или может ещё какие нибудь функции есть как нибудь ожет проще сделать можно*?
     
  2. morpheus

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

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    Милейший вы работаете с RT полем!
    jj = doc.body??!!!! вы что десь хатите получить???

    как мин. через массив, с Ubound(боди)


    Код (Text):
    Function ArrayExplode(var1 As Variant, str1 As String) As Variant
    ArrayExplode = NewArray()

    Dim rez1 As String, rez2 As String
    rez1 = var1
    aa:
    If Instr(rez1, str1)>0 Then
    rez2 = Strleft(rez1, str1)
    ArrayExplode = Fulltrim(Arrayappend(ArrayExplode, rez2))
    rez1 = Strright(rez1, str1)
    Goto aa
    Else
    ArrayExplode = Fulltrim(Arrayappend(ArrayExplode, rez1))
    End If
    End Function
    Код разбирает строку var1, на основаниии разделителя str1 и возвращает массив ArrayExplode, без повторений (Fulltrim)



    З,Ы, Я по два раза я по два раза, не повторяю не повторяю
     
  3. Constantin A Chervonenko

    Constantin A Chervonenko Well-Known Member

    Регистрация:
    30 май 2006
    Сообщения:
    1.288
    Симпатии:
    0
    Что интересно, у RT-полей item.Values не массив! По кр.мере вплоть до 5-ки так было, позже не смотрел.
    Но разбирать RT-values как строку - в любом случае бесполезно. item.Text - еще туда-сюда...
     
  4. morpheus

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

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    <!--QuoteBegin-Constantin A Chervonenko+3:11:2006, 08:53 -->
    <span class="vbquote">(Constantin A Chervonenko @ 3:11:2006, 08:53 )</span><!--QuoteEBegin-->Что интересно, у RT-полей item.Values не массив!
    [snapback]47041" rel="nofollow" target="_blank[/snapback]​
    [/quote]

    Хэлп 6,4,5

    а вот пример
    Код (Text):
    Dim doc As NotesDocument
    '...set value of doc...
    Dim item As NotesItem
    Set item = doc.GetFirstItem( "Subject" )
    Forall v In item.Values
    Messagebox( v )
    End Forall
     
  5. Gor

    Gor Well-Known Member

    Регистрация:
    7 июн 2005
    Сообщения:
    517
    Симпатии:
    2
    Для: Morpheus
    получаю я здесь строку...
    И что получается я не получу значение так - doc.body из RTF поля?????
    Раньше я прекрасно разбирал поле body как строку и получал через doc.body... единственно в ней были разделители - "+"
    так почему это бесполезно? Единственно что изменилось это разделитель...

    по разделителю +
    Код (Text):
            fb = doc.Body
    ss = Strleft(fb,"+",1) ' Номер изменения + статус + HW
    '       ss = Mid$(ss,1,Len(ss)-1)
    s1 = Strleft(ss," ",1) ' Номер изменения
    s2 = Strright(ss," ",1) ' статус + HW
    s3 = Strleft(s2," ",1) ' статус
    s4 = Strright(s2," ",1) ' HW
    s6 = Strright(fb,"+",1)' Причина Reject
    Какой смысл делать через массив? и почему именно НЕЛЬЗЯ её читать как я это делаю, ну и в принципе раньше делал?
    не ну если НАДО и это ОБЯЗАТЕЛЬНО .... то придётся
    у меня просто сообщение не будет никогда состоять из 100 строчек... максимум из 5 - ти..
     
  6. Gor

    Gor Well-Known Member

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

    jj = doc.body
    j1 = Strleft(jj,Chr(10)+Chr(13))

    в j1 записалась вся строка body как и в jj...видимо и такой разделитель не понял...

    мне кажется здесь вопрос не в том как прочитать RT поле, а как разобраться с разделителем,
    хотя может я и не прав...?!


    P.S. свой дублирующий топик удалить не смог...
     
  7. morpheus

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

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    а разделитель точно Char(10) , может 9(Tab)... или вообще какойто другой?

    может постараться выхватить символ разделителя???
     
  8. Gor

    Gor Well-Known Member

    Регистрация:
    7 июн 2005
    Сообщения:
    517
    Симпатии:
    2
    Для: Morpheus
    Текст в поле написан в столбик....
    в дебаггере поле выглядит так:
    wwwwww[][]wwwwwwwww[][]wwwwwwwwwww

    Вот я и не знаю что это за разделитель точно... предполагаю что Char(10)..

    Код (Text):
    может постараться выхватить символ разделителя???
    Возможно...но к сожалению не знаю как это сделать?
    пытался уже так...чтобы хотя бы первую строку отделить
    Код (Text):
    jj = doc.body
    j1 = Strleft(jj,Chr(10))
    А где нибудь полный список кодов символов взять можно?
     
  9. morpheus

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

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    2: Gor
    проверить InStr наличие Chr(10), есть подозрение что разделитель не пробел, не энтер, не таб...

    выделить []....
    Что делаете Вы... просто для себя Left в цикл, проходитесь и получаете все коды, всех символов в строке.... и всё... так Вы узнаете код и разделителя [] тоже

    А где нибудь полный список кодов символов взять можно? - Chr/Uni + Help там таблица символов
     
  10. Gor

    Gor Well-Known Member

    Регистрация:
    7 июн 2005
    Сообщения:
    517
    Симпатии:
    2
    Для: Morpheus
    Всё получилось спасибо!
    код действительно 10 - Chr(10), получил его с помощью Left и Asc()
    а разделитель банальный))) - Chr(10)+Chr(10)
     
Загрузка...

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