Página 1 de 1

Contar letras palabras parrafos en slides

NotaPublicado: Dom Mar 06, 2016 4:51 am
por arivas_2005
Saludos

Estoy intentando calcular la cantidad de letras, palabras y párrafos que tiene cada contenedor de texto en una diapositiva.
He buscado en Internet y aún no encuentro ejemplos de como hacerlo.
Hasta el momento cuento con el siguiente código
Código: Seleccionar todo   Expandir vistaContraer vista
Sub Revisando_texto_letras_palabras_Y_parrafos_Slides
 
  '----------------------------------
   'Globalscope.BasicLibraries.LoadLibrary( "MRILib" )
 
  numslides = Thiscomponent.getDrawPages.Count
 
  if numslides>0 then
   
  '------------------------ Slide 1       
       oDraw = ThisComponent.Drawpages.getByIndex(0)      
      numshapes=oDraw.getCount()
       
         For i = 0 To oDraw.getCount() - 1      
             oObj = oDraw.getByIndex(i)
             tiposhape=oObj.getShapeType                
             select1=Thiscomponent.CurrentController.select(oObj)   
             if tiposhape="com.sun.star.presentation.TitleTextShape" or tiposhape="com.sun.star.presentation.OutlinerShape" then
                
             '   mri oObj.text.createenumeration
                'mri oText.text
               oText = oObj.getText()
              ' stop
               oCurs = oText.createTextCursor()
                     
               ParagraphEnum = oText.createEnumeration
                  While ParagraphEnum.hasMoreElements
                     Paragraph = ParagraphEnum.nextElement
                    
                     msgbox  Paragraph.getstring
                       
                     oCurs.gotoRange(Paragraph.Anchor,true) ' supondo que seleccionando el texto dentro del shape se podría
                                                                            '.--... solo un intento
                       
                     PortionEnum = Paragraph.createEnumeration 
         ' esto para saber la fuente por si usan distintas en el mismo parrafo, taqmbien lo necesito
                        While PortionEnum.hasMoreElements
                           Portion = PortionEnum.nextElement
                           If Portion.String <> "" Then
                              FontName = Portion.CharFontName
                            '  Print FontName
                           End if
                        Wend
                  Wend               '
             endif
         next
        endif
end sub


Tal vez ya tenga algo para calcular los párrafos de cada contenedor pero no tengo ni idea de como contar las palabras y las letras.
Mis agradecimientos anticipados por la colaboración

Re: Contar letras palabras parrafos en slides

NotaPublicado: Dom Mar 06, 2016 11:52 am
por SLV-es
No he analizado profundamente el código. Por dar ideas:
  • Dado que puedes cargar el contenido de un contenedor en un objeto oText
    • Cargar el texto en una variable, en la que puedes sustituir carácteres como , . intro por espacios, luego dos o más espacios por espacio, y luego contar el número de espacios. Con eso obtendrás las palabras
    • Cargar el texto en una variable, en la que puedes eliminar los espacios e intros y la longitud del texto será el número de letras, con signos de puntuación incluídos.

Re: Contar letras palabras parrafos en slides

NotaPublicado: Dom Mar 06, 2016 3:30 pm
por arivas_2005
Saludos.
Omití citar que necesito contar las lineas del contenedor y las lineas por cada parrafo como parte de la tarea de revisar los contenidos por cada slide.
Nuevamente gracias por sus orientaciones y soluciones

Re: Contar letras palabras parrafos en slides

NotaPublicado: Mar Mar 08, 2016 12:23 am
por fornelasa
arivas_2005 escribió:Estoy intentando calcular la cantidad de letras, palabras y párrafos que tiene cada contenedor de texto en una diapositiva.

No digo que lo que sigue lo resolverá porque influyen muchos puntos, los espacios de más, las comas ..... etc, pero pudierá ser una buena guia:
De acuerdo al archivo que envias nota como en el segundo "parrafo" tienes espacios de mas .....
Código: Seleccionar todo   Expandir vistaContraer vista
Sub Revisando_texto_letras_palaabras_Y_parrafos
  Dim i As Long
  Dim oDraw
  Dim oObj
  numslides = Thiscomponent.getDrawPages.Count
  if numslides>0 then
