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

remover caracter en cadena de texto

Ir abajo

remover caracter en cadena de texto Empty 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 : 28
Fecha de inscripción : 16/05/2016

Volver arriba Ir abajo

remover caracter en cadena de texto Empty 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 : 216
Fecha de inscripción : 16/03/2016
Edad : 72
Localización : CORDOBA ARGENTINA

https://acadhispano.foroargentina.net

Volver arriba Ir abajo

remover caracter en cadena de texto Empty 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 : 28
Fecha de inscripción : 16/05/2016

Volver arriba Ir abajo

remover caracter en cadena de texto Empty 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 : 216
Fecha de inscripción : 16/03/2016
Edad : 72
Localización : CORDOBA ARGENTINA

https://acadhispano.foroargentina.net

Volver arriba Ir abajo

remover caracter en cadena de texto Empty 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
saulo2016
saulo2016

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

Volver arriba Ir abajo

remover caracter en cadena de texto Empty 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
saulo2016
saulo2016

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

Volver arriba Ir abajo

remover caracter en cadena de texto Empty 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 : 28
Fecha de inscripción : 16/05/2016

Volver arriba Ir abajo

remover caracter en cadena de texto Empty Re: remover caracter en cadena de texto

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Volver arriba


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