17 Мая 2012, 13:34 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Wiki (База знаний), Правила форума, Как задать вопрос, Шаблон вопроса
 
   Начало   Помощь Поиск Войти Регистрация  
Страниц: [1] 2   Вниз
  Печать  
Автор Тема: статистика, количество символов без пробелов  (Прочитано 7854 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Vovans
Участник
***
Offline Offline

Сообщений: 48


WWW
« : 9 Октября 2007, 23:18 »

Как узнать кол-во символов в документе без пробелов?

Все подвернувшиеся редактоы/процессоры это умеют (скажeм, gedit, abiword etc), а вот монстр ОО...

тут был:

http://qa.openoffice.org/issues/show_bug.cgi?id=10356

и это читал:

Имеется элегантное решение - делаем "Найти все" для пробела, Закрыть, Сервис - Количество слов и получаем искомую величину

выход, но несколько неудобно Sad Никому не попадались более удобные решения этого вопроса? Вот бы макрос такой......... Sad((


* oo.png (14.83 Кб, 315x245 - просмотрено 2543 раз.)

* oo2.png (14.88 Кб, 227x256 - просмотрено 2551 раз.)
Записан


Vovans
Участник
***
Offline Offline

Сообщений: 48


WWW
« Ответ #1 : 9 Октября 2007, 23:20 »

на faq {Ссылка устарела. Новая ссылка: http://wiki.services.openoffice.org/wiki/RU/kb} тоже был.... Тишина Sad((
« Последнее редактирование: 24 Октября 2010, 14:28 от Санчо » Записан
rail
Раиль Алиев
Administrator
Участник
***
Offline Offline

Сообщений: 4117

Откуда: Москва


WWW
« Ответ #2 : 10 Октября 2007, 09:48 »

Еще не реализовано, но даже в формате ODF предусмотрено.
Записан
Vovans
Участник
***
Offline Offline

Сообщений: 48


WWW
« Ответ #3 : 10 Октября 2007, 19:54 »


да уж Wink)
« Последнее редактирование: 11 Октября 2007, 13:49 от Санчо » Записан
dr.Faust
Участник
***
Offline Offline

Сообщений: 1303

Откуда: Ростов-на-Дону

Я не ищу трудных путей - я их прокладываю.


« Ответ #4 : 10 Октября 2007, 22:32 »

Еще не реализовано, но даже в формате ODF предусмотрено.
А можно поподробнее в этом месте?
Записан
rail
Раиль Алиев
Administrator
Участник
***
Offline Offline

Сообщений: 4117

Откуда: Москва


WWW
« Ответ #5 : 12 Октября 2007, 10:22 »

Вот что предусмотрено для статистики текста в формате:
meta:page-count
meta:table-count
meta:draw-count
meta:image-count
meta:object-count
meta:ole-object-count
meta:paragraph-count
meta:word-count
meta:character-count
meta:row-count
meta:frame-count
meta:sentence-count
meta:syllable-count
meta:non-whitespace-character-count
Записан
Mike
Участник
***
Offline Offline

Сообщений: 7650


« Ответ #6 : 12 Октября 2007, 11:03 »

meta:non-whitespace-character-count
кажется это то что нужно
Записан
Vovans
Участник
***
Offline Offline

Сообщений: 48


WWW
« Ответ #7 : 14 Октября 2007, 16:54 »

Цитировать
кажется это то что нужно
И? Решения проблемы всё равно нет?
Записан
lemonjoe
Участник
***
Offline Offline

Сообщений: 3


« Ответ #8 : 13 Ноября 2009, 00:58 »

Макрос есть! Smile Мне предоставил его юзер по имени SkazochNick, за что выражаю ему персональное спасибо!
Инструкция:
Цитировать
Установка (ручная):

0. Запускай OO Writer
У меня 3.1, но должно быть так же все

1. Сервис->Макросы->Управление макросами->OpenOffice Basic
2. Макрос из "Мои макросы" -> Standart (выделить) -> Управление
3. Здесь "Новый модуль". Называй его как хочешь, можешь как я
"lettercounter". Выделяй его и "Редактировать"
4. Откроется редактор. Он дурной. Так что все что там есть сноси и
копипасть вот это:

=========================== скопипастить ниже =================================
REM  *****  BASIC  *****

Sub Main

' для Lemojoe:
' Имеется текст. Необходим вывод на информационной табличке статистических данных:
' количество знаков с пробелами, количество знаков без пробелов. Чтобы подсчет
' можно было произвести в любой момент работы над документом.

   Dim doc as object
   Dim controller as object
   Dim textviewcursor as object ' всякие объекты там... не важно
   Dim letters as String ' выделенная строка с текстом
   Dim gap as Integer ' число пробелов
   Dim cursign as String ' текущий значок
   dim break as Integer ' число переносов строк
   Dim i as Integer ' счетчик
   gap = 0
   break = 0

   ' получаем current document -> controller -> view cursor
   doc = ThisComponent
   controller = doc.getCurrentController()
   textviewcursor = controller.getViewCursor()


   letters = textviewcursor.getString ' забираем выделенный текст

   For i = 1 To Len(letters)

       cursign = Mid (letters, i, 1)

       If cursign = chr(32) Then ' Считаем пробелы
           gap = gap + 1 ' один да один - два

       ElseIf cursign = chr(10) Or cursign = chr(9)  Then ' Считаем переносы строк
           break = break + 1
       End If

   Next
   msgbox "Всего знаков: " & Len(letters) - break & chr(13) & "Знаков без пробелов: " & Len(letters) - gap - break

End Sub
=========================== скопипастить выше =================================

5. Файл->Сохранить/Закрыть
6. Теперь вставь текст в Writer, выдели его (Ctrl+A).
Сервис->Макросы->Выполнить макрос
7. В "Библиотека"->Standart->lettercounter(Main)-> Выполнить
Если есть необходимость, то макрос через Сервис-Настройки выносится на панель. Ему присваивается понятное имя и значок. Работает хорошо, единственное, для того, чтобы подсчитать количество символов, необходимо выделить кусок текста. Ну, или весь текст.  Very Happy
Записан
lemonjoe
Участник
***
Offline Offline

Сообщений: 3


« Ответ #9 : 13 Ноября 2009, 01:01 »

Да, еще забыл отметить: количество знаков в таблицах не считает. Если кто-нибудь сможет усовершенствовать макрос, его автор был бы только рад.  Smile
« Последнее редактирование: 13 Ноября 2009, 01:04 от lemonjoe » Записан
фывао
Гость
« Ответ #10 : 13 Ноября 2009, 02:01 »

Так работает везде:
Код:
Sub Main
Dok = ThisComponent
Poisk = Dok.createSearchDescriptor
Poisk.SearchRegularExpression = TRUE
Poisk.SearchString = "$" 'абзацы
A = Dok.findAll(Poisk).Count
Poisk.SearchString = "\n" 'обрыв строки
B = Dok.findAll(Poisk).Count
Poisk.SearchString = "\t" 'табуляция
C = Dok.findAll(Poisk).Count
Poisk.SearchString = " " 'пробел
D = Dok.findAll(Poisk).Count
p = chr(13)
msgbox cStr(A)+ " - абзацы "+p+cStr(B)+ " - обрывы строки "+p+cStr(C)+ " - табуляции "+p+cStr(D)+ " - пробелы " , 64
End Sub

Можно также из общего числа символов (которое можно либо сосчитать тем же способом что и выше, либо взять сразу Dok.CharacterCount) вычесть число пробелов.
Записан
Федор
Участник
***
Offline Offline

Сообщений: 17


« Ответ #11 : 14 Ноября 2009, 08:57 »

А кто-нибудь может скрестить оба макроса? К сожалению, я не умею программировать.
Записан
фывао
Гость
« Ответ #12 : 14 Ноября 2009, 10:31 »

Код:
Sub Main
Dok = ThisComponent
Poisk = Dok.createSearchDescriptor
Poisk.SearchRegularExpression = TRUE
Poisk.SearchString = "$" 'абзацы
A = Dok.findAll(Poisk).Count
Poisk.SearchString = "\n" 'обрыв строки
B = Dok.findAll(Poisk).Count
Poisk.SearchString = "\t" 'табуляция
C = Dok.findAll(Poisk).Count
Poisk.SearchString = " " 'пробел
D = Dok.findAll(Poisk).Count
p = chr(13)
E = Dok.CharacterCount 'всего символов
msgbox cStr(E)+ " - всего символов "+p+cStr(E-D)+ " - символов без пробелов "+p+cStr(A)+ " - абзацы "+p+cStr(B)+ " - обрывы строки "+p+cStr(C)+ " - табуляции "+p+cStr(D)+ " - пробелы " , 64
End Sub
Записан
lemonjoe
Участник
***
Offline Offline

Сообщений: 3


« Ответ #13 : 14 Ноября 2009, 13:20 »

фывао, ваш макрос не считает выделенную часть документа.  Sad К сожалению.
Записан
фывао
Гость
« Ответ #14 : 14 Ноября 2009, 13:32 »

Тогда вот:
Код:
Sub Main
Dok = ThisComponent
Poisk = Dok.createSearchDescriptor
Poisk.SearchRegularExpression = TRUE
Poisk.SearchAll = FALSE
Poisk.SearchString = "$" 'абзацы
A = Dok.findAll(Poisk).Count
Poisk.SearchString = "\n" 'обрыв строки
B = Dok.findAll(Poisk).Count
Poisk.SearchString = "\t" 'табуляция
C = Dok.findAll(Poisk).Count
Poisk.SearchString = " " 'пробел
D = Dok.findAll(Poisk).Count
p = chr(13)
Poisk.SearchString = "." 'все символы
E = Dok.findAll(Poisk).Count 'всего символов
msgbox cStr(E)+ " - всего символов "+p+cStr(E-D)+ " - символов без пробелов "+p+cStr(A)+ " - абзацы "+p+cStr(B)+ " - обрывы строки "+p+cStr(C)+ " - табуляции "+p+cStr(D)+ " - пробелы " , 64
End Sub
Записан
smaharbA
Участник
***
Offline Offline

Сообщений: 341

Откуда: Екатеринбург


« Ответ #15 : 14 Ноября 2009, 14:04 »

колонтитулы и прочие блоки и врезки как считать ?
Записан
фывао
Гость
« Ответ #16 : 14 Ноября 2009, 14:11 »

Не знаю...
Последний вариант тоже не считает символы в выделенном тексте, несмотря на SearchAll=FALSE (как этим пользоваться?).
Тогда вот вариант.
Код:
Sub Main
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())
NDok = StarDesktop.loadComponentFromURL( "private:factory/swriter", "_blank", 0, Array())
Ndocument   = NDok.CurrentController.Frame
Dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "SelectedFormat"
args1(0).Value = 1
dispatcher.executeDispatch(Ndocument, ".uno:ClipboardFormatItems", "", 0, args1())

Poisk = NDok.createSearchDescriptor
Poisk.SearchRegularExpression = TRUE
Poisk.SearchString = "$" 'абзацы
A = NDok.findAll(Poisk).Count
Poisk.SearchString = "\n" 'обрыв строки
B = NDok.findAll(Poisk).Count
Poisk.SearchString = "\t" 'табуляция
C = NDok.findAll(Poisk).Count
Poisk.SearchString = " " 'пробел
D = NDok.findAll(Poisk).Count
p = chr(13)
E = NDok.CharacterCount 'всего символов
msgbox cStr(E)+ " - всего символов "+p+cStr(E-D)+ " - символов без пробелов "+p+cStr(A)+ " - абзацы "+p+cStr(B)+ " - обрывы строки "+p+cStr(C)+ " - табуляции "+p+cStr(D)+ " - пробелы " , 64
NDok.setModified(FALSE)
NDok.close(TRUE)
End Sub
Записан
фывао
Гость
« Ответ #17 : 14 Ноября 2009, 16:37 »

Вот ещё вариант, который работает с выделенным текстом (правда, выделен должен быть один участок, а иначе символы будут сосчитаны от начала первого до конца последнего).
Код:
Dim Dok, Tx, Poisk, VK As Object

Sub Main
Dok = ThisComponent
Tx = Dok.Text
Poisk = Dok.createSearchDescriptor
Poisk.SearchRegularExpression = TRUE
VK = Dok.CurrentController.ViewCursor
' Poisk.SearchString = "\t" 'табуляция
' C = PoiskV
Poisk.SearchString = " " 'пробел
D = PoiskV
Poisk.SearchString = "." 'все символы
E = PoiskV 'всего символов
p = chr(13)
msgbox cStr(E)+ " - всего символов "+p+cStr(E-D)+ " - символов без пробелов " , 64 '+p+cStr(C) + " - табуляции " , 64
End Sub
'------------------------------------------------------
Function PoiskV As Integer
Dim k As Integer
oT = Tx.createTextCursorByRange(VK.Start,FALSE)
oK = Tx.createTextCursorByRange(VK.End,FALSE)
oT = Dok.findNext(oT.End, Poisk)
If isNull(oT) then
PoiskV=0
Exit Function
Endif
While not isNull(oT) and Tx.compareRegionEnds(oT,oK)>0
oT = Dok.findNext(oT.End, Poisk)
k=k+1
Wend
PoiskV=k
End Function
« Последнее редактирование: 14 Ноября 2009, 17:04 от фывао » Записан
smaharbA
Участник
***
Offline Offline

Сообщений: 341

Откуда: Екатеринбург


« Ответ #18 : 14 Ноября 2009, 17:26 »

а чем плох найти+заменить ?
Записан
smaharbA
Участник
***
Offline Offline

Сообщений: 341

Откуда: Екатеринбург


« Ответ #19 : 14 Ноября 2009, 17:28 »

по поводу выделенного - селект это объект и в нем можно искать все
Записан
Федор
Участник
***
Offline Offline

Сообщений: 17


« Ответ #20 : 14 Ноября 2009, 17:38 »

Если в документе только текст, то все гут. Если еще и таблица или просто в таблице, то:

Ошибка времени выпoлнeния BASIC.
Вызвано исключение
Type: com.sun.star.lang.IllegalArgumentExceptIOn
           Message: .

Это я о последнем коде.

Код в 12-ом посте (без выделения) работает как часы. В принципе, количество знаков в выделении мне нужно очень редко. Так что огромное спасибо, уже использую.
« Последнее редактирование: 14 Ноября 2009, 17:42 от Федор » Записан
smaharbA
Участник
***
Offline Offline

Сообщений: 341

Откуда: Екатеринбург


« Ответ #21 : 14 Ноября 2009, 17:49 »

есть чарсетС, конечно в МСО несколько иначе, но и тут есть
Записан
фывао
Гость
« Ответ #22 : 14 Ноября 2009, 18:32 »

smaharbA, если есть немного времени, помогите разобраться, пожалуйста.

Вот по теме: http://www.oooforum.org/forum/viewtopic.phtml?t=40529&highlight=searchall+selection
Почему-то не работает макрос, который приведён на том же форуме: http://www.oooforum.org/forum/viewtopic.phtml?t=20103&highlight=replaceall+selection (точнее, работает, но если искать абзацы - то не работает). Ещё тут пример: http://www.pitonyak.org/AndrewMacro.odt пункт 7.14.2)

В общем, всё что у меня получилось - выше приведено, и больше ничего не могу.
« Последнее редактирование: 14 Ноября 2009, 18:35 от фывао » Записан
smaharbA
Участник
***
Offline Offline

Сообщений: 341

Откуда: Екатеринбург


« Ответ #23 : 14 Ноября 2009, 18:54 »

т.е. не работает ?
Код:
P = ThisComponent.createSearchDescriptor
P.SearchRegularExpression = TRUE
P.SearchString = "$"
msgbox ThisComponent.findAll(p).count

в целом мене ООо интересен только для флуда ))) (правдо)
(и несколько из насколько то профессионального интереса, он есть как печатная машинка на некоторых (ранее на привелигирующих) машинках)

