remover caracter en cadena de texto

Ir abajo

remover caracter en cadena de texto

Mensaje por cyberactive el Miér Oct 03, 2018 1:34 am

Hola: Tengo una consulta, necesito elimianr caracteres de uno y varios textos a la vez, por ejemplo: un texto que es AREA = 525.68 m2 deseo eliminar los 3 caracteres finales que serian espacio y m2, pero asu vez tambien deseo eliminar los primeros textos que serian 7: AREA = he encontrado en un foro una rutina pero necesitaria modificarla para tambien eliminar los caracteres iniciales:

Código:
(defun c:Char-Rem-R ( / ent idx nol ss tmp)
   (command "UNDO" "BE")
 (if (setq ss (ssget "_:L" '((0 . "MTEXT,TEXT"))))
       (progn
          (setq nol (getint "\n Number of Characters to Remove from Front of String <1>:"))
     (if (eq nol nil) (setq nol 1))
 (repeat (setq idx (sslength ss))
 (setq ent (entget(ssname ss (setq idx (1- idx)))))
  (if (> (strlen (cdr(assoc 1 ent))) nol)
    (progn
 (setq ent (subst (cons 1 (substr (cdr(assoc 1 ent)) 1 (-(strlen (cdr(assoc 1 ent))) nol ))) (assoc 1 ent) ent) )  
 (entmod ent)
    )
            (setq tmp 1)
      )      
 )
 )
 (princ "No Text Selected. Please Try Again")
 )
 (command "UNDO" "END")
 (if (= tmp 1)
   (princ "\nSome Selected Text Have Less Characters than Number of Characters to Remove! (No Characters removed from these)")
 )
(princ)
)      


recalco que la rutina no es mia, esta tal cual se encuentra libremente.

cyberactive

Mensajes : 24
Fecha de inscripción : 16/05/2016

Ver perfil de usuario

Volver arriba Ir abajo

Re: remover caracter en cadena de texto

Mensaje por Admin el Sáb Oct 06, 2018 2:22 am

Prueba esto

Código:
(VL-LOAD-COM)
(setq texto "AREA = 525.68 m2")

(SETQ TEXTO-SIN-IZQ ( vl-string-left-trim "AREA = " TEXTO))

(SETQ TEXTO-SIN-DER (vl-string-right-trim " m2" TEXTO-SIN-IZQ))

Admin
Admin

Mensajes : 194
Fecha de inscripción : 16/03/2016
Edad : 70
Localización : CORDOBA ARGENTINA

Ver perfil de usuario http://acadhispano.foroargentina.net

Volver arriba Ir abajo

Re: remover caracter en cadena de texto

Mensaje por cyberactive el Mar Oct 09, 2018 6:07 pm

Hola Admin: muchas gracias, no he podido lograr correr al combinar el lisp anterior con los cambios que propones, podrias mostrarme como seria al combinarlo, muchas gracias y disculpa la molestia.

cyberactive

Mensajes : 24
Fecha de inscripción : 16/05/2016

Ver perfil de usuario

Volver arriba Ir abajo

Re: remover caracter en cadena de texto

Mensaje por Admin el Miér Oct 10, 2018 2:06 pm

El tema es que tu dices que quieres obtener parte numérica de un texto

Código:
"AREA = 525.68 m2")

En mi planteo y dado que tu muestras un solo texto , mi rutina saca tan solo los

"AREA = " de la parte izquierda del texto "AREA = 525.68 m2"
y luego saca la parte de derecha " m2" del texto "AREA = 525.68 m2".

Si pudieras mostrar el DWG , será mas fácil ayudarte.

Admin
Admin

Mensajes : 194
Fecha de inscripción : 16/03/2016
Edad : 70
Localización : CORDOBA ARGENTINA

Ver perfil de usuario http://acadhispano.foroargentina.net

Volver arriba Ir abajo

Re: remover caracter en cadena de texto

Mensaje por saulo2016 el Miér Oct 10, 2018 5:18 pm

Hola, cyberactive....

Acabo de modificar un poco el codigo que posteaste, y ya asi puedes eliminar los ultimos 3 caracteres, solo estoy viendo la manera de eliminar tambien los primeros 3.

aqui te dejo esta primera parte.

Código:
(defun c:Char-Rem-R ( / ent idx nol ss tmp)
   (command "UNDO" "BE")
 (if (setq ss (ssget "_:L" '((0 . "MTEXT,TEXT"))))
       (progn
     (if (eq nol nil) (setq nol 3))
 (repeat (setq idx (sslength ss))
 (setq ent (entget(ssname ss (setq idx (1- idx)))))
  (if (> (strlen (cdr(assoc 1 ent))) nol)
    (progn
 (setq ent (subst (cons 1 (substr (cdr(assoc 1 ent)) 1 (-(strlen (cdr(assoc 1 ent))) nol ))) (assoc 1 ent) ent) )  
 (entmod ent)
    )
            (setq tmp 1)
      )      
 )
 )

 (princ "Ningún texto seleccionado. Inténtalo de nuevo")
 )
 (command "UNDO" "END")
 (if (= tmp 1)
   (princ "\n¡Algunos textos seleccionados tienen menos caracteres que el número de caracteres para eliminar! (No hay caracteres eliminados de estos)")
 )
(princ)
)      



Saludos
avatar
saulo2016

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

Ver perfil de usuario

Volver arriba Ir abajo

Re: remover caracter en cadena de texto

Mensaje por saulo2016 el Miér Oct 10, 2018 7:15 pm

Hola de nuevo.

Aquí pongo este código que en alguna ocación conseguí, y hace lo que necesitas exactamente.

ojalá y te sirva.

Código:
; Recorta los textos a la derecha o izquierda, según lo indicado.

; Programa desarrollado por Mario Torres Pejerrey
; http://www.construcgeek.com/

;|Este es un lisp en formato original, se puede ver el código fuente, la intención, es de que el código fuente
; pueda ser modificado y adaptado a la necesidad de cada usuario, lo único que siempre se solicita en estos
; casos es de que siempre se haga referencia al autor del mismo (es decir que no se modifique la autoría del lisp),
; salvo que este se modifique ampliamente, si se construye un nuevo programa tomando como partes un lisp publicado,
; se debería de hacer el comentario de que parte del nuevo programa esta basado en el autor original.|;

; Programa descargado desde http://www.construcgeek.com/
; ConstrucGeek 2008


;Cargar las funciones ActiveX (Visual Lisp)
(vl-load-com)

(defun c:ret()

 (if (null QueRecortarDef)(setq QueRecortarDef "Derecha"))
 (initget "Izquierda Derecha Ambos")
 (setq QueRecortar (getkword (strcat "\nIndique el lado a recortar los textos [Izquierda/Derecha/Ambos] <" QueRecortarDef ">: ")))
 (if (null QueRecortar)(setq QueRecortar QueRecortarDef))(setq QueRecortarDef QueRecortar)
 
 (cond
 ((= QueRecortar "Izquierda")
 (RecortarIzquierda)
 )
 ((= QueRecortar "Derecha")
 (RecortarDerecha)
 )
 ((= QueRecortar "Ambos")
 (RecortarIzquierda)
 (RecortarDerecha)
 )
 )
 
 (princ "\nSeleccione los textos a recortar")
 (setq conj (ssget '((-4 . "<OR")(0 . "TEXT")(0 . "MTEXT")(-4 . "OR>"))))
 (setq nums (sslength conj))
 
 (setq n 0)
 
 (repeat nums
 (setq entsup (ssname conj n))
 
 (setq entvla (vlax-ename->vla-object entsup))
 (setq vtextoOrigen (vla-get-TextString entvla))
 
 (cond
 ((= QueRecortar "Izquierda")
 (setq vTextoDestino (substr vtextoOrigen (+ nCaracteresRecortarIzquierda 1)(strlen vtextoOrigen) ))
 )
 ((= QueRecortar "Derecha")
 (setq vTextoDestino (substr vtextoOrigen 1 (- (strlen vtextoOrigen) nCaracteresRecortarDerecha)))
 )
 ((= QueRecortar "Ambos")
 (setq vTextoDestino (substr vtextoOrigen (+ nCaracteresRecortarIzquierda 1)(strlen vtextoOrigen) ))
 (setq vTextoDestino (substr vTextoDestino 1 (- (strlen vTextoDestino) nCaracteresRecortarDerecha)))
 )
 )
 
 (vla-put-TextString entvla vTextoDestino)
 
 (setq n (1+ n))
 )
 
(princ)
)

(defun RecortarIzquierda()
 (if (null nCaracteresRecortarIzquierdaDef)(setq nCaracteresRecortarIzquierdaDef 0))
 (setq nCaracteresRecortarIzquierda (getint (strcat "\nIngrese el número de caracteres a recortar a la izquierda <" (itoa nCaracteresRecortarIzquierdaDef) ">: ")))
 (if (null nCaracteresRecortarIzquierda)(setq nCaracteresRecortarIzquierda nCaracteresRecortarIzquierdaDef))(setq nCaracteresRecortarIzquierdaDef nCaracteresRecortarIzquierda)
)

(defun RecortarDerecha()
 (if (null nCaracteresRecortarDerechaDef)(setq nCaracteresRecortarDerechaDef 0))
 (setq nCaracteresRecortarDerecha (getint (strcat "\nIngrese el número de caracteres a recortar a la derecha <" (itoa nCaracteresRecortarDerechaDef) ">: ")))
 (if (null nCaracteresRecortarDerecha)(setq nCaracteresRecortarDerecha nCaracteresRecortarDerechaDef))(setq nCaracteresRecortarDerechaDef nCaracteresRecortarDerecha)
)



Saludos
avatar
saulo2016

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

Ver perfil de usuario

Volver arriba Ir abajo

Re: remover caracter en cadena de texto

Mensaje por cyberactive el Miér Oct 10, 2018 7:35 pm

Eso era lo que necesitaba, me servirá de mucho, muchas gracias.

cyberactive

Mensajes : 24
Fecha de inscripción : 16/05/2016

Ver perfil de usuario

Volver arriba Ir abajo

Re: remover caracter en cadena de texto

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.