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

PaKo

Well-Known Member
29.04.2005
59
0
38
Минск
#1
Записываю в текстовый файл кучу и текста. Текст берется из коллекции документов. Если в документе пользователь записал несколько предложений без перевода строки, то в txt это записывается все одной строкой. Необходимо записывать в файл с форматированием, скажем по 75 символов на строку. Как это сделать?
P.S.
Записываю через Print#
 

Omh

Well-Known Member
Lotus team
04.07.2007
2 210
1
37
Латвиджа, Рига
#3
Что-то типа
Код:
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 символов слева.
 

PaKo

Well-Known Member
29.04.2005
59
0
38
Минск
#4
Omh в таком случае слова будут резаться в середине, будет некрасиво.

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

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

Omh

Well-Known Member
Lotus team
04.07.2007
2 210
1
37
Латвиджа, Рига
#6
Ну тогда посплитить по пробелу и уже из кусочков слеплять сторку, принимая во внимание длину слов ессно...
 
A

amigolinx

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

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

PaKo

Well-Known Member
29.04.2005
59
0
38
Минск
#9
Тут пришла вот еще такая идея:
1. завести dummydoc, на нем создать RTItem
2. потом в этот RTItem закидать нужный текст
3. писать в dummydoc.txt текст, достатый посредством RTItem.GetFormattedText(0, 75)...

Не знаю, как это будет выглядеть в плане быстродействия, но зато слова не режет на конце строки
Я именно п1 и п2 переписывал. В таком варианте текст бьется по 32К, и если на стыке параграфов есть новая строка, то при записи в файл он вырезается, что приводит к склеиванию строк. А для меня это критично.
Что касается п.3 - то необязательно GetFormattedText, записывалось в файл с длиной строки 75 и без применения данной функции, а вот когда стал писать сразу в файл форматирование и исчезло.
 
A

amigolinx

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

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

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

как вариант может попробовать исчо перебирать поочередно Values RtItem'a и после каждого принудительно тулить пустую строку если надо?
 
#11
Написанный пример кода в принципе как один из вариантов решения, но боюсь что на коллекции д-в в 700 штук, это отразится на быстродействии. Пытайюсь найти какую нить функцию автоформатирования. Нарыл "width" но так и не понял до конца её назначение.
Написанный пример кода в принципе - правильное решение. Не резать слова в середине - не проблема. Задачка почти школьная. Отрезаем очередные PART_LEN символов и strleftback от пробела(предполагаем что пробел там таки есть) принтом в файл. Отрезанный хвост цепляем обратно. Случай, когда на 75 символов нету пробелов, конечно клинический, но тоже обрабатываеца...
А пользовать RT-поле для такой задаче - это из пушки по воробьям. ( ну и скорости точно не прибавится )
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 435
351
homepage.mac.com
#12