acad hispano
¿Quieres reaccionar a este mensaje? Regístrate en el foro con unos pocos clics o inicia sesión para continuar.

Separar Linea de Textos por Palabras

3 participantes

Ir abajo

Separar Linea de Textos por Palabras Empty Separar Linea de Textos por Palabras

Mensaje por saulo2016 Jue Ago 03, 2023 7:02 pm

Hola a Todos.

Tengo una Consulta, ¿Alguien tendrá o sabrá de algun Lisp que haga lo siguiente....

Diagmos que es un renglon con una frase cualquiera con varias palabras, y necesito separar todas las palabras, que sean independientes todas las palabras pero que siga viendose como un renglon o sea que siga siendo un renglon pero compuesta por palabras independientes.

Ojalá y sea clara la pregunta.



Saludos
saulo2016
saulo2016

Mensajes : 210
Fecha de inscripción : 17/03/2016
Edad : 58
Localización : Monterrey, Nuevo León, Mexico

Volver arriba Ir abajo

Separar Linea de Textos por Palabras Empty Re: Separar Linea de Textos por Palabras

Mensaje por supertxull Miér Ago 16, 2023 4:59 pm

saulo2016 escribió:Hola a Todos.

Tengo una Consulta, ¿Alguien tendrá o sabrá de algun Lisp que haga lo siguiente....

Diagmos que es un renglon con una frase cualquiera con varias palabras, y necesito separar todas las palabras, que sean independientes todas las palabras pero que siga viendose como un renglon o sea que siga siendo un renglon pero compuesta por palabras independientes.

Ojalá y sea clara la pregunta.

Saludos
Prueba con esta función:
Código:
(DEFUN c:trimwords (/ txt)
  (IF (SETQ txt (SSGET "_:L" '((0 . "*TEXT"))))
    (FOREACH tex (VL-REMOVE-IF 'LISTP (MAPCAR 'CADR (SSNAMEX txt)))
      (ENTMOD
 (MAPCAR
  '(LAMBDA (b)
     (IF (MEMBER (CAR b) '(1 3))
       (CONS (CAR b) (VL-STRING-TRANSLATE " " "\n" (CDR b)))
       b
     )
   )
  (ENTGET tex)
 )
      )
    )
  )
  (PRINC)
)

supertxull

Mensajes : 25
Fecha de inscripción : 21/03/2016

Volver arriba Ir abajo

Separar Linea de Textos por Palabras Empty Re: Separar Linea de Textos por Palabras

Mensaje por saulo2016 Vie Ago 18, 2023 9:19 pm

Acabo te probarlo, y resulta que lo que hace es eliminar los espacios entre palabras, pero no es eso lo que necesito, lo que necesito es que una frase de varias palabras me las separe para que se conviertan en palabras sueltas y asi editar no la frase si no que pueda editar las palabras por separado.



saulo2016
saulo2016

Mensajes : 210
Fecha de inscripción : 17/03/2016
Edad : 58
Localización : Monterrey, Nuevo León, Mexico

Volver arriba Ir abajo

Separar Linea de Textos por Palabras Empty Re: Separar Linea de Textos por Palabras

Mensaje por Gerardo Calvo Vie Ago 18, 2023 10:46 pm

Hola Saulo

Cuando consultaste estuve peloteando el códdigo que te adjunto pero me pegué en una pequeña diferencia de anchos entre lo que representa autocad y lo que lanza la función textbox. Luego no se puede medir el ancho de una cadena con un espacio con textbox, así que le meti el truco de restarle ".." a ". .", que tampoco me deja muy satisfecho.

En fin, quizás no lo necesites tan exacto y te funcione, o al menos podás seguir a partir de esto buscando algo más exacto.

Código:
(defun c:saulo ( / lent L spw pal wesp l1 w pt)
   (if (= (cdr (assoc 0 (setq lent (vl-remove-if '(lambda(A)(member (car A) '(11 72 73)))(entget (car (entsel))))))) "TEXT")
      (progn
         (setq L (vl-string->list (cdr (assoc 1 lent)))
               spw (-
                      (apply '+ (reverse (mapcar 'car (textbox (subst '(1 . ". .") (assoc 1 lent) lent)))))
                      (apply '+ (reverse (mapcar 'car (textbox (subst '(1 . "..") (assoc 1 lent) lent)))))
                  )
         )
         (while L
            (while (and L (/= (car L) 32) (/= (car L) 9) )
               (setq pal (cons (car L) pal)
                     L (cdr L)
               )
            )
            (setq wesp 0.)
            (while (and L (or (= (car L) 9) (= (car L) 32)))
               (setq wesp (+ wesp spw)
                     L (cdr L)
               )
            )
            (setq pal   (vl-list->string (reverse pal))
                  l1      (subst (cons 1 pal) (assoc 1 lent) lent)
                  w      (+   (apply '+ (reverse (mapcar 'car (textbox l1)))) wesp)
                  pt      (assoc 10 lent)
                  lent   (subst (mapcar '+ pt (list 0 w 0. 0.)) pt lent)
            )
            (if pal (entmake l1))
            (setq pal nil)
         )
         (entdel (cdr (assoc -1 lent)))
      )
   )
)

Como verás así a como está solo funciona con textos horizontales, pero no es difícil adaptarlo en caso de que hayan textos rotados, sería solo que en vez de ir sumando el ancho w a la coordenada x se calcule el nuevo punto con un polar, con distancia w y el angulo del texto.

En fin, probalo y me comentás a ver si te sirve y si te puedo ayudar en algo más, con todo gusto.

Gerardo Calvo

Mensajes : 46
Fecha de inscripción : 29/10/2019

A robierzo le gusta esta publicaciòn

Volver arriba Ir abajo

Separar Linea de Textos por Palabras Empty Re: Separar Linea de Textos por Palabras

Mensaje por saulo2016 Jue Ago 31, 2023 7:53 pm

Excelente amigo Gerardo Calvo.....exactamente esto era lo que necesitaba....

Muchas Gracias Amigo.....eres un crack!!!




Saludos
saulo2016
saulo2016

Mensajes : 210
Fecha de inscripción : 17/03/2016
Edad : 58
Localización : Monterrey, Nuevo León, Mexico

A Gerardo Calvo le gusta esta publicaciòn

Volver arriba Ir abajo

Separar Linea de Textos por Palabras Empty Re: Separar Linea de Textos por Palabras

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Volver arriba

- Temas similares

 
Permisos de este foro:
No puedes responder a temas en este foro.