Как определить используемый разделитель строк

Тема в разделе "Lotus - Программирование", создана пользователем nvyush, 8 дек 2009.

  1. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Здравствуйте все!
    Столкнулся с такой проблемой. Есть документ, в нём рт-поле (многострочный текст). Беру этот текст и разбираю на строки. Подстроки "выкусываю" примерно так
    Код (Text):
    pos0 = 1
    pos1 = Instr(pos0, str, lineDelimiter)
    Do Until pos1 = 0
    resStr = Mid(str, pos0, pos1 - pos0)
    ...
    pos0 = pos1 + Len(lineDelimiter)
    pos1 = Instr(pos0, str, lineDelimiter)
    Loop
    На клиенте (8.0.1 на winxp) — всё нормально, при выполнении того же кода сервеным агентом не находятся разделители строк. Путём экспериментов выяснил, что когда код исполняется на клиенте разделитель строк cr+lf, когда на сервере (сервер на linux) — разделитель строк lf.
    Чтобы не зависеть от платформы решил определять разделить строк таким образом:
    Код (Text):
    Dim s As New NotesSession
    Dim db As NotesDatabase
    Set db = s.CurrentDatabase
    Dim doc As New NotesDocument(db)
    Dim rti As New NotesRichTextItem(doc, "Body")
    Call rti.AddNewline(1)
    lineDelimiter = rti.GetUnformattedText()
    Работает, но мне кажется, что можно как-то проще. Кто подскажет, что не так?
     
  2. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    ой-ей ;) ну про то где исполняется сессия мы уже флудили ;)
    можешь добавить условие в код и искать либо тот, либо иной разделитель, в зависимости от места выполнения сессии, но вдруг сервак будет виндошный! нужен независимый код.

    AddNewline(1) не только перенос строки добавляет, но и параграф.

    а вообще, думаю, достаточно будет искать chr(10) (LF), т.к. в любом случае он является последним. но CR (chr(13)) останется в строке, а он никому не нужен...

    а так попробуй?
    Код (Text):
    str = rti.GetUnformattedText() ' ричтекст с текстом в строку

    str = Replace(str, chr(13), "")
    strArray = split(str, chr(10))
    forall strArrayElement in strArray
    print cstr(strArrayElement)
    end forall
     
  3. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Akupaka
    Дело в том, что размер строки потенциально больше 32К. Так бы я загнал в многозначное поле и не парился, а тут приходится выкручиваться с рт. Думал рт-нафигатор использовать, но то ли я справку недокурил, то ли он для моей задачи не совсем подходит, в общем сделал "по старинке".
     
  4. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    а мой кусочек не проверял? мне просто интересно будет ли работать как надо... но пробовать лениво ))
     
  5. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    На вскидку будет работать 100%, но проверять тоже лень.
    Добавляемый AddNewLine параграф мне не мешает, GetUnformattedText его игнорирует. Кстати, обнаружил, что Text в данном случае возвращает пустую строку, а GetUnformattedText — разделитель строк.

    Я тут с прискорбием обнаружил, что всё мне придётся переписывать на Jave. Дело в том, что агент формирует xml, который потом отправляется post-запросом на сервер провайдера услуг. На клиенте использовал IE, но на сервере его нет. Кто-нибудь в курсе, как из Java отправлять post-запросы?
     
  6. K-Fire

    K-Fire Гость

    А может проще захардкодить разделитель? :rolleyes:
     
  7. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    :rolleyes: типа так?
    Код (Text):
    delim=|
    |
     
  8. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    lmike, думаю, должон быть
     
  9. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Было захардкодено, пока работало на клиенте. Теперь по соображениям безопасности должно обрабатываться серверным агентом.
    Вкратце задача такая: по данным из рт-поля формировать xml-запросы и постить их на сторонний сервер. В запросе есть системные учётные данные, которые пользователю видеть ну совсем не надо, поэтому они берутся из системного профиля, скрытого от пользователя. Соответственно, нужно делать это серверным агентом. Отсюда две проблемы: 1) разделитель строк (криво, но решил); 2) отправка пост-запроса.
    Из 2 плавно вытекает java, которую сейчас активно изучаю на sun.
    Почему в качестве разделителя не использовать что-нибудь другое - с разделителями строк нагляднее отображаются исходные данные.
     
  10. lmike

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

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    слабо понял о чём речь...
    что разделители не совпадают на платформах понял ;)
    не понятно:
    -где исполняется будет код
    -причём здесь POST - инициатором типа запроса является клиент, или речь идет о запроси с сервера к др. серверу
     
  11. K-Fire

    K-Fire Гость

    Да нет никакой разницы на клиенте или сервере. Захардкодить можно используя NotesSession.Platform.

    Т.е. если Platform="Windows/32" - то пишете один разделитель, если Linux/UNIX - то другой.
     
  12. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Нужно: по экшену в форме или на вью запустить серверного агента, который откроет нужный док, сгенерит xml и отправит его post'ом на сервер по известному url, затем полученный ответ сохранит в доке.
    Раньше это работало на ЛС на клиенте, но возникла задача отгородить пользователя от учётных данных. Поэтому решил использовать серверного агента. Но в этом случае создавать объект IE и постить из него не получится ;). Если не трудно, ткни, какие java-классы нужно пользовать для постинга.
     
  13. lmike

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

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    вот ссылки:
    http://www.java2s.com/Code/Java/Network-Pr...ol/HTMLPost.htm
    http://www.javaworld.com/javaworld/javatip...-javatip34.html
    во втором отправляется форма для CGI скрипта

    понимание процесса:
    http://www.devx.com/Java/Article/17679/1954

    вот (на всяк случай) с SSL:
    http://www.java-samples.com/java/POST-toHT...ple-program.htm

    в догонку - для "больших" объемов - луча юзать StringBuffer: http://java.sun.com/j2se/1.4.2/docs/api/ja...ringBuffer.html
     
  14. lmike

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

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
  15. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    lmike
    В принципе в сторону URLConnection я и копал, но не был уверен в правильности вектора. Спасибо за вагон примеров. Эх, это б всё на нашей, а не буржуйской мове, ну да ладно, разберусь. С меня +.
     
Загрузка...

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