'------------------------ Slide 1       
       oDraw = ThisComponent.Drawpages.getByIndex(0)      
      numshapes=oDraw.getCount()
         For i = 0 To oDraw.getCount() - 1      
             oObj = oDraw.getByIndex(i)
             tiposhape=oObj.getShapeType                
             select1=Thiscomponent.CurrentController.select(oObj)   
             if tiposhape="com.sun.star.presentation.TitleTextShape" or tiposhape="com.sun.star.presentation.OutlinerShape" then
               oText = oObj.getText()
            oCurs = oText.createTextCursor()
               ParagraphEnum = oText.createEnumeration
                numero = 1 
                  While ParagraphEnum.hasMoreElements
                     Paragraph = ParagraphEnum.nextElement
                     numero = numero + 1
                     texto = Paragraph.GetString
                     msgbox  Paragraph.getstring
                     msgbox "letras " & len(Replace(texto, " ", ""))'len(texto)
                     msgbox "Palabras " & (len(texto) - len(Replace(texto, " ", ""))+1)
                     oCurs.gotoRange(Paragraph.Anchor,true) 'False)
                  PortionEnum = Paragraph.createEnumeration
                        While PortionEnum.hasMoreElements
                           Portion = PortionEnum.nextElement
                           If Portion.String <> "" Then
                              FontName = Portion.CharFontName
                            '  Print FontName
                           End if
                        Wend
                  Wend               '
             endif
         next
        endif
msgbox "Parrafos " & numero
end sub


Es claro que para obtener mejores resultados debemos hacer más codigo suprimiendo las comas, los puntos los guiones si los hubiera, en una estructura ideal (sin signos de puntuación por ejemplo) mira como si cuadra:
Insisto es una guía, lo demás es facil de hacer :roll:
Tambien por ejemplo, ¿los espacios deben contar como letra, las comas para el largo del texto ....?
Saludos, Federico.

Re: Contar letras palabras parrafos en slides

NotaPublicado: Mar Mar 08, 2016 5:12 am
por mauricio
arivas_2005 escribió:Estoy intentando calcular la cantidad de letras, palabras y párrafos que tiene cada contenedor de texto en una diapositiva.

Toma en cuenta que casi cualquier objeto en Impress puede llegar a ser un contenedor de texto, si no quieres todos, tienes que discriminar su tipo...

Prueba con:
Código: Seleccionar todo   Expandir vistaContraer vista
Sub Main
   REM util = createUnoService("org.universolibre.EasyDev")
   doc = ThisComponent
   dp = doc.getDrawPages()
   
   doc_tmp = new_doc()
   
   For i = 0 To dp.getCount() - 1
      page = dp.getByIndex(i)
      For j = 0 To page.getCount() - 1
         obj = page.getByIndex(j)
         If obj.supportsService("com.sun.star.drawing.Text") Then
            MsgBox get_info(doc_tmp, obj)         
         End If
      Next j
   Next i
   
   doc_tmp.dispose()
   
End Sub


Function new_doc() As Object
   Dim args(0) As New "com.sun.star.beans.PropertyValue"

    args(0).Name = "Hidden"
    args(0).Value = True
    new_doc = StarDesktop.loadComponentFromURL("private:factory/swriter", "_default", 0, args)
End Function


Function get_info(doc, shape) As String
   doc.getText().setString(shape.String)
   'MsgBox shape.getShapeType() & Chr(10) & shape.String & Chr(10) & Chr(10) & doc.getText().getString()
   Wait 300
   data = doc.getDocumentProperties().DocumentStatistics
   info = "Objeto: " & shape.getShapeType() & Chr(10)
   If UBound(data) = 7 Then
      info = info & "Parrafos: " & data(4).Value & Chr(10)
      info = info & "Palabras: " & data(5).Value & Chr(10)
      info = info & "Letras: " & data(6).Value & Chr(10)
      info = info & "Letras sin espacios: " & data(7).Value
   End If
   get_info = info
End Function