Форматированная запись в Txt файл

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

  1. PaKo

    PaKo Well-Known Member

    Регистрация:
    29 апр 2005
    Сообщения:
    59
    Симпатии:
    0
    Записываю в текстовый файл кучу и текста. Текст берется из коллекции документов. Если в документе пользователь записал несколько предложений без перевода строки, то в txt это записывается все одной строкой. Необходимо записывать в файл с форматированием, скажем по 75 символов на строку. Как это сделать?
    P.S.
    Записываю через Print#
     
  2. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    left(), right()?
     
  3. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Что-то типа
    Код (Text):
    Dim i As Integer
    Dim Part As String
    Const PART_LEN = 75
    For i = 1 to Len(STR_FROM_DOC) step PART_LEN
    Part = Mid$(STR_FROM_DOC, i, PART_LEN)
    Print# Part
    End For
    +парочка проверок (если вдруг длина STR_FROM_DOC меньше, чем PART_LEN и т.д.)

    А можно действительно left'ить до упора по PART_LEN сиволов, обрезая каждый раз STR_FROM_DOC на PART_LEN символов слева.
     
  4. PaKo

    PaKo Well-Known Member

    Регистрация:
    29 апр 2005
    Сообщения:
    59
    Симпатии:
    0
    Omh в таком случае слова будут резаться в середине, будет некрасиво.

    Раньше я писал в RTItem, затем содержимое за раз записывал в файл, и все было ок. Но в таком случае у меня возникали проблемы по склеиванию строк на границах параграфов RTitem. Теперь я пишу запись в файл сразу без промежуточного документа.

    Написанный пример кода в принципе как один из вариантов решения, но боюсь что на коллекции д-в в 700 штук, это отразится на быстродействии. Пытайюсь найти какую нить функцию автоформатирования. Нарыл "width" но так и не понял до конца её назначение.
     
  5. Medevic

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

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Еще Format есть.
     
  6. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Ну тогда посплитить по пробелу и уже из кусочков слеплять сторку, принимая во внимание длину слов ессно...
     
  7. PaKo

    PaKo Well-Known Member

    Регистрация:
    29 апр 2005
    Сообщения:
    59
    Симпатии:
    0
    Medevic формат бесполезен.
     
  8. amigolinx

    amigolinx Гость

    Тут пришла вот еще такая идея:
    1. завести dummydoc, на нем создать RTItem
    2. потом в этот RTItem закидать нужный текст
    3. писать в dummydoc.txt текст, достатый посредством RTItem.GetFormattedText(0, 75)...

    Не знаю, как это будет выглядеть в плане быстродействия, но зато слова не режет на конце строки
     
  9. PaKo

    PaKo Well-Known Member

    Регистрация:
    29 апр 2005
    Сообщения:
    59
    Симпатии:
    0
    Я именно п1 и п2 переписывал. В таком варианте текст бьется по 32К, и если на стыке параграфов есть новая строка, то при записи в файл он вырезается, что приводит к склеиванию строк. А для меня это критично.
    Что касается п.3 - то необязательно GetFormattedText, записывалось в файл с длиной строки 75 и без применения данной функции, а вот когда стал писать сразу в файл форматирование и исчезло.
     
  10. amigolinx

    amigolinx Гость

    Чето я туплю, самое главное ж чего сказать хотел - если писать не Print'ом, а через NotesStream? Или кто в данной ситуации рубит текст по 32 кило - RTItem, Print или еще кто-то? Сейчас приду на машину, попробую...

    Да не, нормально пишет через NotesStream все содержимое РТ-поля по честному - все 126 с лишним тестовых кило отформатированного текста

    хм... и пустые строки на месте....

    как вариант может попробовать исчо перебирать поочередно Values RtItem'a и после каждого принудительно тулить пустую строку если надо?
     
  11. turumbay

    Регистрация:
    13 мар 2009
    Сообщения:
    625
    Симпатии:
    2
    Написанный пример кода в принципе - правильное решение. Не резать слова в середине - не проблема. Задачка почти школьная. Отрезаем очередные PART_LEN символов и strleftback от пробела(предполагаем что пробел там таки есть) принтом в файл. Отрезанный хвост цепляем обратно. Случай, когда на 75 символов нету пробелов, конечно клинический, но тоже обрабатываеца...
    А пользовать RT-поле для такой задаче - это из пушки по воробьям. ( ну и скорости точно не прибавится )
     
  12. lmike

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

    Регистрация:
    27 авг 2008
    Сообщения:
    6.083
    Симпатии:
    300
Загрузка...

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