Список форумов Форум Libreoffice

Форум Libreoffice

Добро пожаловать на Форум Libreoffice!
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

English French German Italian Portuguese Russian Spanish
Перебор символов текста текстовым и видимым курсорами

 
Начать новую тему   Ответить на тему    Список форумов Форум Libreoffice -> Basic
Предыдущая тема :: Следующая тема  
Автор Сообщение
vanya



Репутация: 0    

Зарегистрирован: 02.08.2011
Сообщения: 17

СообщениеДобавлено: Чт Сен 29, 2011 9:43 am    Заголовок сообщения: Перебор символов текста текстовым и видимым курсорами Ответить с цитатой

Задался целью посмотреть, как перебрать все символы документа с помощью текстового и видимого курсоров и посмотреть их ASCII коды.
Вот этот макрос перебирает символы текста попарно и выводит их ASCII коды, предыдущей пары и текущей.
Код:
Sub tkvk
 oDoc=ThisComponent
 TK = oDoc.getText().createTextCursor()

 VK = oDoc.getCurrentController().getViewCursor
 VK.gotoRange(TK, False)

 oText = ThisComponent.getText()

For i=0 To Len(oText.String)
 TK.goLeft(1,0)
 VK.goLeft(1,0)

 TK.goRight(2,1)
 VK.goRight(2,1)

 tks=TK.String   'VK.String
 tksn1=Asc(Mid(tks,1,1))
 tksn2=Asc(Mid(tks,2,1))

   MsgBox tks01 & "  " & tks02 & "  <-old = ASCII = new->  " & tksn1 & "  " & tksn2

tks0=TK.String   'VK.String
tks01=Asc(Mid(tks0,1,1))
tks02=Asc(Mid(tks0,2,1))

Next i
End Sub




И получается, что конец абзаца - символ с кодом 13, а пустой абзац - 2 символа с кодами 13 и 10. И почему-то видимый курсор налезает на 1 символ следующей строки.

И вопрос (сам пока не додумался), как вместо перебора по 2 символа, перебирать по одному?

И в таблице не работает, а хотелось бы.

Тестовый файл прилагаю http://ifolder.ru/26046106
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
RFJ



Репутация: +1    

Зарегистрирован: 02.08.2011
Сообщения: 59

СообщениеДобавлено: Чт Сен 29, 2011 12:32 pm    Заголовок сообщения: Ответить с цитатой

vanya писал(а):
как вместо перебора по 2 символа, перебирать по одному?


Можно так:

Код:
Sub tkvk
 oDoc=ThisComponent
 TK = oDoc.getText().createTextCursor()

 VK = oDoc.getCurrentController().getViewCursor
 VK.gotoRange(TK, False)

 oText = ThisComponent.getText()

For ns=0 To (Len(oText.String))

 TK.goRight(ns,0)
 VK.goRight(ns,0)

 TK.goRight(2,1)
 VK.goRight(2,1)

 TK.goLeft(1,1)
 VK.goLeft(1,1)

 VKstr=VK.getString()

If Len(VKstr)=1 Then
 MsgBox VKstr & "   ASCII = " & Asc(VKstr)
ElseIf Len(VKstr)=2 Then
 MsgBox VKstr & "   ASCII = " & Asc(Mid(VKstr,1,1)) & " + " & Asc(Mid(VKstr,2,1))
ElseIf Len(VKstr)=0 Then
 MsgBox "Len String = 0"
Else
 MsgBox "Len String > 2"
End If

TK.gotoStart(False)
VK.gotoStart(False)

Next ns
End Sub
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
vanya



Репутация: 0    

Зарегистрирован: 02.08.2011
Сообщения: 17

СообщениеДобавлено: Чт Сен 29, 2011 4:26 pm    Заголовок сообщения: Ответить с цитатой

RFJ, спасибо.

Получается так, что конец любого абзаца - 2 символа ascii = 13 +10, пустой или не пустой, все равно.

Кстати, там в конце текста есть курсор с длиной символа = 0 !?

С таблицей буду разбираться.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
neft



Репутация: 0    

Зарегистрирован: 19.10.2011
Сообщения: 28

СообщениеДобавлено: Пт Янв 20, 2012 12:25 pm    Заголовок сообщения: Ответить с цитатой

Этот способ отображает и текст в текстовых полях (при длине строки Len(VKstr)>2).
Немного изменен код макроса:
Код:
Sub tkvk
 oDoc=ThisComponent
 TK = oDoc.getText().createTextCursor()

 VK = oDoc.getCurrentController().getViewCursor
 VK.gotoRange(TK, False)

 oText = ThisComponent.getText()

For ns=0 To (Len(oText.String))

 TK.goRight(ns,0)
 VK.goRight(ns,0)

 TK.goRight(2,1)
 VK.goRight(2,1)

 TK.goLeft(1,1)
 VK.goLeft(1,1)

 VKstr=VK.getString()

If Len(VKstr)=1 Then
 MsgBox VKstr & "   ASCII = " & Asc(VKstr)
ElseIf Len(VKstr)=2 Then
 MsgBox VKstr & "   ASCII = " & Asc(Mid(VKstr,1,1)) & " + " & Asc(Mid(VKstr,2,1))
ElseIf Len(VKstr)=0 Then
 MsgBox "Len String = 0"
ElseIf Len(VKstr)>2 Then      ' показывает текст в TextFileld
 MsgBox VKstr & "  > 2"
Else
 MsgBox "???"
End If

TK.gotoStart(False)
VK.gotoStart(False)

Next ns
End Sub


Файл можно взять тут: http://ifolder.ru/28211430

Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов Форум Libreoffice -> Basic Часовой пояс: GMT
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2005 phpBB Group
Вы можете бесплатно создать форум на MyBB2.ru, RSS