не поддерживаемое мнение мое - конструктора объектности ООо злоупотребляют анашой (холивар) )))

в данное время не имею возможности обдумать проблему
(правдо вот после такого - должны сказать - пустобрех Sad )
« Последнее редактирование: 14 Ноября 2009, 19:03 от smaharbA » Записан
Федор
Участник
***
Offline Offline

Сообщений: 17


« Ответ #24 : 14 Ноября 2009, 19:17 »

Что такое "привелигирующих". Вообще, о чем был предыдущий пост?
У нас язык общения русский или я не по адресу попал?
Почему каким-то диким белым стихом?
Все же, кто может выложить код, работающий для выделения без ошибки?
Записан
smaharbA
Участник
***
Offline Offline

Сообщений: 341

Откуда: Екатеринбург


« Ответ #25 : 14 Ноября 2009, 19:49 »

зачем ?
Записан
Федор
Участник
***
Offline Offline

Сообщений: 17


« Ответ #26 : 14 Ноября 2009, 21:16 »

Заканчивай флуд, остроумный.
Записан
Nick
Administrator
Участник
***
Offline Offline

Сообщений: 1971

Откуда: Россия, Москва

Николай Гарбуз


WWW
« Ответ #27 : 14 Ноября 2009, 22:06 »

2 Федор:

smaharbA часто страдает неадекватной реакцией и ответами не в тему. Не обращайте на него внимания.
Записан
Nick
Administrator
Участник
***
Offline Offline

Сообщений: 1971

Откуда: Россия, Москва

Николай Гарбуз


WWW
« Ответ #28 : 14 Ноября 2009, 22:07 »

зачем ?

Когда говоришь, что думаешь, думай, что говоришь!
Записан
smaharbA
Участник
***
Offline Offline

Сообщений: 341

Откуда: Екатеринбург


« Ответ #29 : 15 Ноября 2009, 10:49 »

Nick - хоть один ответ не по теме Вы лично встречали ? Другое дело в понимании
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  

Copyright © 2002-2010 Infra Resource Powered by SMF 1.1.15 | SMF © 2006, Simple Machines
CC0