Помогите с поиском текста во Writer

Автор DrownedMan, 13 августа 2012, 14:54

0 Пользователи и 1 гость просматривают эту тему.

DrownedMan

Доброго времени суток.
У меня следующий вопрос:

я скрещиваю 1С  и OpenOffice - делаю печать.

С помощью createSearchDescriptor() и findFirst() нахожу в макете теги для дальнейшей замены на нужный текст.

Но вот возникла нужда определить позицию найденного текста.

Ищу с помощью следующего кода:

//xDocument - это документ OpenOffice

xSearchDescr = xDocument.createSearchDescriptor();
xSearchDescr.SearchString = ИдентификаторОбласти;
xSearchDescr.SearchCaseSensitive = Ложь;
xSearchDescr.SearchWords = Истина;
xFound = xDocument.findFirst(xSearchDescr);

ПозицияНачалаОбласти = xFound.End;

В 1С ПозицияНачалаОбласти - это COM Объект - можно ли как-то вернуть позицию цифрами?????
Имеется ввиду, можно ли вернуть не объект, коллекцию, выделенную область, а позицию - например область начинается с 150 символа или на 10 строке документа.
Или как-то еще.


Hasim

Цитата: Yakov от 13 августа 2012, 21:50
http://codesnippets.services.openoffice.org/Writer/Writer.CountWordsOfTheSelectedTextWithOoRexx.snip
Огромный недостаток этого способа: нужно использовать некий язык программирования ooRexx, которого почти никто не знает.

Yakov

Цитата: Hasim от 13 августа 2012, 21:24некий язык программирования ooRexx
Для начала заменить знаки ~ на .  и попробовать необходимый участок кода из примера использовать в 1С.
Это же только пример...

Hasim

Не тот пример, его название:
Count words of the selected text with ooRexx = Подсчет слов выделенного текста с (помощью) ooRexx.

А нужно найти положение искомого слова в тексте, т.е. которое оно по счету с начала текста.
Это совсем другая задача.


DrownedMan

Цитата: Hasim от 13 августа 2012, 22:38найти положение искомого слова в тексте, т.е. которое оно по счету с начала текста.
Именно над этим и бьюсь.

Yakov

#6


-- get access to the current selection
x_Model = x_Document.XModel
s_Container = x_Model.getCurrentSelection()


if s_Container <> NULL then

  -- if at least one selection has been made:
 
  -- get an index list of the selection
  x_IndexAccess = s_Container.XIndexAccess
  size = x_IndexAccess.getCount()

  -- iterate trough the selections and retrieve the selected strings
  --
  do counter = 1 to size
     s_text = x_IndexAccess.getByIndex(counter - 1)
     x_TextRange = s_text.XTextRange

     wordstring = x_TextRange.getString()

   

  end
end


counter - это и есть индекс от начала области выделения

Hasim

#7
Цитата: Yakov от 14 августа 2012, 10:03counter - это и есть индекс от начала области выделения
Фигня!
Очень внимательно прочитайте и переведите полные комментарии в оригинале, а не "обрезанные", как в последнем сообщении.

С помощью createSearchDescriptor и findFirst вы не получите нужного вам положения искомого текста в документе. findFirst может вернуть только Position (Position.X и Position.Y в пикселях), а оно вам надо?

DrownedMan

Цитата: Hasim от 14 августа 2012, 10:39С помощью createSearchDescriptor и findFirst вы не получите нужного вам положения искомого текста в документе. findFirst может вернуть только Position (Position.X и Position.Y в пикселях), а оно вам надо?

хм.....Может быть это и поможет
если к примеру я искал "Пример1" и "Пример2" в тесте, таким образом можно определить что в тексте находится раньше или выше?

Hasim

Я бы лучше воспользовался "прямым перебором" вроде того, который описан здесь Перебор символов текста текстовым и видимым курсорами

Цитировать
— Лёлик, это же неэстетично...
— Зато дёшево, надежно и практично!

DrownedMan

Всем спасибо за подсказки
Выкружил следующим образом:

с помощью xDocument.Text.getText().String получил текст документа, а далее средствами 1С определился с позицией искомого слова с строке.